| 查看: 408 | 回复: 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; } |
» 收录本帖的淘帖专辑推荐
郑华 |
» 猜你喜欢
在职考研
已经有4人回复
b口会评
已经有3人回复
2026年面上项目中了,2A+B, 会评顺利通过
已经有13人回复
生命口会评
已经有4人回复
大龄残疾硕士的一点执念
已经有21人回复
今年E04面上
已经有20人回复
网络举报学术不端成为了男女之间情杀的手段了,真荒唐。。。
已经有3人回复
Suzuki偶联中硼酸酯原料掉下的硼酸酯是否可以自身偶联,生成B2Pin2杂质
已经有3人回复
刑法学论文投稿求助
已经有5人回复
Journal of Environmental Chemical Engineering
已经有3人回复

找到一些相关的精华帖子,希望有用哦~
关于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人回复
科研从小木虫开始,人人为我,我为人人











回复此楼

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