c语言俄罗斯方块代码(推荐文档)_第1页
c语言俄罗斯方块代码(推荐文档)_第2页
c语言俄罗斯方块代码(推荐文档)_第3页
c语言俄罗斯方块代码(推荐文档)_第4页
c语言俄罗斯方块代码(推荐文档)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include#include#include#include/* 下面定义了一些控制命令*/* 重画界面命令 */#define CMDDRAW5/* 消去一个满行的命令*/#define CMDDELLINE6/* 自动下移一行的命令*/#define CMDAOTODOWN7/* 生产新的方块 */#define CMDGEN8/* 向左移动的命令,以左箭头控制,它的 ASCII 码值是 77*/#define CMDRINGHTMOVE 77/* 旋转方块的命令,以空格来控制*/#define CMDROTATE57/* 向下移动的命令,以向下的箭头控制,它的ASCII 码值是 80

2、*/#define CMDDOWNMOVE80/* 退出游戏的控制命令,以esc 键控制,它的ASCII 码值是 1*/#define CMDESC1/* 定义了方块下降的时间间隔*/#define TIMEINTERV AL4/* 下面定义了游戏区的大小*/#define MAXWIDTH15#define MAXHEIGHT30/* 组成方块的小格子的宽度*/#define BOXWIDTH15/* 用两个数组来表示新旧两个矩形游戏区*/int oldareaMAXHEIGHT+1MAXWIDTH;int areaMAXHEIGHT+1MAXWIDTH;/* 定义一个需要改变的屏幕区域,初

3、次之外的区域不用进行重绘*/int actW,actH,actX,actY;/* 当前方块的一些属性(坐标,颜色,高,宽)*/int curX,curY,curColor,curW,curH;/* 新的方块的一些属性(坐标,颜色,高,宽)*/int newX,newY,newColor,newW,newH;/* 制定方块的状态*/int active;/* 存储当前方块的数组*/int box44;/* 当前方块的颜色*/int BOXCOLOR;/* 控制命令 */int CMD;/* 定义七种基本的方块形状*/int BOX744=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0

4、,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;/* 得到方块的宽度,即从右向左第一个不空的列*/int GetWidth()int i,j;for(i=3;i0;i-)for(j=0;j0;j-)for(i=0;i4;i+)if(boxji) return

