Windows平台下扫雷游戏的开发.doc

上传人:小小飞 文档编号:5016042 上传时间:2020-01-28 格式:DOC 页数:19 大小:484KB
返回 下载 相关 举报
Windows平台下扫雷游戏的开发.doc_第1页
第1页 / 共19页
Windows平台下扫雷游戏的开发.doc_第2页
第2页 / 共19页
Windows平台下扫雷游戏的开发.doc_第3页
第3页 / 共19页
Windows平台下扫雷游戏的开发.doc_第4页
第4页 / 共19页
Windows平台下扫雷游戏的开发.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《Windows平台下扫雷游戏的开发.doc》由会员分享,可在线阅读,更多相关《Windows平台下扫雷游戏的开发.doc(19页珍藏版)》请在三一文库上搜索。

1、各专业全套优秀毕业设计图纸本科学年论文(设计)题 目Windows平台下扫雷游戏的开发 信息工程学院(系)计算机科学与技术专业2012级本科班本科生学年论文(设计)成绩表姓名专业班级论文题目指定任选指导教师评语及评分指导教师评语:指导教师评分_ 指导教师签字:_ 年 月 日主管院长签字_(盖公章) 年 月 日Windows平台下扫雷游戏的开发摘 要:在Windows XP系统中自带了一些娱乐的小游戏,其中扫雷游戏受到了广大用户的欢迎,本文通过Visual C+6.0来开发一款简单的扫雷游戏。采用MFC应用程序设计,先在对话框中绘制一个以网格为单位的位图,然后在网格中随机布雷。通过算法计算无雷网

2、格中应该显示的数字,当玩家标记完所有的雷游戏胜利。关键词:扫雷; Visual C+ 6.0; MFC程序设计;消息映射Windows platform Minesweeping Game developmentAbstract:Windows XP comes with some small entertainment system, Minesweeping Game was welcomed by the masses of users. In the article, through Visual C+ 6.0 to develop a simple Minesweeping Game

3、.Using MFC Application design. Firstly, draw a grid on the dialog box for the unit of the bitmap, then produce mines randomly in the grid. The number should be displayed by calculation of the algorithm in the grid without mines , when all mines were marked by players, the game is victory.Keywords: M

4、inesweeping; Visual C+ 6.0;MFC Programming; The Message Map目录第一章引言11.1研究背景11.2研究方案11.3 本文安排1第二章游戏的总体设计与分析22.1需求分析22.2游戏功能介绍22.3设计构想22.4设计过程3第三章游戏的具体实现过程43.1扫雷游戏的模块实现43.2扫雷核心-布雷算法设计63.2.1随机布雷算法的设计63.2.2确定周围方块的数字63.3扫雷鼠标事件的处理83.4时间显示方法9第四章程序的运行和调试104.1游戏初始化界面104.2游戏布雷界面104.3游戏失败界面11第五章游戏的设计总结12致谢13参考文

5、献13第一章 引言1.1研究背景当前随着计算机的深入普及,越来越多的人有了个人电脑,人们运用计算机完成许多重要的工作,计算机在人们的生活中变的越来越来重要。随着计算机的应用和发展计算机已经不单纯是一个工作工具,人们越来越重视计算机的娱乐性,系统自带的小游戏也占据了相当重要的地位,与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。这些小游戏包括扫雷,弹球,纸牌等等。扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里Windows操作系统历经

6、数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。本设计以微软系统扫雷游戏为基本原理,通过Visual C+6.0开发的一款简单的扫雷游戏。1.2研究方案本设计通过Visual C+6.0来开发一款简单的扫雷游戏,运行代码生成的可执行文件,点击“开始游戏”按钮在蓝色的方块内按下鼠标的左键可以翻开当前的方块,翻开后会显示空白、数字和地雷3种情况,玩家可以用鼠标右键标记地雷,并可以双击鼠标左键翻开的数字周围的方块。在设计扫雷游戏时,现在对话框中绘制软件的背景位图,绘制的位图是以一个网格为单位的,然后在网格中随机布雷,并通过算

7、法计算无雷网格中应该显示的数字。如果当前网格周围的8个网格中没有地雷,则显示为空地,否则,周围的8个网格中有几个地雷则显示数字几。当玩家翻开空地时,会自动翻开空地周围的数字,通过鼠标右键可以标记地雷,并可以取消地雷标记,玩家胜利的条件是将所有的地雷都标记出来。如果标记的位置都是地雷的位置则游戏胜利,标记数和地雷数是相同的,所以当标记用完而游戏还没有结束时,说明标记的地雷有错误,这样扫雷游戏即结束。1.3本文安排简述扫雷游戏的背景,从用户的需求分析游戏设计的功能和方法,从设计可行性方向考虑游戏的设计方案和执行策略。本文采用MFC Windows程序设计开发一款简单的扫雷游戏,首先进行游戏的总体设

