扫雷课程设计报告.docx

上传人:牧羊曲112 文档编号:5302223 上传时间:2023-06-24 格式:DOCX 页数:25 大小:579.53KB
返回 下载 相关 举报
扫雷课程设计报告.docx_第1页
第1页 / 共25页
扫雷课程设计报告.docx_第2页
第2页 / 共25页
扫雷课程设计报告.docx_第3页
第3页 / 共25页
扫雷课程设计报告.docx_第4页
第4页 / 共25页
扫雷课程设计报告.docx_第5页
第5页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《扫雷课程设计报告.docx》由会员分享,可在线阅读,更多相关《扫雷课程设计报告.docx(25页珍藏版)》请在三一办公上搜索。

1、指导教师:时 间:扫雷游戏课程设计报告X信息科学与工程学院计算机科学与技术程序设计实训扫雷游戏唐杰邹竞2012年12月在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活 不可或缺的一部分,越来越多的人使用计算机办公、娱乐、购物等等。游戏行业 发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实 现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神 需求。彳容扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows 操作系统历经数次换代更新,变得越来越

2、庞大、复杂,功能也越来越强大,但是 这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。扫雷 游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和 语言实现,如C,C+,VB,JAVA等。我利用Microsoft Visual C+ 6.0编写了与它 功能相似的扫雷游戏,寓学于乐。今程序的功能是随机生成地雷数,通过鼠标操作玩游戏,不接受键盘,按任意键结束程序。单击屏幕上的笑脸可以重新开始游戏。所有地雷标出后胜利,当鼠标左键单击到地雷时提示游戏失败游戏。论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相* W F 其功能类似于Windows操作系统自

3、带的扫雷的处理,近件是利用鼠;关要求,最后是且需求分析和设计方案。重点介绍了在游戏过程中各事件件和清除未靠近地雷区方块这两方面最为最要,鼠标事支出的信息了解用户的意图,进而做出相对应的动作。清除未靠亍块较为复杂。关键词:扫雷游戏;算法设计;事件;Microsoft Visual C+ 6.06四、设计方案4.1总体设计4.1.1系统4.1.24.2.1部分功能函数定义4.1.功能模块一、课程设计目的1二、课程设计题目任务描述和要求2.1任务描述22.2设计要求三、需求分析3.1功能描述3.2功能需求3.3功能模块3.4系统需求分析总结.7.7.7.8.910104.2.2运行界面分析16五、心

4、得体会19六、参考资料20一、课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是对本课程学 习后进行的一次全面而综合的练习,也为后续各门计算机课程的学习和毕业设计 打下基础。本次课程设计的目的主要有:(1)巩固和加深学生对C和C+语言的基本知识的理解与掌握;(2)掌握C和C+语言编程和调试的基本技能;(3)运用C和C+语言对程序的简单设计;(4)让学生掌握较为简单的算法分析能力;(5)提高与运用C和C+语言解决能实际问题的能力。(6)更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。(7)对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计 能力进行考核

5、。(8)培养综合运用所学知识独立完成课题的能力。(9)掌握程序设计说明文档的能力与技巧;二、课程设计题目任务描述和要求2.1任务描述随着人们工作压力变得越来越大,现如今更多的人开始通过玩游戏来排解内 心的压力,而各种各样的游戏也排入市场,一些大型网络游戏更是一些年轻用户 的最爱,所有扫雷游戏面对市场的竞争压力还是非常大的。分析Windows系统自带的扫雷游戏,查找规则并对主要功能进行模仿程序实 现,对于实现过程中出现的bug进行调试解决。经过对游戏的初步分析,扫雷游戏含有如下规则:根据用户执行的鼠标事件,做出相应的挖雷操作,插旗、疑问标记、自动蔓 延开挖等。挖雷过程由计时器计时,由一个计数器统

