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

上传人:b****0 文档编号:9187016 上传时间:2023-05-17 格式:DOCX 页数:17 大小:411.30KB
下载 相关 举报
Windows平台下扫雷游戏的开发.docx_第1页
第1页 / 共17页
Windows平台下扫雷游戏的开发.docx_第2页
第2页 / 共17页
Windows平台下扫雷游戏的开发.docx_第3页
第3页 / 共17页
Windows平台下扫雷游戏的开发.docx_第4页
第4页 / 共17页
Windows平台下扫雷游戏的开发.docx_第5页
第5页 / 共17页
Windows平台下扫雷游戏的开发.docx_第6页
第6页 / 共17页
Windows平台下扫雷游戏的开发.docx_第7页
第7页 / 共17页
Windows平台下扫雷游戏的开发.docx_第8页
第8页 / 共17页
Windows平台下扫雷游戏的开发.docx_第9页
第9页 / 共17页
Windows平台下扫雷游戏的开发.docx_第10页
第10页 / 共17页
Windows平台下扫雷游戏的开发.docx_第11页
第11页 / 共17页
Windows平台下扫雷游戏的开发.docx_第12页
第12页 / 共17页
Windows平台下扫雷游戏的开发.docx_第13页
第13页 / 共17页
Windows平台下扫雷游戏的开发.docx_第14页
第14页 / 共17页
Windows平台下扫雷游戏的开发.docx_第15页
第15页 / 共17页
Windows平台下扫雷游戏的开发.docx_第16页
第16页 / 共17页
Windows平台下扫雷游戏的开发.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

Windows平台下扫雷游戏的开发

 

本科学年论文(设计)

题目Windows平台下扫雷游戏的开发

信息工程学院(系)计算机科学与技术专业2012级本科班

 

本科生学年论文(设计)成绩表

姓名

专业

班级

论文

题目

指定

任选

 

指导教师评语:

 

指导教师评分___________指导教师签字:

_________

年月日

 

主管院长签字________(盖公章)

年月日

 

Windows平台下扫雷游戏的开发

摘要:

在WindowsXP系统中自带了一些娱乐的小游戏,其中扫雷游戏受到了广大用户的欢迎,本文通过VisualC++6.0来开发一款简单的扫雷游戏。

采用MFC应用程序设计,先在对话框中绘制一个以网格为单位的位图,然后在网格中随机布雷。

通过算法计算无雷网格中应该显示的数字,当玩家标记完所有的雷游戏胜利。

关键词:

扫雷;VisualC++6.0;MFC程序设计;消息映射

WindowsplatformMinesweepingGamedevelopment

Abstract:

WindowsXPcomeswithsomesmallentertainmentsystem,MinesweepingGamewaswelcomedbythemassesofusers.Inthearticle,throughVisualC++6.0todevelopasimpleMinesweepingGame.UsingMFCApplicationdesign.Firstly,drawagridonthedialogboxfortheunitofthebitmap,thenproduceminesrandomlyinthegrid.Thenumbershouldbedisplayedbycalculationofthealgorithminthegridwithoutmines,whenallminesweremarkedbyplayers,thegameisvictory.

Keywords:

Minesweeping;VisualC++6.0;MFCProgramming;TheMessageMap

 

目录

第一章引言1

1.1研究背景1

1.2研究方案1

1.3本文安排1

第二章游戏的总体设计与分析2

2.1需求分析2

2.2游戏功能介绍2

2.3设计构想2

2.4设计过程3

第三章游戏的具体实现过程4

3.1扫雷游戏的模块实现4

3.2扫雷核心----布雷算法设计6

3.2.1随机布雷算法的设计6

3.2.2确定周围方块的数字6

3.3扫雷鼠标事件的处理8

3.4时间显示方法9

第四章程序的运行和调试10

4.1游戏初始化界面10

4.2游戏布雷界面10

4.3游戏失败界面11

第五章游戏的设计总结12

致谢13

参考文献13

第一章引言

1.1研究背景

当前随着计算机的深入普及,越来越多的人有了个人电脑,人们运用计算机完成许多重要的工作,计算机在人们的生活中变的越来越来重要。

随着计算机的应用和发展计算机已经不单纯是一个工作工具,人们越来越重视计算机的娱乐性,系统自带的小游戏也占据了相当重要的地位,与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。

这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。

这些小游戏包括扫雷,弹球,纸牌等等。

扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。

