新俄罗斯方块
邦邦小剧场给的灵感,之前也看过各种各样的俄罗斯方块,是经典,就在于它总能hold住各种各样类型,就像经典的书总能运用在各种各样的场合,而这经典的游戏总能改编结合成各种各样类型的新游,合适又创新。这次制作分了两步,先是把原来的俄罗斯方块改成简易型,就是把原来各种各样的方块类型归一化成两个格子拼起来,规则还是铺满一层就消除,然后下沉;再是改成消消乐型,给每次的两个格子不同颜色,相同颜色的十个格子消除,然后下沉,铺满不再消除,但是combo效果的功能没有加上,有机会可以加。
简易型俄罗斯方块代码:
#include iostream
#include cstdlib
#include ctime
#include ctype.h
#include vector
#include math.h
#include iomanip
#include graphics.h
#include conio.h
#include windows.h
#include fstream
#include string
using namespace std;
struct Node
{
int posx,posy;
int num;
int lifenum;
int colornum;
};
Node box[211];
int exit1,exit2,exit3;
clock_t t1,t2,t3;
int flag,flag1;
int speed;
int seed1;
int point;
void W()
{
int i,j,k;
if(flag==flag1-1box[flag-10].lifenum==0){
if(box[flag-10].lifenum==0){box[flag-10].lifenum=1;box[flag-10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag-10;}
}
else if(flag==flag1+1box[flag+10].lifenum==0){
if(box[flag+10].lifenum==0){box[flag+10].lifenum=1;box[flag+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag+10;}
}
else if(flag==flag1-10box[flag+1].lifenum==0flag%109){
if(box[flag+1].lifenum==0){box[flag+1].lifenum=1;box[flag+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag+1;}
}
else if(flag==flag1+10flag%100){
if(box[flag-1].lifenum==0){box[flag-1].lifenum=1;box[flag-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag-1;}
}
}
void A()
{
int i,j,k;
if(flag%100flag1%100){
if(flag==flag1-1box[flag-1].lifenum==0){
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;
}
else if(flag1==flag-1box[flag1-1].lifenum==0){
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;
}
else if(box[flag-1].lifenum==0box[flag1-1].lifenum==0){
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;
}
}
}
void D()
{
int i,j,k;
if(flag%109flag1%109){
if(flag==flag1+1box[flag+1].lifenum==0){
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;
}
else if(flag1==flag+1box[flag1+1].lifenum==0){
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;
}
else if(box[flag+1].lifenum==0box[flag1+1].lifenum==0){
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;
}
}
}
void check()
{
int i,j,k,t;
for(i=19;i=1;i--){
t=0;
for(j=0;j=9;j++){
if(box[i*10+j].lifenum==0){
t=1;
break;
}
}
if(t==0){
for(j=0;j=9;j++){
box[i*10+j].lifenum=0;
}
for(i=189;i=0;i--){
if(box[i+10].lifenum==0box[i].lifenum!=0){
box[i+10].lifenum=1;
box[i+10].colornum=box[i].colornum;
box[i].lifenum=0;
}
}
i=20;
point=point+10;
}
}
}
void draw()
{
int i,j,k;
FlushBatchDraw();
clearrectangle(0,0,400,400);
line(98,0,98,400);
line(302,0,302,400);
for(i=0;i200;i++){
if(box[i].lifenum==1){
fillrectangle(box[i].posx,box[i].posy,box[i].posx+20,box[i].posy+20);
}
}
}
void create()
{
int i,j;
if(box[4].lifenum!=0||box[14].lifenum!=0){
exit1=1;exit2=1;exit3=1;
}
else{
box[4].colornum=1;
box[14].colornum=box[4].colornum;
box[4].lifenum=1;
box[14].lifenum=1;
}
flag=4;flag1=14;
}
void S()
{
int i,j,k;
if(flag==flag1+10box[flag+10].lifenum==0){
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;
}
else if(flag==flag1-10box[flag1+10].lifenum==0){
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;
}
else if(box[flag+10].lifenum==0box[flag1+10].lifenum==0){
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;
}
else{
check();
create();
}
draw();
}
void initialization()
{
int i,j,k;
exit1=0;exit2=0;exit3=0;
seed1=0;
speed=300;
point=0;
initgraph(400, 400,SHOWCONSOLE);
setlinecolor(GREEN);
line(98,0,98,400);
line(302,0,302,400);
for(i=0;i200;i++){
box[i].num=i;
box[i].posx=100+20*(i%10);
box[i].posy=20*(i/10);
box[i].lifenum=0;
box[i].colornum=0;
}
for(i=200;i210;i++){
box[i].lifenum=1;
}
}
void move()
{
int i;
char j;
BeginBatchDraw();
create();
draw();
while(exit1==0){
Sleep(1000);
t1=clock();
t2=clock();
while(exit2==0){
if (_kbhit()){
j=_getch();
fflush(stdin);
switch(j){
case w:W();break;
case a:A();break;
case d:D();break;
case s:S();break;
case o:speed=0xffffff;break;
case i:speed=300;break;
case p:exit2=1;exit1=1;break;
default:break;
}
fflush(stdin);
}
t2=clock();
while(t2-t1=speed){
t1=clock();
S();
}
}
}
EndBatchDraw();
}
void carry()
{
int i,j,k;
initialization();
while(exit3==0){
move();
}
_getch();
closegraph();
cout得分:pointendl;
}
int main()
{
carry();
return 0;
}
消消乐俄罗斯方块代码:
#include iostream
#include cstdlib
#include ctime
#include ctype.h
#include vector
#include math.h
#include iomanip
#include graphics.h
#include conio.h
#include windows.h
#include fstream
#include string
using namespace std;
struct Node
{
int posx,posy;
int num;
int lifenum;
int colornum;
};
struct Node1
{
int num;
int lifenum;
int flagnum,flag1num;
};
struct Node2
{
int num;
int lifenum;
int boxnum;
};
Node box[211];
Node1 eat[100];
Node2 box1[200];
int exit1,exit2,exit3,exit4;
clock_t t1,t2,t3;
int flag,flag1;
int speed;
int seed1;
int point;
COLORREF img[8];
void W()
{
int i,j,k;
if(flag==flag1-1box[flag-10].lifenum==0){
if(box[flag-10].lifenum==0){box[flag-10].lifenum=1;box[flag-10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag-10;}
}
else if(flag==flag1+1box[flag+10].lifenum==0){
if(box[flag+10].lifenum==0){box[flag+10].lifenum=1;box[flag+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag+10;}
}
else if(flag==flag1-10box[flag+1].lifenum==0flag%109){
if(box[flag+1].lifenum==0){box[flag+1].lifenum=1;box[flag+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag+1;}
}
else if(flag==flag1+10flag%100){
if(box[flag-1].lifenum==0){box[flag-1].lifenum=1;box[flag-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag-1;}
}
}
void A()
{
int i,j,k;
if(flag%100flag1%100){
if(flag==flag1-1box[flag-1].lifenum==0){
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;
}
else if(flag1==flag-1box[flag1-1].lifenum==0){
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;
}
else if(box[flag-1].lifenum==0box[flag1-1].lifenum==0){
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;
}
}
}
void D()
{
int i,j,k;
if(flag%109flag1%109){
if(flag==flag1+1box[flag+1].lifenum==0){
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;
}
else if(flag1==flag+1box[flag1+1].lifenum==0){
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;
}
else if(box[flag+1].lifenum==0box[flag1+1].lifenum==0){
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;
}
}
}
void check(int x)
{
int i,j,k,t,flag2;
for(i=0;i200;i++){
box1[i].num=i;
box1[i].lifenum=0;
box1[i].boxnum=101;
}
i=eat[x].flagnum;
box1[0].boxnum=eat[x].flagnum;
flag2=1;
for(i=0;iflag2;i++){
j=box1[i].boxnum;
if(j%10!=0){
j=j-1;
for(j;j%10!=9j=0;j--){
if(box[j].colornum==box[eat[x].flagnum].colornum){
exit3=0;
for(k=0;kflag2;k++){
if(box1[k].boxnum==j){
exit3=1;break;
}
}
if(exit3==0){box1[flag2].boxnum=j;flag2++;}
}
else{
break;
}
}
}
j=box1[i].boxnum;
if(j%10!=9){
j=j+1;
for(j;j%10!=0j=199;j++){
if(box[j].colornum==box[eat[x].flagnum].colornum){
exit3=0;
for(k=0;kflag2;k++){
if(box1[k].boxnum==j){
exit3=1;break;
}
}
if(exit3==0){box1[flag2].boxnum=j;flag2++;}
}
else{
break;
}
}
}
j=box1[i].boxnum;
if(j/10!=0){
j=j-10;
for(j;j=0;j-=10){
if(box[j].colornum==box[eat[x].flagnum].colornum){
exit3=0;
for(k=0;kflag2;k++){
if(box1[k].boxnum==j){
exit3=1;break;
}
}
if(exit3==0){box1[flag2].boxnum=j;flag2++;}
}
else{
break;
}
}
}
j=box1[i].boxnum;
if(j/10!=9){
j=j+10;
for(j;j=199;j+=10){
if(box[j].colornum==box[eat[x].flagnum].colornum){
exit3=0;
for(k=0;kflag2;k++){
if(box1[k].boxnum==j){
exit3=1;break;
}
}
if(exit3==0){box1[flag2].boxnum=j;flag2++;}
}
else{
break;
}
}
}
}
if(flag2=10){
point+=flag2;
for(i=0;iflag2;i++){
box[box1[i].boxnum].lifenum=0;
box[box1[i].boxnum].colornum=0;
j=0;
while(box1[i].boxnum!=eat[j].flagnumbox1[i].boxnum!=eat[j].flag1num){
j++;
}
eat[j].lifenum=0;
}
j=1;
while(j!=0){
j=0;
for(i=0;i100;i++){
if(eat[i].lifenum==1){
if(eat[i].flagnum==eat[i].flag1num+10box[eat[i].flagnum+10].lifenum==0){
box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;
box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;
j++;
}
else if(eat[i].flagnum==eat[i].flag1num-10box[eat[i].flag1num+10].lifenum==0){
box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;
box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;
j++;
}
else if(box[eat[i].flagnum+10].lifenum==0box[eat[i].flag1num+10].lifenum==0){
box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;
box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;
j++;
}
}
}
}
}
}
void draw()
{
int i,j,k;
FlushBatchDraw();
clearrectangle(0,0,400,400);
line(98,0,98,400);
line(302,0,302,400);
for(i=0;i200;i++){
if(box[i].lifenum==1box[i].colornum!=0){
setfillcolor(img[box[i].colornum]);
fillrectangle(box[i].posx,box[i].posy,box[i].posx+20,box[i].posy+20);
}
else if(box[i].lifenum==1box[i].colornum==0){
box[i].lifenum=0;
}
}
}
void create()
{
int i,j;
if(box[4].lifenum!=0||box[14].lifenum!=0){
exit1=1;exit2=1;exit4=1;
}
else{
seed1++;
srand(seed1);
box[4].colornum=rand()%5+1;
box[14].colornum=box[4].colornum;
box[4].lifenum=1;
box[14].lifenum=1;
}
flag=4;flag1=14;
}
void S()
{
int i,j,k,t;
if(flag==flag1+10box[flag+10].lifenum==0){
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;
}
else if(flag==flag1-10box[flag1+10].lifenum==0){
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;
}
else if(box[flag+10].lifenum==0box[flag1+10].lifenum==0){
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;
}
else{
i=0;
while(eat[i].lifenum!=0){
i++;
}
eat[i].lifenum=1;
eat[i].flagnum=flag;
eat[i].flag1num=flag1;
check(i);
create();
}
draw();
}
void initialization()
{
int i,j,k;
exit1=0;exit2=0;exit3=0;exit4=0;
seed1=0;
speed=300;
point=0;
initgraph(400, 400,SHOWCONSOLE);
img[1]=LIGHTRED;
img[2]=YELLOW;
img[3]=LIGHTGREEN;
img[4]=LIGHTBLUE;
img[5]=LIGHTMAGENTA;
setlinecolor(GREEN);
line(98,0,98,400);
line(302,0,302,400);
for(i=0;i200;i++){
box[i].num=i;
box[i].posx=100+20*(i%10);
box[i].posy=20*(i/10);
box[i].lifenum=0;
box[i].colornum=0;
}
for(i=200;i210;i++){
box[i].lifenum=1;
}
}
void move()
{
int i;
char j;
BeginBatchDraw();
create();
draw();
while(exit1==0){
Sleep(1000);
t1=clock();
t2=clock();
while(exit2==0){
if (_kbhit()){
j=_getch();
fflush(stdin);
switch(j){
case w:W();break;
case a:A();break;
case d:D();break;
case s:S();break;
case o:speed=0xffffff;break;
case i:speed=300;break;
case p:exit2=1;exit1=1;break;
default:break;
}
fflush(stdin);
}
t2=clock();
while(t2-t1=speed){
t1=clock();
S();
}
}
}
EndBatchDraw();
}
void carry()
{
int i,j,k;
initialization();
while(exit4==0){
move();
}
_getch();
closegraph();
cout得分:pointendl;
}
int main()
{
carry();
return 0;
}
演示视频1:
演示视频2:
俄罗斯方块怎么玩
进入俄罗斯方块游戏,控制方块下落。
落下的方块越多,得到的积分越高。
消除一排砖块,增加累计积分,同时也会有更多的空间,当砖块到达顶层,游戏结束。
通过左右移动方块使得方框横向填满完成消除。俄罗斯方块是一款非常经典的小游戏,自发售以来取得了非常大的成功,在几十年前这是巅峰和潮流的代表,即便放到现在,也是一个充满趣味的游戏。
俄罗斯方块来自哪个国家
俄罗斯方块是大家耳熟能详的小游戏,那么大家知道俄罗斯方块是哪个国家的游戏吗?今天就来告诉大家俄罗斯方块来自哪个国家,希望可以帮到大家。
从这款游戏的名字我们就可以看出俄罗斯方块是俄罗斯人发明的游戏,发明者叫做阿列克谢·帕基特诺夫(AlexeyPazhitnov);该游戏曾经被多家公司代理过,经过多轮诉讼后,该游戏的代理权最终被任天堂获得。
俄罗斯方块原名是俄语Тетрис(英语是Tetris),这个名字来源于希腊语tetra,意思是“四”,而游戏的作者最喜欢网球(tennis)。于是,他把两个词tetra和tennis合而为一,命名为Tetris,这也就是俄罗斯方块名字的由来。
|新俄罗斯方块
俄罗斯方块怎么玩 俄罗斯方块来自哪个国家 新俄罗斯方块