第8章 游戏实例.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 游戏实例

修改视图类OnKeyDown函数 void CNewTerisView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { bin-getImage(outputImage); if (nChar == VK_RIGHT!gameOver) activeBrick-move(1,0,outputImage); //向右 else if (nChar == VK_LEFT!gameOver) activeBrick-move(-1,0,outputImage); else if (nChar == VK_UP!gameOver) activeBrick-rotate(outputImage); else if (nChar == VK_DOWN!gameOver) while(activeBrick-move(0,1,outputImage)); //一键下落 activeBrick-operator(outputImage); //输出图形 // update the display if(!gameOver) Invalidate(FALSE); CView::OnKeyDown(nChar, nRepCnt, nFlags); } 思考 比较这两种实现方法的优缺点 你还能找出更好地实现方法么? VC++程序设计 主讲教师:贾澎涛 pengtao.jia@ 第八章 俄罗斯游戏开发 综合前面所学的知识,熟悉面向对象程序设计的全过程,即面向对象的分析、面向对象的设计、面向对象的实现三个过程,创建一个实用的游戏程序。 游戏说明及规则 俄罗斯方块是由俄罗斯人阿列克谢·帕基特诺夫发明的。俄罗斯方块原名是俄语Тетрис(英语是Tetris),这个名字来源于希腊语tetra,意思是“四”,而游戏的作者最喜欢网球(tennis)。于是,他把两个词tetra和tennis合而为一,命名为Tetris,这也就是俄罗斯方块名字的由来。 Tetris游戏在一个m*n的矩形框内进行。游戏开始时,矩形框的顶部会随机出现一个由四个小方块构成的砖块,每过一个很短的时间(我们称这个时间为一个tick),它就会下落一格,直到它碰到矩形框的底部,然后再过一个tick它就会固定在矩形框的底部,成为固定块。接着再过一个tick顶部又会出现下一个随机形状,同样每隔一个tick都会下落,直到接触到底部或者接触到下面的固定块时,再过一个tick它也会成为固定块,再过一个tick之后会进行检查,发现有充满方块的行则会消除它,同时顶部出现下一个随机形状。直到顶部出现的随机形状在刚出现时就与固定块重叠,表示游戏结束。 操作说明: 光标左键—左移 光标右键—右移 光标上键—翻转 光标下键—下移 Tetris游戏的分析、设计与实现 1. Tetris游戏的矩形框类——CBin 首先我们应该描述Tetris游戏的矩形框。这里我们定义一个CBin类描述Tetris游戏的矩形框。对矩形框进行分析,它应该有三个私有的数据成员为:image, width和height。CBin类将Tetris游戏的矩形框描述成为一个二维数组image, 变量width和height存储了image的维数。如图1所示。有砖块的地方的值为砖块的颜色值(例如1为红色,4为蓝色),没有砖块的地方应为0值。 函数名称 函数说明 CBin(unsigned int w, unsigned int h) 构造函数,用来初始化数据成员width 和 height,并为image分配空间并初始化。 ~CBin() 析构函数,删除在构造函数中为image分配的空间。 void getImage(unsigned char** destImage) 将image的数据拷贝到 destImage. 你可以假设destImage指向的空间足够容纳image的数据. void setImage(unsigned char** srcImage) 把srcImage 中的数据拷贝到image. 你可以假设srcImage是一个合法的指针. unsigned int removeFullLines() 检查image,如果任何一行完全填满,则删除这一行,并让上面行的数据下移一行,返回删除的总行数。 现在来完成一些Tetris砖块类。Tetris的常用砖块见下图。经分析所有的砖块都有共同的特征,因此我们定义了一个基类CBrick,这是一个抽象类。 图11.2 Tetris的常用砖块 CIBrick 类有四个数据成员: orientation, posX, posY, and colour

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档