本设计以微软系统扫雷游戏为基本原理,通过VisualC++6.0开发的一款简单的扫雷游戏。

1.2研究方案

本设计通过VisualC++6.0来开发一款简单的扫雷游戏,运行代码生成的可执行文件,点击“开始游戏”按钮在蓝色的方块内按下鼠标的左键可以翻开当前的方块,翻开后会显示空白、数字和地雷3种情况,玩家可以用鼠标右键标记地雷,并可以双击鼠标左键翻开的数字周围的方块。

在设计扫雷游戏时,现在对话框中绘制软件的背景位图,绘制的位图是以一个网格为单位的,然后在网格中随机布雷,并通过算法计算无雷网格中应该显示的数字。

如果当前网格周围的8个网格中没有地雷,则显示为空地,否则,周围的8个网格中有几个地雷则显示数字几。

当玩家翻开空地时,会自动翻开空地周围的数字,通过鼠标右键可以标记地雷,并可以取消地雷标记,玩家胜利的条件是将所有的地雷都标记出来。

如果标记的位置都是地雷的位置则游戏胜利,标记数和地雷数是相同的,所以当标记用完而游戏还没有结束时,说明标记的地雷有错误,这样扫雷游戏即结束。

1.3本文安排

简述扫雷游戏的背景,从用户的需求分析游戏设计的功能和方法,从设计可行性方向考虑游戏的设计方案和执行策略。

本文采用MFCWindows程序设计开发一款简单的扫雷游戏,首先进行游戏的总体设计与分析,主要分析游戏的功能、构想、设计过程。

其次,分析游戏的各个模块的设计思路,详细介绍游戏窗体的设计方法,随机布雷的方法,雷区如何判断的方法。

总结游戏的设计过程,从中得到的经验。

第二章游戏的总体设计与分析

2.1需求分析

扫雷游戏是Windows操作系统自带的一款简单的单人游戏,是最早的计算机图形游戏之一。

扫雷游戏在Windows用户中十分流行,自从Windows3.1以来一直绑定在里面作为Windows提供的熟悉鼠标操作的辅助工具。

游戏通过基本的逻辑判断清楚非雷区,最终把一个雷区中所有的地雷都准确的标注出来,同时也一直是程序设计爱好者热衷的编程实例。

随着游戏业的发展,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以享受游戏世界的乐趣。

扫雷游戏就是一款比较经典的游戏,游戏玩家可以锻炼自己的思维能力,为生活增添乐趣。

程序员可以使用自己学习过的程序设计语言,提高自身的编程能力。

另外,实现它的方法很多,也可以用不同的算法实现。

2.2游戏功能介绍

扫雷游戏的基本功能:

点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。

如果没雷,则显示周围雷数。

如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止并显示,这其实是一个递归过程。

点击鼠标右键于未知区域,用小红旗标志,将其置为有雷而不管是否真的有雷。

雷区上部左侧位置为开始游戏按钮。

雷区上部中间显示剩余的总雷数。

雷区上部右侧显示扫雷的时间。

2.3设计构想

扫雷是Windows操作系统自带的一款游戏,在大多数电子设备中我们都可以看到,这款游戏操作简单,规则也不难,根据不同等级,玩家可以训练自己的逻辑思考能力。

作为编程人员,在学习编程语言之后也可以锻炼自己的编程能力和逻辑思维能力。

本设计中采用MFC程序设计,开发一款简单的扫雷游戏。

这款游戏的规则是:

在不点击任何藏有地雷的方块情况下,以最快的速度找出所有的地雷。

如果在点击方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所有不含地雷的方块掀开,游戏才算成功。

游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以(未标示→标示→疑似)三者关系不断循环。

游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。

2.4设计过程

1.新建一个基于对话框的应用程序,将窗体改为“扫雷程序@马仲岳”,选择Minimizebox属性,使对话框具有最小化按钮。

2.向新建的工程中导入12个BMP位图资源,并且向对话框中添加两个静态的文本控件分别为(剩余地雷数:

)和(游戏时间:

)。

3.处理鼠标左键的按下事件,在该事件的处理函数中根据网格状态进行显示。

如果是空地,则翻转周围网格,如果是地雷结束游戏。

4.如何判断按下的方块是非地雷,这是整个游戏的核心,我们可以通过递归的观念来检查周边的方块是否含有地雷及是否继续往外翻开[1],功能图如2.1所示:

图2.1游戏总体实现框架

