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
- c语言俄罗斯方块编程
- C语言编写俄罗斯方块
- 俄罗斯方块源代码 C语言
- 俄罗斯方块游戏C语言
- C语言 俄罗斯方块
- 俄罗斯方块(C语言)
- C语言小游戏 - 俄罗斯方块
- c语言俄罗斯方块
- c语言俄罗斯方块
- C语言游戏:俄罗斯方块
- C语言-控制台俄罗斯方块
- 【C语言】实现俄罗斯方块
- 俄罗斯方块.C语言
- 俄罗斯方块—C语言
- 俄罗斯方块(C语言)
- 俄罗斯方块纯C语言
- C语言写的俄罗斯方块
- 用c语言编写俄罗斯方块
- 九度OJ 1470 调整方阵
- InternetOpen, InternetOpenUrl, InternetReadFile 获取网页源代码
- Android工程导入support-v4包错误问题
- linux shell 时间运算以及时间差计算方法
- Retrofit框架使用笔记
- C语言 俄罗斯方块
- jQuery.extend和jQuery.fn.extend的区别
- python 输入输出,注释的使用
- node.js中实现用户注册的功能
- UVA - 138 - Street Numbers (简单数论)
- 类的构造方法运用及理解
- Ubuntu14.04环境下ROS indigo 安装
- 使用图片方式自定义iOS导航栏navigationItem的backBarButtonItem
- Android开发之如何保证Service不被杀掉(broadcast+system/app)