计算机图形学课程的设计——扫雷游戏程序的设计.docVIP

计算机图形学课程的设计——扫雷游戏程序的设计.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学课程的设计——扫雷游戏程序的设计

《计算机图形学》课程设计报告 VC++扫雷游戏的程序设计 专业班级: 小组成员: 指导老师: 日 期:2012年12月24日 1、需求分析 本课程设计实现类似于Windows XP操作系统自带的扫雷游戏。该设计以Visual C++ 6.0为开发环境 图1 游戏开始时,系统会在雷区中随机布下若干个地雷。安放地雷的小方块称之为雷方块,其他的称之为非雷方块。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中有多少雷方块。玩家可以根据这些信息去判断是否可以鼠标点击方块,并把认为是地雷的方块打上标识。当玩家将所有地雷找出后,其余的非雷方块区域都已打开,此时游戏结束。在游戏过程中,一旦错误地打开了雷方块则立即失败,游戏结束。 游戏规则总结: ● 开始:按左键开始游戏,按按钮或菜单重新开始。 ● 左键:按下时,是雷则结束,非雷则显示数字。 ● 数字:代表此数字周围一圈八格中雷的个数。 ● 右键:奇次按下表示雷,偶数按下表示对上次的否定。 ● 结束:左键按到雷结束,找出全部雷结束。 在游戏开始后,雷区上方有两个计数器。右边的计数器显示用户扫雷所花费的总时间,以秒为单位;左边的计数器显示当前还剩余多少个雷方块。 2.2 设计流程图 图1 3.详细设计 3.1界面设置 在vc++运行环境下编写程序并调试,最终实现的游戏界面为图2所示,点击鼠标可开始游戏。 图2 3.2功能设计 3.2.1 布雷 随即获取一个状态为非雷的点,将它的属性标志为雷,重复这样的工作,直到布下足够的雷为止,其流程图如图3所示。 图3 在CMineWnd类中添加游戏的布雷模块的处理函数,其具体实现代码如下所示。 void CMineWnd::LayMines(UINT row, UINT col) { //埋下随机种子 srand( (unsigned)time( NULL ) ); UINT i, j; for(UINT index = 0; index m_uMineNum;) { //取随即数 i = rand() % m_uYNum; j = rand() % m_uXNum; if (i == row j == col) continue; if(m_pMines[i][j].uAttrib != ATTRIB_MINE) { m_pMines[i][j].uAttrib = ATTRIB_MINE;//修改属性为雷 index++; } } } 3.2.2扫雷 3.2.2.1鼠标左击事件 其流程如图4所示。 图4 当鼠标左键点击雷区域,并且该区域不是雷方块,需要进行打开以及拓展工作。流程如图5所示。 图5 鼠标左键点击事件的关键代码详见附录2所示。 在函数体的开始部分,先用rcBtn和rcMineArea两个矩形变量存储游戏的用户提示区域位置中的笑脸图区域以及雷区域的位置。利用接口函数PtInRect()判断当前鼠标的位置(由参数point携带鼠标当前位置信息)是否在这两个区域内,如果检测到鼠标左键点击并释放在笑脸图的按钮区域rcBtn上,则调用初始化函数重新开始游戏,如果检测到鼠标左键点击并释放在雷区域rcMineArea,假若当前游戏状态处于已初始化完成但尚未开始的状态GS_WAIT时,则打开计时器,并且调用LayMines()函数进行布雷,然后修改游戏状态为GS_RUN进入游戏。接着判断点击在小方块的状态是否被用于通过右键标记(可以标记为雷或者未知,此时游戏规则规定左键点击不生效),如果未标记,该状态为普通状态STATE_NORMAL时,先通过IsMine()检测是否点中地雷而失败地结束游戏,如果是,则调用函数Dead()来进行失败后的工作处理,反之对它进行打开显示与拓展操作。先通过GetAroundNum()函数获取当前小方块相邻的8个位置的雷数。如果当前小方块相邻区域的雷数为0,则可以向8个方向进行拓展,并显示该方块区域,直到不可拓展为止;如果当前小方块相邻区域的雷数不为0,则显示该方块区域的相邻雷数,用作提供用户对其他位置的信息判断的提示。拓展操作的实现代码见附录2。 经过打开或拓展后,最后通过Victory()判断游戏是否已经胜利结束,如果是则作胜利处理。 3.2.1.2鼠标右击事件 其流程如图6所示。 图6 其实现代码详见附录3所示。 3.2.3 绘图界面的设计 3.2.3.1雷区、笑脸模块的绘制 添加三个位图资源如图7所示。 图7 ID分别为ID_BTN_COLOR、ID_MINE_COLOR、ID_NUM_COLOR,并分别添加三个位图类型的变量,然后调

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档