5、 j;return 0;/* 清除原有的方块占有的空间*/void ClearOldspace()int i,j;for(j=0;j=curH; j+)for(i=0;i=curW; i+)if(boxji)areacurY+jcurX+i=0;/* 置位新方块的位置*/void PutNewspace()int i,j;for(j=0;j=newH;j+)for(i=0;i=newW;i+)if(boxji)areanewY+jnewX+i=BOXCOLOR;/* 判断方块的移动是否造成区域冲突*/int MoveCollision(int box4)int i,j;if(newX=MAXW

6、IDTH) return 1;if(newY0) return 1;for(j=0;j=newH;j+)for(i=0;i=MAXWIDTH) newX=MAXWIDTH-1-newW; if(newY+newH=MAXHEIGHT) newY=MAXHEIGHT-1-newH; if(MoveCollision(box) return 1;for(i=0;i=newW;i+)for(j=0;jMAXHEIGHT-3)return 1;elsereturn 0;/* 判断是否超时,即是否超过允许的时间间隔*/int TimeOut()static long tm,old;tm=biostime

7、(0,tm);if(tm-oldTIMEINTERVAL)return 0;elseold=tm;return 1;/* 重绘游戏区 */void DrawSpace()int row,col,x1,y1,x2,y2;for(row=actY;row=actY+actH;row+)for(col=actX;col=MAXHEIGHT-1)rowEnd=MAXHEIGHT-2;for(row=newY; row=rowEnd;)full=1;for(col=0;colMAXWIDTH;col+)if(!arearowcol)full=0; break;if(!full)+row;continue

8、;for(j=row; jMAXHEIGHT-1;j+)for(i=0;iMAXWIDTH;i+)areaji=areaj+1i;actX=0;actY=row;actW=MAXWIDTH-1;actH=MAXHEIGHT-1-row;DrawSpace();rowEnd-;CMD=CMDGEN;/* 向左移动方块 */int MoveLeft()newX=curX-1;ClearOldspace();if(MoveCollision(box)newX=curX;PutNewspace();CMD=0;return 0;PutNewspace();actW=curW+1;actX=curX=n

9、ewX;CMD=CMDDRAW;return 1;/* 向右移动方块 */int MoveRight()newX=curX+1; ClearOldspace();if(MoveCollision(box)newX=curX;PutNewspace();CMD=0;return 0;PutNewspace();actW=curW+1;actX=curX;curX=newX;CMD=CMDDRAW;return 1;/* 向下移动方块 */int MoveDown()int i,j;newY=curY-1;ClearOldspace();if(MoveCollision(box)newY=curY

10、;PutNewspace();active=0;CMD=CMDDELLINE;return 0;PutNewspace();actH=curH+1;actY=newY;curY=newY;CMD=CMDDRAW;return 1;/* 按加速键后方块迅速下落到底*/void MoveBottom()while(active)MoveDown();DrawSpace();CMD=CMDDELLINE;/* 初始化 */void InitialGame()int i,j,x1,y1,x2,y2;int driver=DETECT, mode=0;initgraph(&driver,&mode,e:

11、tc);cleardevice();randomize();setfillstyle(SOLID_FILL,BLUE);bar(0,0,639,479);x1=56;y1=464-BOXWIDTH*MAXHEIGHT;x2=56+MAXWIDTH*BOXWIDTH;y2=464;rectangle(-x1,-y1,+x2,+y2);setfillstyle(SOLID_FILL,BLACK);bar(+x1,+y1,-x2,-y2);y1=464-MAXHEIGHT*BOXWIDTH; y2=464;setcolor(DARKGRAY);for(i=0;iMAXWIDTH;i+)x1=56+i

12、*BOXWIDTH;line(x1,y1,x1,y2);x1=56; x2=x1+MAXWIDTH*BOXWIDTH;for(j=0;jMAXHEIGHT;j+)y1=464-j*BOXWIDTH;line(x1,y1,x2,y1);for(j=0;jMAXHEIGHT;j+)for(i=0;i8;return;/* 生成一个新的方块*/int GenerateNewbox()int i,j,boxidx;boxidx=random(7); BOXCOLOR=random(7)+1;for(j=0;j4;j+)for(i=0;i=MAXWIDTH)curX=MAXWIDTH-1-curW;cu

13、rY=MAXHEIGHT-1-curH;newX=curX; newY=curY; actX=curX;actY=curY;actW=newW=curW; actH=newH=curH;active=1;if(MoveCollision(box) return 0;PutNewspace();DrawSpace(); CMD=0;return 1;/* 翻转方块 */int RotateBox()int newBox44;int i,j;ClearOldspace();for(j=0;j4;j+)for(i=0;i4;i+)newBoxji=0;for(j=0;j4;j+)for(i=0;i4

14、;i+)newBoxcurW-ij=boxji;newW=curH;newH=curW;if(RotateBoxCollision(newBox)newW=curW;newH=curH;newX=curX;newY=curY;PutNewspace();CMD=0;return 0;for(j=0;j4;j+)for(i=0;icurH? newH:curH;actW=curX+actH-newX;actX=newX;actY=newY;curX=newX;curY=newY;curW=newW;curH=newH;CMD=CMDDRAW;return 1;/* 根据获得的命令来执行不同的操作*/void ExecuteCMD()switch(CMD)case CMDLEFTMOVE:MoveLeft();break;case CMDRINGHTMOVE:MoveRight();break;case CMDAOTODOWN:MoveDown();break;case CMDROTATE:RotateBox();break;case CMDDOWNMOVE:MoveBottom();break;case CMDDRAW:DrawSpace();break

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论