8、计与分析,主要分析游戏的功能、构想、设计过程。其次,分析游戏的各个模块的设计思路,详细介绍游戏窗体的设计方法,随机布雷的方法,雷区如何判断的方法。总结游戏的设计过程,从中得到的经验。第二章游戏的总体设计与分析2.1需求分析扫雷游戏是Windows操作系统自带的一款简单的单人游戏,是最早的计算机图形游戏之一。扫雷游戏在Windows用户中十分流行,自从Windows3.1以来一直绑定在里面作为Windows提供的熟悉鼠标操作的辅助工具。游戏通过基本的逻辑判断清楚非雷区,最终把一个雷区中所有的地雷都准确的标注出来,同时也一直是程序设计爱好者热衷的编程实例。随着游戏业的发展,游戏为消费者提供丰富多彩

9、的虚拟空间,使消费者可以享受游戏世界的乐趣。扫雷游戏就是一款比较经典的游戏,游戏玩家可以锻炼自己的思维能力,为生活增添乐趣。程序员可以使用自己学习过的程序设计语言,提高自身的编程能力。另外,实现它的方法很多,也可以用不同的算法实现。2.2游戏功能介绍扫雷游戏的基本功能:点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数。如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止并显示,这其实是一个递归过程。点击鼠标右键于未知区域,用小红旗标志,将其置为有雷而不管是否真的有雷。雷区上部左侧位置为开始游戏按钮。雷区上部中间显示剩余的总雷数。雷区上部右侧显示扫雷

10、的时间。2.3设计构想扫雷是Windows操作系统自带的一款游戏,在大多数电子设备中我们都可以看到,这款游戏操作简单,规则也不难,根据不同等级,玩家可以训练自己的逻辑思考能力。作为编程人员,在学习编程语言之后也可以锻炼自己的编程能力和逻辑思维能力。本设计中采用MFC程序设计,开发一款简单的扫雷游戏。这款游戏的规则是:在不点击任何藏有地雷的方块情况下,以最快的速度找出所有的地雷。如果在点击方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所有不含地雷的方块掀开,游戏才算成功。游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对

11、准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以(未标示 标示 疑似)三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。2.4设计过程1.新建一个基于对话框的应用程序,将窗体改为“扫雷程序马仲岳”,选择Minimize box属性,使对话框具有最小化按钮。2.向新建的工程中导入12个BMP位图资源,并且向对话框中添加两个静态的文本控件分别为(剩余地雷数:)和(游戏时间:)。3.处理鼠标左键的按下事件,在该事件的处理函数中根据网格状态进行显示。如果是空地,则

12、翻转周围网格,如果是地雷结束游戏。4.如何判断按下的方块是非地雷,这是整个游戏的核心,我们可以通过递归的观念来检查周边的方块是否含有地雷及是否继续往外翻开1,功能图如2.1所示:扫雷游戏窗体类模块鼠标右键鼠标左键鼠标开始窗体加载计数函数递归函数重新开始函数计时函数鼠标双击函数画图函数图 2.1游戏总体实现框架第三章游戏的具体实现过程3.1扫雷游戏的模块实现扫雷游戏主要包括两大部分:一个部分是布雷,该部分主要将雷随机布置在游戏区域内,以避免出现重复布雷。另一部分是扫雷,该部分包括判断鼠标左键点击某区域该区域是否是雷,如果是雷该如何操作,如果不是雷该如何操作,鼠标右键点击某区域时如果判断该区域是雷

13、则加以标记,如果不是雷也加以标记,以及当鼠标双击某区域时,判断与该区域相邻的其它8个区域是否是雷并做一个标记。游戏主窗体的创建:启动Visual C+ 6.0后,选择新建工程,Visual C+ 6.0提供了用户可能需要的各种类型的应用程序模板。选择MFC AppWizard(exe)项目,输入工程名称和位置,将创建一个新的工程如图3.1所示2:图3.1 创建一个新的工程选择基于单对话框如图3.2所示:图3.2选择一个基于单对话框的工程创建窗体界面如图3.3所示:点击对话框单击鼠标右键打开属性,将标题改为“扫雷游戏马仲岳”,添加2个Static控件,1个Caption改为“剩余地雷数:”,1个

14、Caption改为“游戏时间:”图3.3窗体界面向新建工程中导入十二张BMP位图如图3.4所示:图3.4引用的位图文件void OnPaint()CDC* pDC = GetDC();/由GetDC获取CDC的指针CBitmap bk;CDC memdc;memdc.CreateCompatibleDC(pDC);bk.LoadBitmap(IDB_UNDOWN);pDC-BitBlt(m_GridNummn.m_Rect.left,m_GridNummn.m_Rect.top,32,32,&memdc,0,0,SRCCOPY);/省略若干代码,实现方法形同初始化网格界面代码:void OnP

