| 查看: 414 | 回复: 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; } |
» 收录本帖的淘帖专辑推荐
郑华 |
» 猜你喜欢
求各位大神看下
已经有29人回复
咨询面上基金
已经有7人回复
影响面上的因素
已经有11人回复
filecode
已经有4人回复
8月时间戳变的,举个手。玩一下,释放压力
已经有11人回复
一个有机合成实验室都需要哪些设备?
已经有11人回复
面上再次挂了,太难了,躺也躺不了,倦也卷不过,小学校之殇!
已经有30人回复
好消息?这个有何含义???
已经有10人回复
【2027博士申请】纳米药物递送方向
已经有4人回复
UV压敏胶开发
已经有7人回复

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










回复此楼

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