6、计插旗后雷的剩余个数。如 果选择了标记功能,那么单击右键会依次对未知点进行插旗,标记,取消插旗与 标记。如果点击到了未插旗子的雷区,如果是雷,则判定游戏失败,之后对雷区 的点击进行屏蔽,不予响应。如果是疑问标记则像正常区域对待。如何判断胜利, 如果所有的雷都被插旗或者点击后剩余的雷区。具体任务如下:(1)需要为Windows操作系统的用户设计完成一款扫雷游戏,这是一个根据某种算法自动布雷,有,扫雷的小软件;(2)本游戏在,分为初、中、高三个难度等级,三个等级的雷数不同;(3(3)本游戏由每个学生单独完成,完成时间大概7周时间,开发成本低,易 于完成;(4)设计过程中,前两周,对整个游戏所实现的

7、功能进行详细的设计以及对 存在的问题及解决办法进行最终确定;3-5周完成游戏的程序编写,并优化;最 后两周,写出设计本游戏的详细文档说明,并作课程设计汇报。整个扫雷游戏课程设计实现流程图如图2-1所示:制定规则p设计算法|三算法实现l=D调试测试旦数据分析三完成设计报告图2-1课程实现流程图匕、图2-1清晰明了的描述了整个课程设计的实现流程。前期工作是制定规则和 设计算法,这一阶段主要任务是搜集相关资料,然后根据搜集到的资料结合自己 所学知识制定系统实现算法;中期工作是算法实现和调试系统,这一阶段主要任 务是完成算法的实现,然后进行调试和优化系统;后期工作是对数据结果进行分 析,然后完成课程设

8、计报告。2.2设计要求(1) 系统需求分析,对系统的各种功能需要进行总结;(2) 采用结构化、模块化程序设计方法设计;(3) 理解扫雷玩法的特点,并分析玩法的实现功能(4) 设计雷区和非雷区的判断算法。(5 )进行概念设计和逻辑结构设计,以便使系统实现进展顺利;(6) 进行详细的设计方案,包括总体设计和详细设计,这包括程序设计代码 的分析和系统运行界面截图的分析;(7) 要求人机交互性较强;界面较美观;(8) 设计方案和执行结果的分析总结。三、需求分析需求分析的主要任务即详细的找出程序所需要的各种功能实现,是对系统功 能进一步分析和抽象,以确定系统应当做什么的问题,从而完成系统的逻辑设计。本程

9、序为扫雷游戏的实现,首先是要实现扫雷游戏的基本功能,根据扫雷游戏的 玩法,设计程序,实现程序功能。本系统需求分析分为四个部分:功能描述、功 能需求、功能模块和系统需求分析报告。A3.1功能描述游戏开始时,系统会在雷区的某些小方块中随个地雷。安放地雷按功能将游戏区域分成两个区域:雷区和提示区。提示区包括计雷器、计时 器和一个笑脸的按键操作。游戏过程中,当用户用鼠标点击相应的方块,程序就 会作出相应的鼠标事件,而鼠标事件的处理都是由扫雷程序实现的。如果某个数字方块周围的地雷全都标记完,可以单击鼠标左键,将其周围剩下的雷没有全部标记,在同时单击鼠标左右键时,其他隐藏或未:下一次。当用户将所有地雷挖出

10、后,其余的非雷方块区域都已 戏胜利。在游戏过程中,一旦错误地打开了雷方块则游戏失败,游 戏结束;当用户标识的地雷数超过程序设定,虽然打开了全部其余方块,游戏仍方块挖开。如果数字周围出标记的方块将被按打开,此时游:图3-1数字和地雷标识2 1图3-2提4器数字图3-3表情变化的方块称为雷方块,其他的称为非雷方块。布完雷后,系统会在其他非雷方块中 填充一些数字。某一个具体数字表示与其紧邻的8个方块中有多少个雷。用户可 以根据这些数字判断是否可以打开某些方块,并把认为有地雷的方块标识地图。图3-1是数字和地雷标识。数字1到8表示在此数字周围的八个方向有多少 个地雷;土是地雷表示,右击小方块即标识地雷

11、;?表示不确定是否为地雷,两 次右击小方块;表示踩到了地雷,游戏结束;率表示标识错地雷,即不是地雷 的小方块插上了地图标识;森表示游戏结束时,显示有地雷的小方块。 是雷区 凸起的小方块,即没有展开的雷区;是雷区的凹下的小方块,其周围没有地雷。图3-2是提示器数字标识,用于提示区计时器和计雷器的数字变化。图3-3是游戏过程中提示区表情按钮的状态。(凸起的笑脸)是游戏初的笑脸;是踩到了地雷,游戏结束时的表情状态;按下和左(凹下的始化状态下的表情,即游戏开始前的状态;.是游戏胜利I替代凸起右键同时按下时的表情,即用户没有完成一次鼠标 笑脸)是游戏中的表情,游戏没有结束。3.2功能需求(1)本游戏结构

12、较为简单,设置三个难度等级为:初级(9*9, 10个雷)、 中级(16*16,40个雷)、高级(16*30,99个雷);(2)提示区左侧显示总雷数,并减去被标明有雷区域的数目;(3)提示区中间位置显示笑脸按钮用于开局和显示鼠标动作的结果;(4)提示区右侧显示扫雷所用的时间;(5)单击鼠标左键于未知区域,如果未知区域有雷,游戏结束,显示所有的地 雷;如果没有雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有 雷直到有雷为止,并显示周围雷的数目;(6)单击鼠标右键于未知区域,则显示小红旗,将其标识有雷。在该位置再 次单击右键则视为不确定,显示问号,单击第三次,取消设置,问号消失;(7)如

13、果该数字方块周围地雷已经完全标识出,双击该数字所在方块,将快 速翻开所有周围不是地雷的方块,并显示,直到有雷为止;(8)将雷全部扫完后,会出现一个提示框,显示游戏胜利,用户还可以将自 己的扫雷成绩保存起来。3.3功能模块(1)游戏界面(2)布雷(3)鼠标事件(4)地雷判断(5)游戏胜利(结束)(6)游戏失败(结束)(7)游戏设置(等级)3.4系统需求分析总结通过对现行扫雷系统的调查与分析,本系统的结构能够达到Windows扫雷游戏的要求。本系统的输入边界作,输入边界时扫雷结束,并且游戏胜利。4;统功能基本户进行鼠标事件操通过对扫雷游戏规则以及相关算法的分析,本系统总的数据量较小,规模不是很大,

14、适合于在普通微机或小型机上运行。四、设计方案设计方案是对一个系统进行详细而具体的设计,本系统的设计方案主要分为 总体设计和详细设计两部分。总体设计是对整个系统结构化的设计,包括系统的 大致框架和各个函数以及类的说明;详细设计是对各个类和函数进行定义和具体 实施。4.1总体设计在不打开任何埋有地雷的小方块情况下,以最快的速度找出所有的地雷。如 果在打开方块的过程中,不小心踩到藏有地雷的方块,则游戏结束,只有将所有 不含地雷的方块打开,则游戏成功。MV:游戏的操作方面主要以鼠标为主,当鼠标左键单击方块时即表示打开方块, 当鼠标右键单击方块时即表示标识或疑似地雷,反复单击右键则方块会以“未标 识一标

15、识一疑似”三者关系不断循环。游戏者可以通过地雷区内的数字提示了解 以数字为中心的其周边八个方格内所含的地雷数,假若打开的方块显示数字“3”, 则表示以其为中心的周边方块内藏有3个地雷。当打开的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被打开 方块的八个方向将空白方块打开。系统的总体设计是对整个系统的结构化设计,包括系统基本功能的设计、系 统流程的设计和各个功能模块的设计等。4.1.1系统基本功能本系统与Windows系统自带的扫雷游戏相比较简单,只具有扫雷游戏的基本 功能,逻辑设计方面也只有简单的级别选择(即游戏选关)、计雷和计时。系统基本功能如图4-1所示图4-1系统基本功能图图4

16、-1是整个扫雷游戏的系统基本功能图,从图中可以看出系统分为四大功 能模块,即游戏开始、游戏选关、游戏计雷、游戏计时。4.1.2系统流程系统流程是对系统进行大概分析后得出的系统各功能的流动情况以及各个 操作之间的关系,上一步操作都与下一步操作有着紧密的联系,即下一步操作都晰的地反映出了系统的运行情况和走向。是由上一步操作所决定的。系统流程主要是对系统流程图的分析,系统流程图清系统详细运行流程如图4-2所示图4-2运行流程图图4-2是游戏详细的运行流程图,图中清晰地描述了系统的执行过程,即根 据不同的事件,游戏状态的转换。过程为:游戏开始,等待事件,发出鼠标事件, 根据用户发出的命令,判断是左键命

17、令还是右键命令,若是右键命令则是标出地 图,若是左键命令则是调用扫雷的相关逻辑算法,进行下一部操作;如果点到雷, 则游戏结束,调用菜单事件,重新开局;如果没有点到雷,则继续判断,直到点 完数字,则游戏胜利,调用菜单事件,重新开局。4.1.3主要功能模块void CMineWnd:LayMines(UINT row, UINT col) 布雷void CMineWnd:ExpandMines(UINT row, UINT col) 雷方块拓展(对于周围无 雷的空白区域)UINT CMineWnd:GetAroundNum(UINT row, UINT col) /获取某个小方块区域 相邻8个区域

18、的雷个数UINT CMineWnd:GetAroundFlags(UINT row, UINT col) /获取某个小方块区域 相邻8个区域的已标志状态数BOOL CMineWnd:IsMine(UINT row, UINT col) 判断是否为雷BOOL CMineWnd:IsInMineArea(UINT row, UINT col) 判断是否在雷区域 void CMineWnd:Dead(UINT row, UINT col) 失败处理BOOL CMineWnd:Victory() 胜利判断并处理void CMineWnd:OnLRBtnDown(UINT row, UINT col)

19、鼠标右键,根据原先不 同的标记作状态循环修改,以便用户可以修改其原先标志void CMineWnd:DrawButton(CPaintDC &dc) 绘制笑脸按钮图void CMineWnd:DrawNumber(CPaintDC &dc) 绘制数字void CMineWnd:DrawMineArea(CPaintDC &dc) 绘制雷区void CMineWnd:DrawDownNum(MINEWND* mine, UINT num) 绘制按下扫 雷后的数字void CMineWnd:DrawSpecialMine(UINT row, UINT col) /重新绘制雷区域的某 个方块void

20、 CMineWnd:OnLButtonDown(UINT nFlags, CPoint point) 单击左键 void CMineWnd:OnLButtonUp(UINT nFlags, CPoint point) 左键弹上 void CMineWnd:OnRButtonDown(UINT nFlags, CPoint point) 单击右键 void CMineWnd:OnRButtonUp(UINT nFlags, CPoint point) 右键弹上 void CMineWnd:OnMouseMove(UINT nFlags, CPoint point) 鼠标移动操作 void CMi

21、neWnd:OnMemuStart() 开局void CMineWnd:OnMemuPrimary() 初级void CMineWnd:OnMemuSecond() 中级void CMineWnd:OnMemuAdvance() 高级void CMineWnd:OnMemuExit() 退出4.2详细设计总体设计是对整个系统的结构化和模块化设计,包括各功能模块的设计和各 个功能函数的说明。详细设计则是对各个类和功能函数进行具体的定义和实施。 下面是对系统中几个较为重要的函数进行描述。4.2.1部分功能函数定义布雷void CMineWnd:LayMines(UINT row, UINT col

22、) 埋下随机种子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_pMinesij.uAttrib != ATTRIB_MINE) m_pMinesij.uAttrib = ATTRIB_MINE;/修改属性为雷index+;(2) 获取某个小方块区域相邻8个区域的地雷个数UINT CMineWnd:GetAroundNum

