俄罗斯方块c语言代码 俄罗斯方块C语言代码


俄罗斯方块c语言代码 俄罗斯方块C语言代码

文章插图
大家好,小跳来为大家解答以上的问题 。俄罗斯方块C语言代码,俄罗斯方块c语言代码这个很多人还不知道,现在让我们一起来看看吧!
1、俄罗斯方块C源代码#include #include #include #include #defineZL4//坐标增量, 不使游戏窗口靠边#define WID36//游戏窗口的宽度#define HEI20//游戏窗口的高度int i,j,Ta,Tb,Tc;// Ta,Tb,Tc用于记住和转换方块变量的值int a[60][60]={0};//标记游戏屏幕各坐标点:0,1,2分别为空、方块、边框int b[4];//标记4个"口"方块:1有,0无,类似开关int x,y, level,score,speed;//方块中心位置的x,y坐标 。
2、游戏等级、得分和游戏速度int flag,next;//当前要操作的方块类型序号,下一个方块类型序号void gtxy(int m, int n);//以下声明要用到的自编函数void gflag( );//获得下一方块序号void csh( );//初始化界面void start( );//开始部分void prfk ( );//打印方块void clfk( );//清除方块void mkfk( );//制作方块void keyD( );//按键操作intifmov( );//判断方块能否移动或变体void clHA( );//清除满行的方块void clNEXT( );//清除边框外的NEXT方块int main( ){ csh( );while(1){start( );//开始部分while(1){ prfk( );Sleep(speed);//延时clfk( );Tb=x;Tc=flag;//临存当前x坐标和序号,以备撤销操作keyD( );y++;//方块向下移动if (ifmov( )==0) { y--; prfk( ); dlHA( ); break;} //不可动放下,删行,跨出循环}for(i=y-2;iZL ){ gtxy(i,j); printf("□"); } } } gtxy(ZL+WID+3,ZL+1);printf("level : %d",level);//以下打印菜单信息 gtxy(ZL+WID+3,ZL+3);printf("score : %d",score); gtxy(ZL+WID+3,ZL+5);printf("speed : %d",speed);}void clfk( )//清除俄罗斯方块{ for(i=0;i<4;i++) { b[i]=0; }//数组b[4]每个元素的值都为0mkfk ( );//制作俄罗斯方块 for( i=x-2; i<=x+4; i+=2 )//清除方块{ for(j=y-2;j<=y+1;j++){ if( a[i][j]==0 && j>ZL ){ gtxy(i,j); printf(""); } } }}void mkfk( )//制作俄罗斯方块{ a[x][ y]=b[0];//方块中心位置状态: 1-有,0-无 switch(flag)//共6大类 。
4、19种小类型 { case 1: { a[x][y-1]=b[1]; a[x+2][y-1]=b[2]; a[x+2][y]=b[3]; break; }//田字方块case 2: { a[x-2][y]=b[1]; a[x+2][y]=b[2]; a[x+4][y]=b[3]; break; }//直线方块:----case 3: { a[x][y-1]=b[1]; a[x][y-2]=b[2]; a[x][y+1]=b[3]; break; }//直线方块: |case 4: { a[x-2][y]=b[1]; a[x+2][y]=b[2]; a[x][y+1]=b[3]; break; }//T字方块case 5: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x-2][y]=b[3]; break; }//T字顺时针转90度case 6: { a[x][y-1]=b[1]; a[x-2][y]=b[2]; a[x+2][y]=b[3]; break; }//T字顺转180度case 7: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x+2][y]=b[3]; break; }//T字顺转270度case 8: { a[x][y+1]=b[1]; a[x-2][y]=b[2]; a[x+2][y+1]=b[3]; break; } //Z字方块case 9: { a[x][y-1]=b[1]; a[x-2][y]=b[2]; a[x-2][y+1]=b[3]; break; }//Z字顺转90度case 10: { a[x][y-1]=b[1]; a[x-2][y-1]=b[2]; a[x+2][y]=b[3]; break; }//Z字顺转180度case 11: { a[x][y+1]=b[1]; a[x+2][y-1]=b[2]; a[x+2][ y]=b[3]; break; } //Z字顺转270度case 12: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x-2][y-1]=b[3]; break; }//7字方块case 13: {a[x-2][y]=b[1]; a[x+2][y-1]=b[2]; a[x+2][y]=b[3]; break; }//7字顺转90度case 14: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x+2][y+1]=b[3]; break; }//7字顺转180度case 15: { a[x-2][y]=b[1]; a[x-2][y+1]=b[2]; a[x+2][y]=b[3]; break; }//7字顺转270度case 16: { a[x][y+1]=b[1]; a[x][y-1]=b[2]; a[x+2][y-1]=b[3]; break; }//倒7字方块 case 17: { a[x-2][y]=b[1]; a[x+2][y+1]=b[2]; a[x+2][y]=b[3]; break; }//倒7字顺转90度 case 18: { a[x][y-1]=b[1]; a[x][y+1]=b[2]; a[x-2][y+1]=b[3]; break; }//倒7字顺转180度case 19: { a[x-2][y]=b[1]; a[x-2][y-1]=b[2]; a[x+2][y]=b[3]; break; }//倒7字顺转270度 }}void keyD( )//按键操作{ if (kbhit( )){ int key;key=getch();if (key==224){ key=getch();if (key==75) { x-=2; }//按下左方向键,中心横坐标减2if (key==77) { x+=2; }//按下右方向键 , 中心横坐标加2if (key==72)//按下向上方向键,方块变体{ if (flag>=2 && flag<=3 ) { flag++; flag%=2; flag+=2; }if ( flag>=4 && flag<=7 ) { flag++; flag%=4; flag+=4; }if (flag>=8 && flag<=11 ) { flag++; flag%=4; flag+=8; }if (flag>=12 && flag<=15 ) { flag++; flag%=4; flag+=12; }if ( flag>=16 && flag<=19 ) { flag++; flag%=4; flag+=16; } }}if (key==32)//按空格键 。
5、暂停{ prfk( ); while(1) { if (getch( )==32) { clfk( );break;} } }//再按空格键,继续游戏if (ifmov( )==0) { x=Tb; flag=Tc; }//如果不可动,撤销上面操作else { prfk( ); Sleep(speed); clfk( ); Tb=x;Tc=flag;}//如果可动 。
6、执行操作}}int ifmov( )//判断能否移动{ if (a[x][y]!=0) { return 0; }//方块中心处有图案返回0 , 不可移动 else{ if ( (flag==1 && ( a[x][ y-1]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||(flag==2 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x+4][y]==0 ) ) ||(flag==3 && ( a[x][y-1]==0 && a[x][y-2]==0 && a[x][y+1]==0 ) ) ||(flag==4 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x][y+1]==0 ) ) ||(flag==5 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y]==0 ) ) ||(flag==6 && ( a[x][ y-1]==0 && a[x-2][y]==0 && a[x+2][y]==0 ) ) ||(flag==7 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y]==0 ) ) ||(flag==8 && ( a[x][y+1]==0 && a[x-2][y]==0 && a[x+2][y+1]==0 ) ) ||(flag==9 && ( a[x][y-1]==0 && a[x-2][y]==0 && a[x-2][y+1]==0 ) ) ||(flag==10 && ( a[x][y-1]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) ||(flag==11 && ( a[x][y+1]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||(flag==12 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y-1]==0 ) ) ||( flag==13 && ( a[x-2][y]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||( flag==14 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y+1]==0 ) ) ||(flag==15 && ( a[x-2][y]==0 && a[x-2][y+1]==0 && a[x+2][y]==0 ) ) ||(flag==16 && ( a[x][y+1]==0 && a[x][y-1]==0 && a[x+2][y-1]==0 ) ) ||( flag==17 && ( a[x-2][y]==0 && a[x+2][y+1]==0 && a[x+2][y]==0 ) ) ||(flag==18 && ( a[x][y-1]==0 &&a[x][y+1]==0 && a[x-2][y+1]==0 ) ) ||(flag==19 && ( a[x-2][y]==0 && a[x-2][y-1]==0&& a[x+2][y]==0 ) ) ) { return 1; }}return 0;//其它情况返回0}void clNEXT( )//清除框外的NEXT方块{ flag = next;x=ZL+WID+6;y=ZL+10;clfk( ); }void clHA( )//清除满行的方块{ int k, Hang=0;//k是某行方块个数, Hang是删除的方块行数for(j=ZL+HEI-1;j>=ZL+1;j--)//当某行有WID/2-2个方块时 , 则为满行{ k=0; for(i=ZL+2;i 7、横坐标由左至右依次判断是否满行{ k++;//下面将操作删除行if (k==WID/2-2){for(k=ZL+2;kZL;k--){ for(i=ZL+2;i 8、得100分 if ( Hang>0 && (score%500==0 || score/500> level-1 ) )//得分满500速度加快升一级{ speed-=20; level++; if(speed<200)speed+=20; } } 。
【俄罗斯方块c语言代码 俄罗斯方块C语言代码】本文到此分享完毕,希望对大家有所帮助 。