第三章游戏的具体实现过程

3.1扫雷游戏的模块实现

扫雷游戏主要包括两大部分:

一个部分是布雷,该部分主要将雷随机布置在游戏区域内,以避免出现重复布雷。

另一部分是扫雷,该部分包括判断鼠标左键点击某区域该区域是否是雷,如果是雷该如何操作,如果不是雷该如何操作,鼠标右键点击某区域时如果判断该区域是雷则加以标记,如果不是雷也加以标记,以及当鼠标双击某区域时,判断与该区域相邻的其它8个区域是否是雷并做一个标记。

游戏主窗体的创建:

启动VisualC++6.0后,选择新建工程,VisualC++6.0提供了用户可能需要的各种类型的应用程序模板。

选择MFCAppWizard(exe)项目,输入工程名称和位置,将创建一个新的工程如图3.1所示[2]:

图3.1创建一个新的工程

选择基于单对话框如图3.2所示:

图3.2选择一个基于单对话框的工程

 

创建窗体界面如图3.3所示:

点击对话框单击鼠标右键打开属性,将标题改为“扫雷游戏@马仲岳”,添加2个Static控件,1个Caption改为“剩余地雷数:

”,1个Caption改为“游戏时间:

图3.3窗体界面

向新建工程中导入十二张BMP位图如图3.4所示:

图3.4引用的位图文件

初始化网格界面代码:

 

 

3.2扫雷核心----布雷算法设计

3.2.1随机布雷算法的设计

随机布雷算法是以下两个函数的组合:

voidsrand(unsignedintseed);//seed为随机种子

srand((unsigned)time(NULL));//利用系统时间作为随机种子,因为系统内置的时钟是在时刻变化的[3]。

intrand(void);//产生(0,RAND_MAX)之间的随机整数,RAND_MAX为十六进制的0x7fff,可进行一些算术运算,使之产生所需要的任意随机数。

srand(time.GetHour()+time.GetMinute()+time.GetSecond());/当前系统时间为随机种子

CTimetime;

time=CTime:

:

GetCurrentTime();//调用系统时间

voidCSaoLeiDlg:

:

SetRandMine()//即利用系统时间作为随机种子,因为系统内置的时钟是在时刻变化的。

使用rand函数产生随机数:

intrand(void)//产生所需要的任意随机数。

intx=rand()%row;

inty=rand()%col;

3.2.2确定周围方块的数字

把整个游戏区域看成一个m_GridNum[i][j]的二维数组如图3.5所示:

图3.5随机的二维数组

在SaoLeiDlg.h文件中定义

GRIDm_GridNum[20][20];//网格

voidSetRecentGrid(GRID*pGrid);//声明成员方法

GRID*GetGridRect(CRectrc);

用voidCShaoLeiDlg:

:

SetRecentGrid(GRID*pGrid)设置一个节点CRectrect=pGrid->m_Rect;

假设m_Rect[i][j]为一个二维数组,可以将周围8个节点的坐标表示出来,分别为

m_Rect[i-1][j-1],m_Rect[i-1][j],m_Rect[i-1][[j+1]

m_Rect[i][j-1],,m_Rect[i][j+1]

m_Rect[i+1][j-1],m_Rect[i+1][j],m_Rect[i+1][j+1]

通过GRID*CShaoLeiDlg:

:

GetGridRect(CRectrc)函数把表示的节点放在m_GridNum[i][j]的网格中,代码如下。

 

用绘图代码在游戏区域显示随机布置的雷和周边情况,在OnPaint函数中添加如下代码:

 

3.3扫雷鼠标事件的处理

1.判断雷区和非雷区。

扫雷时需要判断每个格子的状态,使用voidCSaoLeiDlg:

:

InitializeGrid()函数初始化网格的状态,使之对应不同的BOOL。

在二维、三维游戏里,有一种简单的构造地图的方法,即将地图划分为m*n的规格格子,使每一个格子对应二维数组中的一项,当鼠标单击时,通过找出鼠标点击区域,找到相应的格子,判断格子状态来替换相应的位图。

具体算法思想如下:

1)在应用程序的客户区划分一块区域,将该区域划分为n*m相同大小的格子;

2)将每一个格子的状态对应到二维数组的相应项上;

3)当鼠标点击某一块区域时,首先判断是否在各种区域,然后再通过鼠标的坐标找到相应的格子;

4)查询格子的状态,从而调用相应的位图进行位图替换;

