c 语言实现俄罗斯方块,要求有详细注释...

我来对这段程序做一下注释:#include /*标准库*/#include /*绘图库*/#include /*BIOS库,输入输出,BIOS时间等*/#define mDRAW 5 /*各种消息的宏定义*/#define mLINE 6#define mADOWN 7#define mGEN 8#define mLEFT 75#define mRIGHT 77#define mSPACE 57#define mDOWN 80#define mESC 1#define TIMEINT 2 //下...全部

我来对这段程序做一下注释:#include /*标准库*/#include /*绘图库*/#include /*BIOS库,输入输出,BIOS时间等*/ #define mDRAW 5 /*各种消息的宏定义*/#define mLINE 6 #define mADOWN 7 #define mGEN 8 #define mLEFT 75 #define mRIGHT 77 #define mSPACE 57 #define mDOWN 80 #define mESC 1 #define TIMEINT 2 //下落间隔时间,即下落速度#define MAXX 9 /*行列数,9×30的区域*/#define MAXY 30 #define BACKCOLOR BLACK /*背景色*/#define WINX 50 //游戏box所在的位置,单位为像素,下同#define WINY 470 #define GAP 6 //间隙宽度#define AREAX (WINX+GAP) #define AREAY (WINY-GAP) #define BOXW 15 //每一小格的宽度int oldarea[MAXY+1][MAXX]; //为和当前游戏区域进行比较而保存的上一游戏区域信息int area[MAXY+1][MAXX]; //游戏区域的方块信息,有方块计1,否则计0。

int actW,actH,actX,actY; //方块可活动的X、Y、宽、高信息int curX,curY,curColor,curW,curH; //方块当前的X、Y、宽、高、颜色信息int newX,newY,newColor,newW,newH; //方块新的(或称为接受控制消息后计算出的下一状态的)X、Y、宽、高、颜色信息int active; //游戏是否处于active状态int box[4][4]; /*方块的二维数组,定义当前方块*/int FORCOLOR; /*前景色*/int MESSAGE; //方块位置控制消息 int BOX[7][4][4]={ /*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}, /*T型*/{0,1,0,0}, {0,0,0,0}, {0,0,0,0} },{ {1,1,0,0}, /*左Z*/{0,1,1,0}, {0,0,0,0}, {0,0,0,0} },{ {0,1,1,0}, /*右Z*/{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} } }; //子函数下面详细说明void init(); //初始化void draw(); //绘图int genBox(); int getKey(); void lineFull(); int moveLeft(); int moveRight(); int moveDown(); int rotate();int getW(); int getH(); void clearOldBox(); void putNewBox(); int collisionRotate(int box[][4]); void getMessage(); void dispatchMessage(); int timeCome(); void fallDown(); int gameOver(); /*------------主函数----------------*/main() { int i; init(); do //循环{ getMessage(); //获得方块位置控制消息dispatchMessage(); //根据不同的消息做出不同的动作} while(!gameOver()); //直到游戏结束getch(); //使用getch()让程序停在这里,按下任意键后closegraph(); //就可关闭图形,结束游戏 } /*------------子函数--------------*/void getMessage() { if(MESSAGE) return; //除接受键盘消息外,方块的动作函数也会产生一些消息如果有一个消息尚未处理,则直接返回处理它if(timeCome()) //计时时间到{ MESSAGE=mADOWN; //控制消息=mADOWN,自动落下一格return; } if(bioskey(1)) //查询是否有键盘消息{ MESSAGE=bioskey(0)>>8;/*bioskey(0)返回键盘按键低8位数的ASCII码,因此右移8位,生成消息*/ return; } } void dispatchMessage() //根据不同的消息做出不同的动作{ switch(MESSAGE) { case mLEFT: moveLeft();break; //以下分别代表左、右、case mRIGHT: moveRight();break;//下、旋转、落下、绘图、行满、生成方块等动作case mADOWN: moveDown();break; case mSPACE: rotate();break; case mDOWN: fallDown(); break; case mDRAW: draw();break; case mLINE: lineFull();break; case mGEN: genBox();break; case mESC: closegraph(); exit(0);//退出default: MESSAGE=0; } } void fallDown() { while(active)//如果游戏active{ moveDown(); draw(); //向下落,绘图} MESSAGE=mLINE; } int timeCome() //计时函数{ static long tm, old; //两个时间,一个从BIOS中取得的新时间,一个上一次获得的时间tm=biostime(0,tm); if(tm-old=MAXX)curX=MAXX-1-curW;//如果当前方块的宽度+方块的位置大于最大值,调整位置。

我认为这种情况是不会发生的,唯一的可能是直棍。

curY=MAXY-1-curH; //当前块Y位置,开始总是从最上端落下newX=curX; newY=curY; actX=curX;actY=curY; actW=newW=curW; actH=newH=curH; active=1;//游戏acticeif(collision(box)) return 0;//如果方块一下来发生碰撞,返回0,游戏结束putNewBox();//重构游戏区域draw(); MESSAGE=0; //绘图,清空消息return 1;//产生成功,返回1} void lineFull()//每次有方块落下后,都对方块那几行进行判断{ int row,col, rowEnd,full,i,j; rowEnd=newY+newH; //计算方块落在哪几行if(rowEnd>=MAXY-1) rowEnd=MAXY-2; for(row=newY; rowcurH? newH:curH; actW=curX+actH-newX; actX=newX; actY=newY; curX=newX; curY=newY; curW=newW; curH=newH; MESSAGE=mDRAW; return 1; } int getW() //获得一个方块的宽度{ int i,j; for(i=3;i>0;i--) for(j=0;j0;j--) for(i=0;i=MAXX) return 1; if(newY=MAXX) newX=MAXX-1-newW; if(newY+newH>=MAXY) newY=MAXY-1-newH; if(collision(cbox)) return 1; for(i=0;iMAXY-3)) return 1; //如果大于当前Y坐标+当前高度>最大Y坐标-3,游戏结束else return 0; } 。收起