15、aint()CDC* pDC = GetDC();/由GetDC获取CDC的指针CBitmap bk;CDC memdc;memdc.CreateCompatibleDC(pDC);bk.LoadBitmap(IDB_UNDOWN);pDC-BitBlt(m_GridNummn.m_Rect.left,m_GridNummn.m_Rect.top,32,32,&memdc,0,0,SRCCOPY);/省略若干代码,实现方法形同3.2扫雷核心-布雷算法设计3.2.1随机布雷算法的设计随机布雷算法是以下两个函数的组合:voidsrand(unsigned int seed);/seed 为随机种子

16、srand (unsigned)time(NULL);/利用系统时间作为随机种子,因为系统内置的时钟是在时刻变化的3。int rand(void);/产生(0,RAND_MAX)之间的随机整数,RAND_MAX为十六进制的0x7fff,可进行一些算术运算,使之产生所需要的任意随机数。srand(time.GetHour()+time.GetMinute()+time.GetSecond();/当前系统时间为随机种子CTime time;time = CTime:GetCurrentTime();/调用系统时间void CSaoLeiDlg:SetRandMine()/即利用系统时间作为随机种子

17、,因为系统内置的时钟是在时刻变化的。使用rand函数产生随机数:intrand(void)/产生所需要的任意随机数。int x=rand()%row;int y=rand()%col;3.2.2确定周围方块的数字把整个游戏区域看成一个m_GridNumij的二维数组如图3.5所示:图3.5随机的二维数组在SaoLeiDlg.h文件中定义GRID m_GridNum2020;/网格void SetRecentGrid(GRID *pGrid);/声明成员方法GRID* GetGridRect(CRectrc);用void CShaoLeiDlg:SetRecentGrid(GRID *pGrid

18、)设置一个节点CRectrect = pGrid-m_Rect;假设m_Rectij为一个二维数组,可以将周围8个节点的坐标表示出来,分别为m_Rect i-1j-1,m_Rect i-1j,m_Rect i-1j+1m_Rect ij-1, ,m_Rect ij+1m_Rect i+1j-1,m_Rect i+1j,m_Rect i+1j+1通过GRID* CShaoLeiDlg:GetGridRect(CRectrc)函数把表示的节点放在m_GridNumij的网格中,代码如下。void CSaoLeiDlg:SetGridState()/把70雷随机布置到游戏区域SetRandMine(

19、);inti,j,n;for( n=0; n70; )int x=rand()%row;int y=rand()%col;if(m_GridNumxy.m_State != ncMINE )m_GridNumxy.m_State = ncMINE;m_MineRectm_MineNum+ = m_GridNumxy.m_Rect;n+;for(i=0; irow-1; i+)for(int j=0; jBitBlt(m_GridNummn.m_Rect.left,m_GridNummn.m_Rect.top,32,32,&memdc,0,0,SRCCOPY);/省略若干代码,实现方式相同,使用

20、if-else分支结构显示随机布置的雷和周边情况。3.3扫雷鼠标事件的处理1.判断雷区和非雷区。扫雷时需要判断每个格子的状态,使用void CSaoLeiDlg:InitializeGrid()函数初始化网格的状态,使之对应不同的BOOL。在二维、三维游戏里,有一种简单的构造地图的方法,即将地图划分为m*n的规格格子,使每一个格子对应二维数组中的一项,当鼠标单击时,通过找出鼠标点击区域,找到相应的格子,判断格子状态来替换相应的位图。具体算法思想如下:1) 在应用程序的客户区划分一块区域,将该区域划分为n*m相同大小的格子;2) 将每一个格子的状态对应到二维数组的相应项上;3) 当鼠标点击某一块

21、区域时,首先判断是否在各种区域,然后再通过鼠标的坐标找到相应的格子;4) 查询格子的状态,从而调用相应的位图进行位图替换;说明:Windows的消息响应机制对于编写一些小游戏是非常方便的,当编写大型2D或3D游戏时,Windows API 就显得有些不足,此时应使用DirectX或OpenGL等大型图形库来进行设计及编码。2.鼠标左键事件的处理。分两种情况:1) 当相应区域不是雷区时,挖开区域,并且若能据此判断周围区域也不是雷区则将周围相应区域也挖开;2) 当区域是雷区时,则界面中所有的雷区同时“炸开”:显示一个提示框(你输了!)同时雷区和非雷区显示出来,若点击“确定”按钮,弹出是否开始游戏有