23、(UINT row, UINT col)UINT i, j;UINT around = 0;UINT minRow = (row = 0) ? 0 : row - 1;UINT maxRow = row + 2;UINT minCol = (col = 0) ? 0 : col - 1;UINT maxCol = col + 2;for (i = minRow; i maxRow; i+) for (j = minCol; j maxCol; j+) if (!IsInMineArea(i, j) continue;if (m_pMinesij.uAttrib = ATTRIB_MINE) a

24、round+;return around;(3) 鼠标右键,根据原先不同的标记作状态循环修改,以便用户可以修改其原先 标志void CMineWnd:OnLRBtnDown(UINT row, UINT col) UINT i, j;UINT minRow = (row = 0) ? 0 : row - 1;UINT maxRow = row + 2;UINT minCol = (col = 0) ? 0 : col - 1;UINT maxCol = col + 2;for (i = minRow; i maxRow; i+) for (j = minCol; j maxCol; j+) i

25、f (!IsInMineArea(i, j) continue;if (m_pMinesij.uState = STATE_NORMAL) m_pMinesij.uState = STATE_EMPTY; elseif (m_pMinesij.uState = STATE_DICEY) m_pMinesij.uState = STATE_DICEY_DOWN;(4)失败处理void CMineWnd:Dead(UINT row, UINT col) 按钮所在的区域CRect rcBtn(m_uBtnRect1, 15, m_uBtnRect2, 39);雷区所在的区域CRect rcMineA

26、rea(MINE_AREA_LEFT, MINE_AREA_TOP,MINE_AREA_LEFT + m_uXNum * MINE_WIDTH, MINE_AREA_TOP + m_uYNum * MINE_HEIGHT);UINT i, j;if (m_pMinesrowcol.uAttrib = ATTRIB_MINE) 失败一一踩到雷for (i = 0; i m_uYNum; i+) for (j = 0; j m_uXNum; j+) m_pMinesrowcol.uState = STATE_BLAST; m_pMinesrowcol.uOldState = STATE_BLAST

27、; if(m_pMinesij.uAttrib=ATTRIB_MINE&m_pMinesij.uState != STATE_FLAG) m_pMinesij.uState = STATE_MINE; m_pMinesij.uOldState = STATE_MINE;else 失败错误雷 for (i = 0; i m_uYNum; i+) for (j = 0; j m_uXNum; j+) m_pMinesrowcol.uState = STATE_ERROR;m_pMinesrowcol.uOldState = STATE_ERROR;if (m_pMinesij.uAttrib =

28、ATTRIB_MINE& m_pMinesij.uState != STATE_FLAG)m_pMinesij.uState = STATE_MINE;m_pMinesij.uOldState = STATE_MINE;失败处理InvalidateRect(rcMineArea);m_uBtnState = BUTTON_DEAD;InvalidateRect(rcBtn);m_uGameState = GS_DEAD;if (m_uTimer != 0) 将定时器去激活KillTimer(ID_TIMER_EVENT);m_uTimer = 0;(5) 胜利判断并处理BOOL CMineWn

29、d:Victory()UINT i, j;CRect rcBtn(m_uBtnRect1, 15, m_uBtnRect2, 39);/检测是否胜利for (i = 0; i m_uYNum; i+) for (j = 0; j m_uXNum; j+)if (m_pMinesij.uState = STATE_NORMAL) return FALSE; if (m_pMinesij.uState = STATE_DICEY) return FALSE;胜利则作胜利处理m_uBtnState = BUTTON_VICTORY;m_uGameState = GS_VICTORY;Invalida

30、te();if (m_uTimer != 0) 将定时器去激活KillTimer(ID_TIMER_EVENT);m_uTimer = 0;return TRUE;(6) 绘制雷区void CMineWnd:DrawMineArea(CPaintDC &dc) CDC dcMemory; /用 作内存设备 dcMemory.CreateCompatibleDC(&dc); /使得这个设备与 dc 兼容 dcMemory.SelectObject(m_bmpMine); /将内存设备与位图资源关联 for (UINT i = 0; im_uYNum; i+) for (UINT j = 0; j

31、uState = 15 - num;mine-uOldState = 15 - num;CRect rcMine(mine-uCol * 16, mine-uRow * 16, (mine-uCol+1) *16, (mine-uRow+1) * 16);InvalidateRect(rcMine);(8) 重新绘制雷区域的某个方块void CMineWnd:DrawSpecialMine(UINT row, UINT col)(CRect rcMine(col * 16, row * 16, (col+1) * 16, (row+1) * 16);InvalidateRect(rcMine)

32、;4.2.2运行界面分析系统界面分析这一部分主要是系统的运行与维护等,在这里展出了系统的部 分运行效果图,并对这些界面进行了分析。(1) 游戏初级是9*9的雷区,共10个地雷,如图4-3所示图4-3游戏初级(2) 游戏中级是16*16的雷区,共40个地雷,如图4-4所示图4-4游戏中级(3)游戏高级是16*30的雷区,共99个地雷,如图4-5所示图4-5游戏高级(4)游戏进行中,此时鼠标可以进行任何操作,如图4-6所示图4-6游戏进行中(5)游戏失败,此时鼠标不能在雷区进行操作,提示区的表情变成“哭脸”用 户可以点击表情按钮或者“游戏”菜单中的“开局”,重新开局,如图4-7所示图4-7游戏失败

33、(6)“游戏”菜单,在此菜单中用户可以选择游戏难度和退出游戏,还可以点击 右上角的“关闭按钮”来退出游戏,如图4-8所示图4-8 “游戏”菜单五、心得体会首先感谢老师给我们一次实训的机会。通过这次课程设计,让我充分体会到了理论与实践相结合的重要性。通过我们所学过的知识,老师给我们详细讲解并带领我们做这个扫雷游戏,在这个过程中我们学到了很多书本上学不到的东西,我在写程序的时候也遇到了很多问题,不过在自己的努力和老师的指导下完成了任务。在这次课程设计中,我不断的上网查资料以及翻阅相关书籍,通过不断的摸索、测试、发现问题、解决问题,在老师的帮助下这些问题都使得程序能够正常运行。在此游戏的设计过程中,

34、遇到了很多问题,有些问题比较,就是不知道错在哪里,有些大问题知道错在哪里但就是不知道怎么办,后来经过自己的不断修改和调试,这些问题都得到了解决。经过这次i细节问题,虽然是很小的问题,但可以提高t己编程的严谨性,同时还可以为以后的编程编写完这个扫雷游戏,我己?它力,而且还可以培养自计,我认识到应该注意的发现自己有很多不足的地方,感触最深的就是我真的要扎扎实实的打基础。并且我感觉到只要肯下功夫学习,我也可以做出很好的东西,深深明白,只有自己的总之,通过这次和生活中的。是自己的东西才是最珍贵的。设计,我学到了很多,也收获了很多,这包括学习上的统中还存在一些问题,但我觉得还是很高兴,因为六、参考资料1 王晓东,计算机算法设计与分析(第3版),北京:电子工业出版社,20072 谭浩强,C程序设计(第3版),北京:清华大学出版社,20053 郑阿奇,Visual C+实用教程(第3版),北京:电子工业出版社,20074 谭浩强,C+程序设计,北京:清华大学出版社,20045 严蔚敏,吴伟民,数据结构(C语言版),北京:清华大学出版社,1997

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号