c语言最简单的程序流程图,高手帮忙画个流程图简单的俄罗斯方块C语言程 – 手机爱问...相关推荐

  1. matlab 五连珠,五星连珠程序,求高手帮忙画个流程图,急!!!!!!!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function [ ] = five() global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ss ...

  2. c语言百分号le,在C语言中,有le-6这么个表示方法,怎么 – 手机爱问

    2005-03-28 怎么理解? 还有他表示什么意思呀 ASCII ASCII码ASCII是AmericanStandardCodeforInformationInterchange的缩写,用来制订计 ...

  3. vc6.0是c语言吗,vc6.0我二级报的是C语言,听说现在C语 – 手机爱问

    2008-05-10 二级 C语言 二级 Visual basic 二级 JAVA 二级 C++ 就是几种语言类型,没别的区别的.就象一个英语,一个日语的. 你可以自己根据情况选学一种 都很简单的. ...

  4. c语言录入信息后无法显示桌面,输入法在桌面不显示,怎么修改能显示在桌面任 – 手机爱问...

    2011-07-16 语言栏消失了,怎么办?我电脑的语言栏为 照楼主所说,应该是语言输入法程序损坏了,详细你参考下边答案吧!恢复"语言栏"经典办法!:1.如果windows的任务栏 ...

  5. 秒表c语言程序代码,求大神帮忙写一篇简单的C语言秒表程序, 谢谢。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include Unsigned char code Tab[10]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0 ...

  6. C语言6F多少,求助!!请人帮忙画C语言程序流程图.紧急!!!

    #include <stdio.h> #define N 10 struct student //第一步, 根据具体情况定义结构体类型. { double num; /*学号*/ floa ...

  7. 在c语言中下面的运算符中优先级最高的是,C语言习题请高手解答急急急1.下列运算符中优先级最高的运算符 爱问知识人...

    1.下列运算符中优先级最高的运算符是 A:! B: % C:-= D: && 2.下列运算符中优先级最低的运算符是 A:| B:!= C:=Y)&&(Y>=Z) ...

  8. 辅修计算机编程,求帮忙~计算机C语言的编程题!大学选的辅修课没去过,要考试了不会? 爱问知识人...

    楼主 我来拯救你~~~~ 10道题全部奉上~~!!! 有些题别人已经给出了,我引用一下啊(懒得重写了),大家不要喷我哦~~~~~ 第一题 #include int main() { int d1,d2 ...

  9. 奖客富翁系统代码C语言,木马代码-c语言木马代码,最简单的,我保证不做违法的 – 手机爱问...

    2009-09-02 鸡蛋怎样做才能保证最有营养 聪明吃鸡蛋 最营养的烹饪方法: 鸡蛋吃法多种多样,就营养的吸收和消化率来讲,煮蛋为100%,炒蛋为97%,嫩炸为98%,老炸为81.1%,开水.牛奶冲 ...

  10. c语言 d1 1,C语言c-1>=d)==1 n – 手机爱问

    2010-01-08 main() {int a,b,sum; scanf("%d %d",&a,&b); sum=a+b; printf("sum is ...

最新文章

  1. ACL 2022丨香港大学华为诺亚方舟新工作:生成式预训练语言模型的量化压缩
  2. AI专家Marcus质疑深度学习:面临十大挑战(含参考文献)
  3. 扩展Visual Studio 2010服务器资源管理器中的SharePoint结点
  4. Matlab实用程序--图形应用-双y轴图形的绘制
  5. 魏鹏机器人_痴迷农业科技,他发明智能分拣机器人给胡萝卜照CT
  6. 抛开约束,增强模型:一行代码提升 ALBERT 表现
  7. poj 1654 Area 多边形面积
  8. 19年三本毕业,做了三年的嵌入式软件。
  9. 微信小程序禁止页面上下滑动;uni-app微信小程序禁止页面上下滑动;uni-app小程序上下滑动;
  10. 【算法设计与分析】13 分治策略的设计思想
  11. Android 开发之旅:深入分析布局文件又是“Hello World!”
  12. string的各种函数(系统学习)
  13. 大学学计算机用游戏本好吗,大学学建筑学用什么配置的笔记本电脑好?
  14. C语言库函数malloc和free介绍
  15. java整理快捷鍵_常用Eclipse快捷键整理,提高效率
  16. 计算机网络知识全面讲解:理解网络协议
  17. 「75页PDF免费下载」面向所有人的机器学习科普大全
  18. python3 实现自动生成入账记录表
  19. java 初始化数组_Java中数组的初始化
  20. 通过替换音效文件,实现在安卓手机上使用wp/nokia/wm10按键键盘声音

热门文章

  1. 智能快递柜的密码模块
  2. L1-009 N个数求和(包含样例分析)
  3. Spring Boot报错Description: A component required a bean of type 'com.rsjs.mapper.UserMapper' that cou
  4. 问题及解决方法记录:A component required a bean of type ‘org.springframework.web.client.RestTemplate‘ that cou
  5. asp二进制mysql_asP 读取二进制数据库
  6. Tensorflow-gpu2.0.0安装【显卡型号:GTX1050 TI】
  7. 微信公众号unionid问题
  8. js_中国大陆加港澳台手机正则验证
  9. Windows及应用学习笔记
  10. 订单信息表和订单明细表