| 查看: 360 | 回复: 0 | ||||
cw277木虫 (正式写手)
|
[求助]
俄罗斯方块程序的一个问题~~
|
|
那个二维数组shape是怎么表示形状的? 我没看出规律。。 #include #include #include #include #include #define MOD 28 #define SIZE_N 19 #define SIZE_M 12 int cur_x,cur_y,score,mark,next,map[SIZE_N][SIZE_M],Gamespeed=300; char key1,key; int shape[28][6]= { //这是个比较偷懒的方法,就是7种方块,加上旋转总共28种 {0,-1,0,-2,1,0}, {0,1,1,0,2,0}, {-1,0,0,1,0,2}, {0,-1,-1,0,-2,0}, {0,-1,0,1,-1,0}, {0,1,1,0,-1,0}, {1,0,0,-1,0,1}, {1,0,-1,0,0,-1}, {-1,1,0,1,1,0}, {0,-1,1,0,1,1}, {-1,0,0,-1,1,-1}, {-1,-1,-1,0,0,1}, {-1,0,0,1,1,1}, {0,1,1,-1,1,0}, {-1,0,0,1,1,1}, {0,1,1,-1,1,0}, {-1,0,0,-1,0,-2}, {-1,0,-2,0,0,1}, {0,1,0,2,1,0}, {0,-1,1,0,2,0}, {0,1,1,0,1,1}, {0,-1,1,0,1,-1}, {-1,0,0,-1,-1,-1}, {-1,0,-1,1,0,1}, {0,1,0,2,0,3}, {1,0,2,0,3,0}, {0,-1,0,-2,0,-3}, {-1,0,-2,0,-3,0} }; void gotoxy(int x,int y){ //gotoxy在TC中是在system.h库文件里的一个函 COORD c; c.X=x-1; c.Y=y-1; SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c); } void Gameover(){//游戏结束的判断 int i,j,flag=0; for(j=1;j if(map[1][j]!=0) { flag=1;break; } } if(flag==1){ for(i=1;i gotoxy(2,i+1); for(j=1;j printf("□"); //□ }puts(""); } gotoxy(7,9); printf("GAME OVER!"); gotoxy(1,SIZE_N+1); exit(0); } } void ShowMap(int id) { int i,j; gotoxy(1,1); if(id!=-1) { for(i=0;i if(i==0&&j==0 || i==0&&j==SIZE_M-1 || j==0&&i==SIZE_N-1 || j==SIZE_M-1&&i==SIZE_N-1)printf(" "); else if(i==0 || i==SIZE_N-1) printf("--"); else if(j==0 || j==SIZE_M-1) printf("|"); else if(map[j]==2) printf("■"); else if(i==cur_x+shape[id][0] && j==cur_y+shape[id][1] || i==cur_x+shape[id][2] && j==cur_y+shape[id][3] || i==cur_x+shape[id][4] && j==cur_y+shape[id][5] || i==cur_x && j==cur_y) printf("■"); else if(map[j]==0) printf(" "); } if(i==1) printf(" next:"); if(i==11) printf(" score : %d",score); if(i==14) printf(" speed : %d",score/100+1); puts(""); } } else { mark=1; for(i=0;i for(j=0;j if(i==0&&j==0 || i==0&&j==SIZE_M-1 || j==0&&i==SIZE_N-1 || j==SIZE_M-1&&i==SIZE_N-1)printf(" "); else if(i==0 || i==SIZE_N-1)printf("--"); else if(j==0 || j==SIZE_M-1)printf("|"); else if(map[j]==2) printf("■"); else if(map[j]==0) printf(" "); } if(i==1) printf(" next:"); if(i==11) printf(" score : %d",score); if(i==14) printf(" speed : %d",score/100+1); puts(""); } } /*对于next 方块的处理,先擦除再画图*/ for(i=2;i<=10;i++) { for(j=23;j<=34;j++) { gotoxy(j+1,i+1); printf(" "); } } gotoxy(29,6); printf("■"); for(i=0;i<6;i=i+2) { gotoxy(29+2*shape[next][i+1],6+shape[next]); printf("■"); } Sleep(Gamespeed); } void init(int id){//初始化函数,cur_x,cur_y是全局变量,标记了移动方块的位置 memset(map,0,sizeof(map)); for(int i=0;i map[j]=-1; } cur_x=0; cur_y=6; ShowMap(id); } int judge_in(int x,int y,int id) {//判断是否出界,或者说是否合法 if(map[x][y]!=0) return 0; for(int i=0;i<6;i=i+2) { if(map[ x+shape[id] ][ y+shape[id][i+1] ]!=0) return 0; } return 1; } void fun_score() {//得分,擦除行的闪烁,还有图形的向下平移 for(int i=1;i for(int j=1;j { flag=1; break; } } if(flag==0){ int k=3; while(k--){ gotoxy(2,i+1); for(int ii=1;ii if(k%2==1) printf(" "); else printf("■"); } }Sleep(100); } for(int ii=i;ii>1;ii--){ for(int jj=1;jj } ShowMap(-1); score+=10; if(score%100==0 && score!=0) Gamespeed-=50; } } } int main(){ int i,id,set=1; srand(time(NULL)); id=rand()%MOD; id=(id+MOD)%MOD; next=rand()%MOD; next=(next+MOD)%MOD; init(id); while(1){ Here: mark=0; if(set==0) { id=next; next=rand()%MOD; next=(next+MOD)%MOD; cur_x=0; cur_y=6; set=1; } while(!kbhit()) { Gameover(); if(judge_in(cur_x+1,cur_y,id)==1) cur_x++; else { map[cur_x][cur_y]=2; for(i=0;i<6;i=i+2) map[ cur_x+shape[id] ][ cur_y+shape[id][i+1] ]=2; set=0; } fun_score(); if(mark!=1) ShowMap(id); goto Here; }//end of while(!kbhit()) key=getch(); if(key1==-32 && key==72){ int tmp=id; id++; if( id%4==0 && id!=0 ) id=id-4; if(judge_in(cur_x,cur_y,id)!=1) id=tmp; } else if(key1==-32 && key==80 && judge_in(cur_x+1,cur_y,id)==1) cur_x++; else if(key1==-32 && key==75 && judge_in(cur_x,cur_y-1,id)==1) cur_y--; else if(key1==-32 && key==77 && judge_in(cur_x,cur_y+1,id)==1) cur_y++; else if(key==27) return 0; key1=key; } return 0; } |
» 收录本帖的淘帖专辑推荐
郑华 |
» 猜你喜欢
存款400万可以在学校里躺平吗
已经有33人回复
拟解决的关键科学问题还要不要写
已经有8人回复
最失望的一年
已经有14人回复
求助一下有机合成大神
已经有3人回复
求推荐英文EI期刊
已经有5人回复
请教限项目规定
已经有4人回复
26申博
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
基金申报
已经有6人回复
疑惑?
已经有5人回复

找到一些相关的精华帖子,希望有用哦~
关于perl在windowsxp下安装的一个问题
已经有4人回复
自己写的一个小程序,出现问题不知道怎么解决
已经有9人回复
求组一个c程序问题
已经有12人回复
求大虾指导 一个关于atoi函数的问题
已经有3人回复
关于ACCESS的一个简单问题
已经有7人回复
一个区间搜索的c语言程序 出问题了
已经有8人回复
求matlab求解一个方程组的问题
已经有6人回复
请教一个Mathematica积分的问题(重金求解)
已经有6人回复
请教一个fortran小程序编译出错的问题,谢谢
已经有9人回复
关于c语言的一个小问题 坐等回复啊 急啊 是关于建立数组的
已经有9人回复
请教一个while loop程序的问题
已经有5人回复
【求助】一个求数组绝对值的小问题
已经有7人回复
【求助】请教一个关于Mathematica中计算小量的问题
已经有4人回复
【求助】VC的一个小问题
已经有30人回复
科研从小木虫开始,人人为我,我为人人













回复此楼

点击这里搜索更多相关资源