1、计算机图形学课程设计报告计算机图形学课程设计报告 VC+VC+扫雷游戏扫雷游戏的的程序程序设计设计 专业班级: 小组成员: 指导老师: 日 期:2012 年 12 月 24 日 1 1、需求分析 本课程设计实现类似于 Windows XP 操作系统自带的扫雷游戏。该设计 以 Visual C+ 6.0 为开发环境, Windows 7/XP 为程序运行平台。在程序 设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二 维数组的行和列、当前状态、方块属性、历史状态的结构体,采用了 MFC 机制解决问题的方法。整个游戏程序包括了布雷、扫雷过程和结果三个阶 段,在处理鼠标响应事件中伴随着
2、 GDI 绘图。程序通过调试运行,实现简 单的设计目标,满足扫雷游戏初学者的需要。 通过本课程设计,以便更好的巩固计算机图形学相关知识,掌握课程 设计基本的方法和技巧,同时增加同学之间的团队合作精神以及培养分析 问题、解决问题的能力。 2.总体设计 2.1 功能概述 扫雷游戏的游戏界面如图 1 所示。在这个界面中,由众多面积均等的 小方块所组成的区域称之为雷区, 雷区的大小由用户设置的游戏等级决定。 未知雷区 玩家标定未知雷 周围雷数提示 玩家标定地雷 2 图 1 游戏开始时,系统会在雷区中随机布下若干个地雷。安放地雷的小方 块称之为雷方块,其他的称之为非雷方块。部署完毕后,系统会在其他非 雷
3、方块中填充一些数字。某一个具体数字表示与其紧邻的 8 个方块中有多 少雷方块。玩家可以根据这些信息去判断是否可以鼠标点击方块,并把认 为是地雷的方块打上标识。当玩家将所有地雷找出后,其余的非雷方块区 域都已打开,此时游戏结束。在游戏过程中,一旦错误地打开了雷方块则 立即失败,游戏结束。 游戏规则总结: 开始:按左键开始游戏,按按钮或菜单重新开始。 左键:按下时,是雷则结束,非雷则显示数字。 数字:代表此数字周围一圈八格中雷的个数。 右键:奇次按下表示雷,偶数按下表示对上次的否定。 结束:左键按到雷结束,找出全部雷结束。 在游戏开始后,雷区上方有两个计数器。右边的计数器显示用户扫雷 所花费的总时
4、间,以秒为单位;左边的计数器显示当前还剩余多少个雷方 块。 2.2 设计流程图 3 图 1 3.详细设计 3.1 界面设置 在vc+运行环境下编写程序并调试, 最终实现的游戏界面为图2所示, 点击鼠标可开始游戏。 图 2 3.2 功能设计 3.2.1 布雷 随即获取一个状态为非雷的点,将它的属性标志为雷,重复这样的工 开始 初始化游戏 绘制雷区 绘制笑脸 绘制计数器 鼠标右键触发动作 鼠标左键触发动作 4 作,直到布下足够的雷为止,其流程图如图 3 所示。 图 3 在 CMineWnd 类中添加游戏的布雷模块的处理函数,其具体实现代码 如下所示。 void CMineWnd:LayMines(
5、UINT row, UINT col) /埋下随机种子 srand( (unsigned)time( NULL ) ); UINT i, j; for(UINT index = 0; index uRow, m_pOldMine-uCol); if (m_uGameState = GS_WAIT) m_uBtnState = BUTTON_NORMAL; Invalidate(); ReleaseCapture(); return; /假若周围已经标识的雷周围真正的雷数,拓展 13 if (m_pOldMine-uState != STATE_FLAG) OpenAround(m_pOldMi
6、ne-uRow, m_pOldMine-uCol); if (ErrorAroundFlag(m_pOldMine-uRow, m_pOldMine-uCol) Dead(m_pOldMine-uRow, m_pOldMine-uCol); ReleaseCapture(); return; else /如果游戏尚未开始,点击左键启动游戏 if (m_uGameState = GS_WAIT) if (m_uTimer) KillTimer(ID_TIMER_EVENT); m_uTimer = 0; m_uSpendTime = 1; Invalidate(); if (m_bSoundful) sndPlaySound(LPCTSTR)LockResource(m_pSndClock), SND_MEMORY | SND_ASYNC | SND_NODEFAULT); /启动定时器 m_uTimer = SetTimer(ID_TIMER_EVENT,