- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
类名
成员类
别
类型
成员名
描述
Base
方法
static
int
Output(const
char*)
在当前位置上输出一串字
符
static
int
GotoXY(int,?int);
取得控制台上光标的坐标
位置并返回
static
int
GetKey();
等待按下键,并返
回所对应的按键控
制符
基类
基类?Base:
(一)?需求分析
题目:
32、实现一个?N*M?的扫雷游戏
设计要求:
能够实现一个?N*M?的扫雷游戏
a、能够打开一个方格(由于做的是静态显示,故在控制台上方格用‘—’代替),已打开
的方格不能关闭
b、能够标记一个方格,标记方格的含义是对该方格有雷的预测(并不表示真的一定有雷)
c、能够给出游戏结果:输、赢
d、N?和?M?可由玩家自己设置
系统功能需求分析:
一个数字和一个雷(boom)。你可以打开(open)一个方格,如果你打开的是 一个
boom,那么就失败;否则就会打开一个数字,该数字是位于[0,8]的一个整数,该数字表
示其所有?邻居方格所包含的雷数,应用该信息可以帮助你扫雷。点击到了某区域发现其周
围没有雷,那么显而易见应该点开周围的区域,拓展空白区域
(二)概要设计
由于知识储备不足,VC?中的?MFC?应用程序又过于复杂,故退而求其次,不再采用动态显示
和界面图形化,采用静态显示来实现扫雷游戏中的主要功能。
用键盘上的‘1’键代替鼠标左击,即打开一个方格查看其属性,已打开的方格不能在关闭;
用键盘上的‘2’键代替鼠标右击,即标记一个方格,标记方格的含义是对该方格有雷的预
测(并不表示真的一定有雷)
用键盘上的‘↑’‘↓’‘←’‘→’四个键来实现光标在控制台上的自由移动,
相当于用鼠标实现光标在图形界面的移动
游戏区域的高度与宽度及总雷数可由玩家自己设定
应题目要求设计了一个基类:Base?和一个继承类:Game。
基类?Base?主要实现一些基本功能:游戏结束时输出游戏的结果:输赢;
返回控制台上光标的位置返回按下键时所对应的按键控制符
类名
成
员
类
别
类型
成员名
描述
Game
属
性
int
curX,curY
光标位置
int
poolWidth,poolHeight
游戏区域的高度
与宽度
int
pool[GAME_MAX_HEIGHT+1][GAME_MAX_W
IDTH+1]
用二维数组来存
储雷的相关属性
const
static
int
GMARK_BOOM;
GMARK_EMPTY
GMARK_MARK;
雷的属性:雷
(*),空,标记
(#)
方
法
int
initpool(int,int,i
nt)
初始布雷
Int
MoveCursor()
移动光标
int
huatu(int)
在控制台上把扫雷区域显示
出来
int
tryopen(int,int)
在一个坐标点上(x,y)点击,
在该位置上显示其周围的雷
数或拓展空白区域或失败
int
shownum(int,int)
得到一个坐标位置周围的雷
数,并把数值返回
int
tuozhan(int,int)
如果一个坐标点的周围没有
雷,则拓展空白区域,并递
归拓展
int
saolei()
扫雷并判断输赢
继承类?Game?是本程序的主要内容,也是实现扫雷游戏的关键部分。
主要实现的功能:初始化图形界面,把游戏区域在控制台上显示出来;利用随机函数进行
随机布雷,以保证玩家每次玩游戏时雷的分布位置均不同;得到一个坐标位置周围的雷数,
并把数值返回;在一个坐标点上(x,y)点击,在该位置上显示其周围的雷数或拓展空白区域
或失败;如果一个坐标点的周围没有雷,则拓展空白区域,并递归拓展;其中?saolei()函
数是类?Game?里的关键函数体,用来判断玩家按下了哪个键,并作出相应反应(上下左右
四个方向的移动,打开一个方格,标记一个方格),并判断游戏的输与赢
继承类?
继承类?Game:
核心算法:
(1)布雷函数:
初始化时把数组里的值全部置为?0,然后利用?srand(),rand()随机机制产生随机数,分
别对列和行取模,便产生了雷的随机位置。但是布雷前,先要判断此随机位置
是否已经布上了雷。
int?Game::initpool(int?width,int?height,int?num)
{ poolWidth=width;
poolHeight=height;
if(num0||num=width*height||widthGAME_MAX_HEIGHT||width=0||height=0||hei
ghtGAME_MAX_HEIGHT) return?1;
//初始是把游戏区域也即是数组里的值全都置为?0
for(int?y=0;y=height+1;y++)
{fo
您可能关注的文档
- 我国商业银行个人理财业务发展状况研究.docx
- 我国商业银行个人理财业务发展与问题对策研究.docx
- 我国商业银行个人理财业务探讨.docx
- PLC冲床电气控制系统设计.docx
- 我国商业银行个人理财业务操作风险防范及对策.docx
- 我国啤酒行业现状和经营模式分析范文.docx
- 我国国家洗钱风险评估框架研究.docx
- 我国城市规划行政管理制度的创新探讨.docx
- 我国反洗钱法律制度与案例分析.docx
- 我国建设工程担保制度研究.docx
- 统编版(2024新版)七年级上册道德与法治第1-13课全册教学设计.docx
- 2024广东省阳江市九年级一模英语试卷(无答案).docx
- 二年级语文园地四上册标准课件.pptx
- 2024年11月福田期中联考质量检测初一生物试卷(无答案).docx
- 2025版《中考考前最后一卷》数学(广东省卷)含答案或解析.docx
- 2024年湖北省高中学业水平合格性考试语文真题.docx
- 五年级下册《灰椋鸟》标准教案.pptx
- 外研版(2024新版)七年级上册英语全册教案(单元整体教学设计).docx
- 2025年山西长治市事业单位公开招聘1280人笔试历年典型考题(历年真题考点)解题思路附带答案详解.docx
- 2025年中考语文一轮复习知识清单专题07 七年级名篇名句默写(2册教材梳理+2个易错点)(解析版).pdf
文档评论(0)