C语言 俄罗斯方块

来源:互联网 发布:flashplayer mac 编辑:程序博客网 时间:2024/05/01 00:56

C语言实现的俄罗斯方块,

仅能在windows平台编译运行。

#include<stdio.h>#include<time.h>#include<conio.h>#include<windows.h>#define MAX_Y 30#define MAX_X 20#define false 0#define true 1int gameBox[7][4][4]={{0,0,0,0, 0,0,0,0, 1,1,1,1, 0,0,0,0,},{0,0,0,0, 0,1,1,0, 0,1,0,0, 0,1,0,0,},{0,0,0,0, 0,0,1,1, 0,0,0,1, 0,0,0,1,},{0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0, },{0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,},{0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,},{0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,}};int mapBox[MAX_Y+8][MAX_X+8];int X=8,Y=0;long t1;int fen=0;int change(int box[4][4],int newBox[4][4]){int i1,i2;for(i1=0;i1<4;i1++){for(i2=0;i2<4;i2++){newBox[i1][i2]=box[3-i2][i1];}}return 0;}int timer(long t){static int a;long t2=clock();if((t2-t1)>t){t1=t2;return 1;}return 0;}void gotoxy(int x, int y){COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);}int initMap(int max_y,int max_x){int i1,i2;t1=clock();for(i1=0;i1<max_y;i1++){for(i2=0;i2<max_x;i2++){if(i1!=MAX_Y){if((i2==3||i2==(MAX_X+4))&&i1<MAX_Y)mapBox[i1][i2]=1;else mapBox[i1][i2]=0;}else if(i2>=3&&i2<=MAX_X+4)mapBox[i1][i2]=1;}}return 0;}int drawMap(void){int i,i1,i2;gotoxy(0,0);for(i1=0;i1<MAX_Y+8;i1++){for(i2=0;i2<MAX_X+8;i2++){if(mapBox[i1][i2]==1)printf("■");else printf("  ");}printf("\n");}gotoxy(26*2,10);printf("分数:%d",fen);}int drawBox(int box[4][4],int x,int y,int mode){int i1,i2;for(i1=0;i1<4;i1++){for(i2=0;i2<4;i2++){if(box[i1][i2]==1){gotoxy((x+i2)*2,y+i1);if(mode==1)printf("□");else printf("  ");}}}}int test(int box[4][4],int x,int y){int i1,i2;for(i1=0;i1<4;i1++)for(i2=0;i2<4;i2++){ if(box[i1][i2]&mapBox[y+i1][x+i2])return 0;} return 1;}int write(int box[4][4],int x,int y){int i1,i2;for(i1=0;i1<4;i1++)for(i2=0;i2<4;i2++){ mapBox[y+i1][x+i2]=box[i1][i2]||mapBox[y+i1][x+i2];}return 1;}int checkMap(void){int i1,i2,i11,i22;int flag=0;for(i1=0;i1<MAX_Y;i1++){ for(i2=4;i2<25;i2++){ if(mapBox[i1][i2]!=1)flag=1;} if(flag==0){Beep(264,110);Beep(495,100);fen=fen+10;for(i11=i1;i11>0;i11--){for(i22=4;i22<25;i22++){mapBox[i11][i22]=mapBox[i11-1][i22];}}}flag=0;} }int main(void){int box[4][4];int tempBox[4][4];int i1,i2,n,i,daly_time=500,life=1;srand((unsigned)time(NULL));system("mode con cols=64 lines=40");n=rand()%7;for(i1=0;i1<4;i1++)for(i2=0;i2<4;i2++)box[i1][i2]=gameBox[n][i1][i2];initMap(MAX_Y+8,MAX_X+8);drawMap();drawBox(box,X,Y,1);while(life){if(timer(daly_time)){drawBox(box,X,Y,0);if(test(box,X,Y+1))Y++;else{write(box,X,Y);drawMap();checkMap();drawMap();n=rand()%7;for(i1=0;i1<4;i1++)for(i2=0;i2<4;i2++)box[i1][i2]=gameBox[n][i1][i2];X=8;Y=0;if(!test(box,X,Y))life=0;}drawBox(box,X,Y,1);}if(kbhit()){switch(getch()){case 'w' :if(X<4){if(test(box,4,Y)){drawBox(box,X,Y,0);X--;drawBox(box,4,Y,1);}X=4;}if(X>20){if(test(box,20,Y)){drawBox(box,X,Y,0);X--;drawBox(box,20,Y,1);}X=20;}change(box,tempBox);if(test(tempBox,X,Y)){drawBox(box,X,Y,0);for(i1=0;i1<4;i1++)for(i2=0;i2<4;i2++)box[i1][i2]=tempBox[i1][i2];drawBox(box,X,Y,1); }break;case 's' :daly_time=10;break;case 'a' :if(test(box,X-1,Y)){drawBox(box,X,Y,0);X--;drawBox(box,X,Y,1);}break;case 'd' :if(test(box,X+1,Y)){drawBox(box,X,Y,0);X++;drawBox(box,X,Y,1);}break;}}else daly_time=500;}printf("\a");printf("你挂了!游戏结束!");}




0 0
原创粉丝点击