




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国机器视觉相机行业发展趋势预测及投资战略咨询报告
- 铀浓缩生产供取料操作工上岗证考试题库及答案
- 矿山救护工实操任务书
- 土方机械维修工安全技术操作规程
- 中国全域旅游行业市场前景预测及投资战略研究报告
- 中国CD机电池行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
- 纺织服装设备检试验计划
- 称重计量工安全教育培训手册
- 七年级英语写作训练题型及范文
- 电力施工现场安全员岗位职责
- 算法艺术与信息学竞赛题目完全解析
- 浙江建德正发药业年产2万吨原料药碳酸钙、2万吨食品级重钙、3000吨复配食品添加碳酸钙颗粒项目环评报告
- 数字游戏设计概论课件
- 学校财务人员竞聘笔试题及答案解析
- 水泥厂危险源辨识
- 材料封样验收清单
- 路堑开挖工程检验批质量验收记录
- 物资供应投标书范本
- 污水处理池 (有限空间)作业安全告知牌及警示标志
- 糖尿病周围神经病变PPT
- 数据中心搬迁方案
评论
0/150
提交评论