22、“是”和“否”两个按钮。3.对单击鼠标右键事件处理第一次用右键单击某个区域时,插上一面小红旗,此时单击左键没有任何变化,第二次用右键单击时恢复原状4。4.双击左键事件处理在展开的区域,并且已经确定了周围的雷数,双击可以叠加展开非雷区域,以减少用户的单击操作。void CSaoLeiDlg:OnLButtonDown(UINT nFlags, CPoint point)GRID* grid = GetLikeGrid(point); /获取当前网格if(grid != NULL)grid-m_IsShow = TRUE;/显示当前网格if(grid-m_State = ncMINE) /如果当前

23、网格是雷ShowAllMine();/显示所有地雷Invalidate();/重新绘制窗体KillTimer(1); /关闭定时器MessageBox(你输了!); /提示玩家游戏失败if(MessageBox(是否继续新游戏?,系统提示,MB_YESNO| MB_ICONQUESTION) = IDYES)OnButstart();/重新游戏elseOnCancel();/退出游戏else if(grid-m_State = ncNULL) /如果当前网格是空地DownNullShow(grid); /显示周围网格Invalidate();/重绘窗体CDialog:OnLButtonDown

24、(nFlags, point);/其中在类中定义的一些成员方法见附录void CSaoLeiDlg:OnTimer(UINT nIDEvent) m_GameTime+;CString str;str.Format(游戏时间:%d秒,m_GameTime); m_Time.SetWindowText(str);CDialog:OnTimer(nIDEvent);3.4时间显示方法第四章程序的运行和调试4.1游戏初始化界面游戏初始化界面如图4.1所示:运行Visual C+6.0 程序编译Debug目录下的Saolei.EXE,或者直接编译程序得到如下图所示的初始化界面。图4.1游戏初始化界面4

25、.2游戏布雷界面游戏布雷界面如图4.2所示:运行程序,单击“开始游戏”按钮,在蓝色的方块内按下鼠标左键可以翻开当前的方块,翻开后会显示空白、数字和地雷三种情况。玩家可以用鼠标右键标记地雷,并且可以双击鼠标左键翻开数字周围的方块。通过运行程序把布雷情况显示出来。图4.2游戏布雷界面4.3游戏失败界面游戏失败界面如图4.3所示:当游戏玩家点击到埋有地雷的小方块是游戏失败,此时弹出一个“你输了”的对话框,点击“确定”,提示是否继续游戏。如果是则继续游戏,否则退出游戏。图4.3游戏失败界面第五章 游戏的设计总结随着扫雷游戏的开发完成,游戏中预期的主要功能也基本实现。本设计以Visual C+ 6.0作

26、为前台开发工具,Visual C+ 6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。本设计中使用CWnd的Invalidate方法来实现屏幕刷新,Invalidate方法的频繁使用会造成图像的闪烁。可使用InvalidateR

27、ect方法的使用需要不断计算刷新的区域,所以需要不断地计算显示数字的区域。由于学习Visual C+ 6.0的时间比较短,其中的很多知识还没有了解和掌握,在扫雷游戏中有些功能还不够完善。例如,在扫雷游戏中不能实现玩家成绩的排名,加入音乐,Windows系统自带的“笑脸”部分的编程,游戏等级的设置,还没有做到让计算机自动扫雷的目的。只是实现了简单的扫雷功能,希望自己在以后的学习中不断的充实自己的知识结构,把扫雷游戏的功能进一步完善,使它成为一个更具有实用价值的游戏软件,同时也恳请各位领导和老师给予批评指正。致谢经过本次学年论文的设计,我学到了许多关于Windows程序设计、MFC Windows

28、程序设计、C+程序设计知识,虽然过程中遇到了许多困难,但都在老师的帮助下顺利解决。在此,感谢李振江老师一直以来对我的教导,我要对他的细心帮助和指导表示由衷的感谢。在这段时间里,我在他身上学到了许多的专业知识,还有生活中的平易近人。此外,他严谨的治学态度和认真的工作精神值得我去学习。在我本次的课程设计中,李老师的指导给予了我极大的帮助,使我对整个课程设计的思路有了总体的把握,并耐心的帮我解决了许多实际问题,使我有了很大的收获。并在整个开发过程中提出了许多可行性意见,并给我解决了一些专业性问题。参考文献1 明日科技.Visual C+ 程序开发范例宝典M.第1卷.北京:人民邮电出版社, 2008 :821-825.2 Jeff Prosise.MFC Windows 程序设计M.第2版.北京:清华大学出版社, 2007.5 :721-755.3 Stanley B.LippmanJoseeLajoie Barbara E.Moo.C+ PrimerM.第4版.北京:人民邮电出版社, 2006.3 :367-392.4 赵大伟 肖周芳 张艳.从扫雷游戏浅谈一些算法问题D.江苏 徐州:中国矿业大学计算机科学与技术系, 200814

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

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1