- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
武汉轻工大学
数学与计算机学院
可视化程序设计大作业
专 业 数字媒体技术
班 级 数媒1301班
学 号 1305110032
姓 名 刘春钰
指导教师 吴海涛
2015 年 12 月 22 日
目录
第一章 游戏的总体分析与设计
1.1 游戏功能简介
1.2设计构想
1.3流程规划
第二章 扫雷游戏的具体实现过程
2.1 扫雷游戏模块的实现
2.1.1 扫雷游戏流程图
第一章 游戏的总体分析与设计
1.1 游戏功能简介
扫雷游戏的基本功能 : 点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止并显示,这其实是一个递归过程。
点击鼠标右键于未知区域,则将其置为有雷而不管是否真的有雷。 雷区右下角显示总雷数减去被标明有雷区域的数目。
雷区右下角显示扫雷的时间。
将雷全部扫清后或失败后显示一对话框。
1.2设计构想
在不掀开任何藏有地雷的方块情况下,以最快的速度找出所有的地雷。如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所有不含地雷的方块掀开,游戏才算成功。
游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。
当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。
1.3流程规划
流程规划大致上可以分为三个部分,分别为:画面初始、游戏者按下第一个方块和为非地雷方块时展开。
画面初始时,以游戏者最后一次设定的地雷区大小为范围画出地雷区,当游戏者按下第一个方块时产开始计时,接着就是如何判断按下的方块是非地雷时的处理,这也是整个游戏的技术核心,我们可以通过递归的观念来检查周边的方块是否含有地雷及是否继续往外翻开,直到踩到雷或者游戏胜利为止。
第二章 扫雷游戏的具体实现过程
2.1 扫雷游戏模块的实现
扫雷游戏的开发主要包括两大部分:一个部分是布雷,该部分主要将雷随机布置在游戏区域内,以避免出现相同的雷区布置地图。另一部分是扫雷,该部分包括判断鼠标左键点击某区域该区域是否是雷,如果是雷该如何操作,如果不是雷该如何操作,鼠标右键点击某区域时如果判断该区域是雷则加以标记,如果不是雷也加以标记,以及当鼠标双击某区域时,判断与该区域相邻的其它8个区域是否是雷并做一个标记。下面首先介绍第一部分之一——扫雷主窗体创建。
2.1.1 扫雷游戏流程图
失败
成功
class OneMine
{public:
OneMine();
void InitOneMine(); //初始化一个雷位
bool IsMine; //是否是雷
bool Opened; //是否已经打开
bool Mark; //是否已经被标记
short AroundMines; //周边的雷数
short state; }; //显示图形号
//创建雷区类
class Mines
{ public:
bool GameOver; //扫雷是否结束
short Times; //扫雷所用的时间
short Rows,Cols; //雷区的行数、列数
short MinesCount; //布设雷的数量
short MarkMines; //标对雷的数量
short VirtualMines; //标记为雷的数量
OneMine *pos[52][32]; //存放雷对象的数组指针
Mines();
~Mines();
void ReInitMine(short row,short col,short mines); //重新初始化雷区
void LayOneMines(); //布置一个地雷
void CalculateAroundMine(int x,int y); //计算每个雷周边的雷数
void ShowOneMine(int x,int y); //显示一个雷位
void ShowAllMine
文档评论(0)