单机扫雷游戏详细介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

初 始 化 游 戏
通信与信息工程学院
6
修德 博学 求实 创新
<1.1>菜单资源--主要用于游戏的控制及说明
菜单资源只有三个菜单选项: 第1个菜单选项包括游戏控制
的选项;
第2个菜单选项包含游戏说明 的选项; 第3个菜单选项包括数据的发 送或者接收。
通信与信息工程学院
7
修德 博学 求实 创新
通信与信息工程学院
通信与信息工程学院
19
修德 博学 求实 创新
<2> 单机扫雷游戏--游戏功能控制 游 戏 菜 单 选 项
帮 助 菜 单 选 项
菜单 选中 状态 控制 函数
通信与信息工程学院
20
修德 博学 求实 创新
<2.1.1> 游戏菜单选项--开局子菜单
开局子菜单用于 初始化游戏,游 戏的等级、特性 都没有变化,只 是计时清零后初 始化游戏。 (OnMemuStart)
<3.6> 鼠标右键抬起事件的处理
鼠标左键按下可对方块进行标识,鼠标右键 抬起时需要判断当前是否所有的类块都已经 正确地被标识。 OnRButtonUp() //鼠标右键的抬起处理
通信与信息工程学院
35
修德 博学 求实 创新
<4> 游戏结果处理函数
在用户交互的鼠标左键抬起事件处理函数及鼠 标右键抬起事件处理函数中,都调用了 Victory()函数来判断当前游戏是否胜利。该函 数主要根据当前游戏中所有方块的状态来判断 用户是否将所有雷块都标识出来,并将所有非 雷块全部展开来,判断当前的游戏是否可以转 变为胜利状态. Dead() //游戏失败处理函数 Victory() //游戏结果处理函数
5
6
• 窗口的初始化(代码核心)
• 进入run函数
通信与信息工程学院
3
修德 博学 求实 创新
(二)单机扫雷游戏—详细设计
扫雷游戏的开发主要包括两大部分: 一个部分是布雷,该部分主要将雷随机布置在游戏区 域内,以避免出现相同的雷区布置地图。 另一部分是扫雷,该部分包括判断鼠标左键点击某区 域该区域是否是雷,如果是雷该如何操作,如果不是雷 该如何操作,鼠标右键点击某区域时如果判断该区域是 雷则加以标记,如果不是雷也加以标记,以及当鼠标双 击某区域时,判断与该区域相邻的其它8个区域是否是 雷并做一个标记。 (游戏与用户的交互)
通信与信息工程学院
黑白色数字位图
13
修德 博学 求实 创新
雷的剩 余数量
游戏已花 费时间
通信与信息工程学院
14
修德 博学 求实 创新
<1.3> 声音资源
当游戏开始后,开始计时,
IDR_WAVE_CLOCK对应的声音资源将 被播放,每个一秒钟播放一次与时钟显
示同步。
当游戏失败时,将播放 IDR_WAVE_DEAD对应的声音资源。
通信与信息工程学院
26
修德 博学 求实 创新
<2.3> 菜单选项的选中状态控制函数 等级与特效控制菜单选项都有选中状态控制函数, 以提示当前游戏的等级及特效应用情况。 SetCheckedLevel() //设置游戏级别 SetCheckedColor() //颜色菜单选项 SetCheckedSound()//声音菜单选项
通信与信息工程学院
31
修德 博学 求实 创新
鼠标左右键同时按下时的效果
鼠标同时抬起后的效果
通信与信息工程学院
32
修德 博学 求实 创新
<3.4>鼠标左右键同时抬起事件的处理
因为在左右键同时按下事件的处理函数中,将 鼠标同时按下方块周围的方块改变了状态。如 果方块周围没有被展开,且游戏没有进入失败 或Leabharlann Baidu利的状态,则在鼠标左右键同时抬起函数 中,需要恢复这些方块的状态。如果是正常未 被标识且未被展开的方块,将从空状态恢复到 正常状态,未知状态的方块将从按下状态恢复 到正常状态。OnLRBtnUp() //鼠标左右键同时按下后鼠标抬起事件的处理
通信与信息工程学院
4
修德 博学 求实 创新
<4>游戏结果 处理函数
<1> 游戏系 统资源
详细 设计
<2>游戏功 能控制
<3>游戏与用 户的交互
通信与信息工程学院
5
修德 博学 求实 创新
<1> 单机扫雷游戏—游戏系统资源 菜 单 资 源 位 图 资 源 声 音 资 源 初 始 化 游 戏 变 量 绘 制 游 戏 界 面
<2.1.4> 游戏菜单选项—退出菜单 退出菜单选项 OnMemuExit()是当 用户选择这个菜单 选项时,无论游戏 处于什么状态都将 直接结束游戏并退 出程序。
通信与信息工程学院
25
修德 博学 求实 创新
<2.2> 帮助菜单选项
帮助菜单只有两个子菜单: 一个是联机帮助 OnMemuHelpUse(); 一个是游戏版本的说明 OnMemuAbout()。
8
修德 博学 求实 创新
<1.2.1> 位图资源--游戏状态按钮位图
彩色状态按钮位图
黑白色状态按钮位图
通信与信息工程学院
9
修德 博学 求实 创新
<1.2.1>位图资源--游戏状态按钮位图
正常 胜利 失败 方块的展开状态 正常
通信与信息工程学院
10
修德 博学 求实 创新
<1.2.2> 位图资源—方块的状态位图
游戏中,鼠标单击是用户最多的游戏动作,可 单击状态按钮开始游戏,也可单击主游戏区展 开用户认定的非雷方块。 OnLButtonDown() 消息处理机制 //鼠标单击事件的处理
通信与信息工程学院
29
修德 博学 求实 创新
<3.2> 鼠标左键抬起事件的处理
当鼠标左键按下后,由于不知道鼠标的抬起位 置只是标识一些状态,并未对游戏进行什么处 理。在鼠标左键抬起事件处理函数中,要根据 鼠标左键按下事件中的标识及鼠标左键抬起的 位置,对当前的游戏状态进行处理。 OnLButtonUp() //鼠标左键抬起事件的处理
修德 博学 求实 创新
单机级扫雷游戏开发
通信与信息工程学院
1
修德 博学 求实 创新
(一)设计思路
单机 扫雷 游戏
(二)详细设计 (三)测试结果
通信与信息工程学院
2
修德 博学 求实 创新
(一)单机扫雷游戏—设计思路
1 2 3 4
• MFC、C++
• 全局变量theApp开始
• 入口函数WinMain • 调用派生虚函数InitInstance
方块彩色位图
通信与信息工程学院
方块黑白色位图
11
修德 博学 求实 创新
<1.2.2> 位图资源—方块的状态位图
初始状态 标志雷状态 未知状态 爆炸状态 错误标志雷状态 雷状态 下压未知状态 下压状态 数字状态
通信与信息工程学院
12
修德 博学 求实 创新
<1.2.3> 位图资源--数字位图
彩色数字位图
39
修德 博学 求实 创新
游戏的高级界面: 16*30个方块 99个雷
通信与信息工程学院
40
修德 博学 求实 创新
分数记录
扫雷英雄榜
通信与信息工程学院
41
修德 博学 求实 创新
设置雷区
通信与信息工程学院
自定义的雷区
42
修德 博学 求实 创新
感谢同学们的帮助!!! 感谢学长学姐的帮助!!! 感谢老师的指导!!!
通信与信息工程学院
18
修德 博学 求实 创新
<1.6> 绘制游戏界面
DrawButton()函数实现了绘制状态按钮的功能。其 实状态按钮并不是真正按钮,它只是一个绘有表情 及3D边框的一片区域,该片区域根据当前的游戏状 态代表按钮上的表情 DrawNumber()函数实现绘制游戏当前剩余雷数,以 及当前游戏时间的功能,它所绘制的雷数及时间随 着游戏的进行不断地变化着 DrawMineArea()函数实现绘制主游戏区的功能,它 根据区域中各个方块的属性来绘制这些方块,
通信与信息工程学院
43
通信与信息工程学院
21
修德 博学 求实 创新
<2.1.2> 游戏菜单选项—等级设置菜单
用户自定义选项的实现基 本也类似,只有这些参数 需要用户自己输入,因此 需要添加一个用户自定义 游戏模块,它主要为用户 提供了输入行数、雷数及 雷数的功能,界面设计如 图所示。 SetCustom()函数 用户设置这3个值 (m_uNumber,m_uWidth, m_uHeight)
通信与信息工程学院
36
修德 博学 求实 创新
(三)单机扫雷游戏—测试结果
菜单项 地雷计数器 计时器
状态 按钮
雷区
通信与信息工程学院
37
修德 博学 求实 创新
游戏的初级界面: 9*9 个方块 10个雷
通信与信息工程学院
38
修德 博学 求实 创新
游戏的中级界面: 16*16 个方块 40个雷
通信与信息工程学院
通信与信息工程学院
22
修德 博学 求实 创新
通信与信息工程学院
23
修德 博学 求实 创新
<2.1.3> 游戏菜单选项--游戏特效菜单
游戏特效菜单选 项,可以控制游 戏的颜色、声音 等 OnMemuColor, OnMemuSound, OnMemuMark,
通信与信息工程学院
24
修德 博学 求实 创新
通信与信息工程学院
30
修德 博学 求实 创新
<3.3> 鼠标左右键同时按下事件的处理
在游戏中鼠标左右键同时按下时,被按下方块 的周围所有未被展开且未被标识的方块都被置 为空的状态,以提示用户还有哪些方块需要判 断展开或标识。如果周围有被置为未知状态的 方块(问号方块)时,则问号方块被置为按下 状态的未知按钮。而标识为棋子(雷块标识) 时,方块的状态不变。 OnLRBtnDown() //鼠标左右键同时按下事件的处理
当游戏胜利是将播放
IDR_WAVE_VICTORY对应的声音资源
通信与信息工程学院
15
修德 博学 求实 创新
与游戏的功能相对应,所有的功能都对应这一个实现 体。如:等级选择的功能对应着等级选择的实现、游
戏交互的功能对应着游戏交互的实现。游戏主要的功
能基本都在主游戏窗体类实现。该设计主游戏模块中 实现的游戏界面的绘制、游戏初始化、用户交互、绘 制游戏界面并初始化游戏。但无论是何种操作,在进 行游戏之前都需要初始化游戏数据、绘制游戏界面并
初始化游戏,这是实现游戏的第一步。
通信与信息工程学院
16
修德 博学 求实 创新
<1.4> 初始化游戏变量
LoadWaveSrc()函数用于载入声音资源 FreeWaveSrc()函数用于释放声音资源 SizeWindow()函数用来初始化窗体中重要部分的位置 OnInitMenu() 重载菜单初始化函数
<1.5> 初始化游戏
InitGame() 函数用于游戏的初始化 LoadBitmap()函数根据当前颜色状态为游戏 载入不同的位图资源
通信与信息工程学院
17
修德 博学 求实 创新
<1.6> 绘制游戏界面
主窗体的OnPaint()函数实现绘制游戏界面 的功能,利用双缓冲的绘图方法。
双缓冲技术绘图—避免出现闪烁现象
通信与信息工程学院
27
修德 博学 求实 创新
<3> 单机扫雷游戏--游戏与用户的交互
鼠标单击事件的处理 鼠标左键抬起事件的处理 鼠标左右键同时按下事件的处理 鼠标左右键同时抬起事件的处理 鼠标右键按下事件的处理 鼠标右键抬起事件的处理
通信与信息工程学院
28
修德 博学 求实 创新
<3.1> 鼠标单击事件的处理
通信与信息工程学院
33
修德 博学 求实 创新
<3.5> 鼠标右键按下事件的处理
单击鼠标右键可以根据当前方块的状态标注方 块的下步状态。如果当前为正常状态,则右击 后变成棋子状态,右击后变成正常状态。 OnRButtonDown() //鼠标右键按下事件的处理
通信与信息工程学院
34
修德 博学 求实 创新
相关文档
最新文档