首页 c语言俄罗斯方块代码

c语言俄罗斯方块代码

举报
开通vip

c语言俄罗斯方块代码#include#include#include#include/*下面定义了一些控制命令*//*重画界面命令*/#defineCMDDRAW5/*消去一个满行的命令*/#defineCMDDELLINE6/*自动下移一行的命令*/#defineCMDAOTODOWN7/*生产新的方块*/#defineCMDGEN8/*向左移动的命令,以左箭头控制,它的ASCII码值是77*/#defineCMDRINGHTMOVE77/*旋转方块的命令,以空格来控制*/#defineCMDROTATE57/*向下移动的命令,以向...

c语言俄罗斯方块代码
#include#include#include#include/*下面定义了一些控制命令*//*重画界面命令*/#defineCMDDRAW5/*消去一个满行的命令*/#defineCMDDELLINE6/*自动下移一行的命令*/#defineCMDAOTODOWN7/*生产新的方块*/#defineCMDGEN8/*向左移动的命令,以左箭头<-控制,它的ASCII码值是75*/#defineCMDLEFTMOVE75/*向右移动的命令,以右箭头->控制,它的ASCII码值是77*/#defineCMDRINGHTMOVE77/*旋转方块的命令,以空格来控制*/#defineCMDROTATE57/*向下移动的命令,以向下的箭头控制,它的ASCII码值是80*/#defineCMDDOWNMOVE801/21/*退出游戏的控制命令,以esc键控制,它的ASCII码值是1*/#defineCMDESC1/*定义了方块下降的时间间隔*/#defineTIMEINTERVAL4/*下面定义了游戏区的大小*/#defineMAXWIDTH15#defineMAXHEIGHT30/*组成方块的小格子的宽度*/#defineBOXWIDTH15/*用两个数组来 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示新旧两个矩形游戏区*/intoldarea[MAXHEIGHT+1][MAXWIDTH];intarea[MAXHEIGHT+1][MAXWIDTH];/*定义一个需要改变的屏幕区域,初次之外的区域不用进行重绘*/intactW,actH,actX,actY;/*当前方块的一些属性(坐标,颜色,高,宽)*/intcurX,curY,curColor,curW,curH;/*新的方块的一些属性(坐标,颜色,高,宽)*/intnewX,newY,newColor,newW,newH;/*制定方块的状态*/intactive;/*存储当前方块的数组*/2/21intbox[4][4];/*当前方块的颜色*/intBOXCOLOR;/*控制命令*/intCMD;/*定义七种基本的方块形状*/intBOX[7][4][4]={{{1,1,1,1},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{1,1,1,0},{1,0,0,0},{0,0,0,0},{0,0,0,0}},{{1,1,1,0},{0,0,1,0},{0,0,0,0},{0,0,0,0}},{{1,1,1,0},{0,1,0,0},{0,0,0,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}},{{1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0}}};/*得到方块的宽度,即从右向左第一个不空的列*/intGetWidth(){inti,j;for(i=3;i>0;i--)for(j=0;j<4;j++)3/21if(box[j][i])returni;return0;}/*得到方块的高度,从上往下第一个不空的行*/intGetHeight(){inti,j;for(j=3;j>0;j--)for(i=0;i<4;i++)if(box[j][i])returnj;return0;}/*清除原有的方块占有的空间*/voidClearOldspace(){inti,j;for(j=0;j<=curH;j++)for(i=0;i<=curW;i++)if(box[j][i])area[curY+j][curX+i]=0;}4/21/*置位新方块的位置*/voidPutNewspace(){inti,j;for(j=0;j<=newH;j++)for(i=0;i<=newW;i++)if(box[j][i])area[newY+j][newX+i]=BOXCOLOR;}/*判断方块的移动是否造成区域冲突*/intMoveCollision(intbox[][4]){inti,j;if(newX<0)return1;if(newX+newW>=MAXWIDTH)return1;if(newY<0)return1;for(j=0;j<=newH;j++)for(i=0;i<=newW;i++)if(area[newY+j][newX+i]&&box[j][i])return1;return0;}5/21/*判断翻转方块是否造成区域的冲突*/intRotateBoxCollision(intbox[][4]){inti,j;if(newX+newW>=MAXWIDTH)newX=MAXWIDTH-1-newW;if(newY+newH>=MAXHEIGHT)newY=MAXHEIGHT-1-newH;if(MoveCollision(box))return1;for(i=0;i<=newW;i++)for(j=0;j<=newH;j++)if(area[newY+j][newX+i]){newX-=newW-i+1;gotoL;}returnMoveCollision(box);}/*游戏结束*/intGameOver(){if(!active&&(curY+curH>MAXHEIGHT-3))return1;else6/21return0;}/*判断是否超时,即是否超过允许的时间间隔*/intTimeOut(){staticlongtm,old;tm=biostime(0,tm);if(tm-old=MAXHEIGHT-1)8/21rowEnd=MAXHEIGHT-2;for(row=newY;row<=rowEnd;){full=1;for(col=0;col>8;return;}}/*生成一个新的方块*/intGenerateNewbox(){inti,j,boxidx;15/21boxidx=random(7);BOXCOLOR=random(7)+1;for(j=0;j<4;j++)for(i=0;i<4;i++)box[j][i]=BOX[boxidx][j][i];curW=GetWidth();curH=GetHeight();curX=(MAXWIDTH+curW)/2;if(curX+curW>=MAXWIDTH)curX=MAXWIDTH-1-curW;curY=MAXHEIGHT-1-curH;newX=curX;newY=curY;actX=curX;actY=curY;actW=newW=curW;actH=newH=curH;active=1;if(MoveCollision(box))return0;PutNewspace();DrawSpace();CMD=0;return1;}/*翻转方块*/intRotateBox(){intnewBox[4][4];inti,j;16/21ClearOldspace();for(j=0;j<4;j++)for(i=0;i<4;i++)newBox[j][i]=0;for(j=0;j<4;j++)for(i=0;i<4;i++)newBox[curW-i][j]=box[j][i];newW=curH;newH=curW;if(RotateBoxCollision(newBox)){newW=curW;newH=curH;newX=curX;newY=curY;PutNewspace();CMD=0;return0;}for(j=0;j<4;j++)for(i=0;i<4;i++)17/21box[j][i]=newBox[j][i];PutNewspace();actH=newH>curH?newH:curH;actW=curX+actH-newX;actX=newX;actY=newY;curX=newX;curY=newY;curW=newW;curH=newH;CMD=CMDDRAW;return1;}/*根据获得的命令来执行不同的操作*/voidExecuteCMD(){switch(CMD){caseCMDLEFTMOVE:MoveLeft();break;18/21caseCMDRINGHTMOVE:MoveRight();break;caseCMDAOTODOWN:MoveDown();break;caseCMDROTATE:RotateBox();break;caseCMDDOWNMOVE:MoveBottom();break;caseCMDDRAW:DrawSpace();break;caseCMDDELLINE:ClearFullline();break;caseCMDGEN:GenerateNewbox();break;19/21caseCMDESC:closegraph();return0;default:CMD=0;}}/*主函数*/intmain(){inti;InitialGame();do{GetCMD();ExecuteCMD();}while(!GameOver());getch();closegraph();return0;20/21}21/21
本文档为【c语言俄罗斯方块代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥13.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
is_916672
暂无简介~
格式:doc
大小:110KB
软件:Word
页数:0
分类:
上传时间:2021-10-06
浏览量:14