说明:

Windows的消息响应机制对于编写一些小游戏是非常方便的,当编写大型2D或3D游戏时,WindowsAPI就显得有些不足,此时应使用DirectX或OpenGL等大型图形库来进行设计及编码。

2.鼠标左键事件的处理。

分两种情况:

1)当相应区域不是雷区时,挖开区域,并且若能据此判断周围区域也不是雷区则将周围相应区域也挖开;

2)当区域是雷区时,则界面中所有的雷区同时“炸开”:

显示一个提示框(你输了!

)同时雷区和非雷区显示出来,若点击“确定”按钮,弹出是否开始游戏有“是”和“否”两个按钮。

3.对单击鼠标右键事件处理

第一次用右键单击某个区域时,插上一面小红旗,此时单击左键没有任何变化,第二次用右键单击时恢复原状[4]。

4.双击左键事件处理

在展开的区域,并且已经确定了周围的雷数,双击可以叠加展开非雷区域,以减少用户的单击操作。

 

3.4时间显示方法

 

第四章程序的运行和调试

4.1游戏初始化界面

游戏初始化界面如图4.1所示:

运行VisualC++6.0程序编译Debug目录下的Saolei.EXE,或者直接编译程序得到如下图所示的初始化界面。

图4.1游戏初始化界面

4.2游戏布雷界面

游戏布雷界面如图4.2所示:

运行程序,单击“开始游戏”按钮,在蓝色的方块内按下鼠标左键可以翻开当前的方块,翻开后会显示空白、数字和地雷三种情况。

玩家可以用鼠标右键标记地雷,并且可以双击鼠标左键翻开数字周围的方块。

通过运行程序把布雷情况显示出来。

图4.2游戏布雷界面

4.3游戏失败界面

游戏失败界面如图4.3所示:

当游戏玩家点击到埋有地雷的小方块是游戏失败,此时弹出一个“你输了”的对话框,点击“确定”,提示是否继续游戏。

如果是则继续游戏,否则退出游戏。

图4.3游戏失败界面

第五章游戏的设计总结

随着扫雷游戏的开发完成,游戏中预期的主要功能也基本实现。

本设计以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。

本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。

扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。

这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。

本设计中使用CWnd的Invalidate方法来实现屏幕刷新,Invalidate方法的频繁使用会造成图像的闪烁。

可使用InvalidateRect方法的使用需要不断计算刷新的区域,所以需要不断地计算显示数字的区域。

由于学习VisualC++6.0的时间比较短,其中的很多知识还没有了解和掌握,在扫雷游戏中有些功能还不够完善。

例如,在扫雷游戏中不能实现玩家成绩的排名,加入音乐,Windows系统自带的“笑脸”部分的编程,游戏等级的设置,还没有做到让计算机自动扫雷的目的。

只是实现了简单的扫雷功能,希望自己在以后的学习中不断的充实自己的知识结构,把扫雷游戏的功能进一步完善,使它成为一个更具有实用价值的游戏软件,同时也恳请各位领导和老师给予批评指正。

致谢

经过本次学年论文的设计,我学到了许多关于Windows程序设计、MFCWindows程序设计、C++程序设计知识,虽然过程中遇到了许多困难,但都在老师的帮助下顺利解决。

在此,感谢李振江老师一直以来对我的教导,我要对他的细心帮助和指导表示由衷的感谢。

在这段时间里,我在他身上学到了许多的专业知识,还有生活中的平易近人。

此外,他严谨的治学态度和认真的工作精神值得我去学习。

在我本次的课程设计中,李老师的指导给予了我极大的帮助,使我对整个课程设计的思路有了总体的把握,并耐心的帮我解决了许多实际问题,使我有了很大的收获。

并在整个开发过程中提出了许多可行性意见,并给我解决了一些专业性问题。

参考文献

[1]明日科技.VisualC++程序开发范例宝典[M].第1卷.北京:

人民邮电出版社,2008:

821-825.

[2]JeffProsise.MFCWindows程序设计[M].第2版.北京:

清华大学出版社,2007.5:

721-755.

[3]StanleyB.LippmanJoseeLajoieBarbaraE.Moo.C++Primer[M].第4版.北京:

人民邮电出版社,2006.3:

367-392.

[4]赵大伟肖周芳张艳.从扫雷游戏浅谈一些算法问题[D].江苏徐州:

中国矿业大学计算机科学与技术系,2008........忽略此处.......

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2