ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:101.52KB ,
资源ID:10357313      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10357313.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++扫雷程序输出报告材料.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++扫雷程序输出报告材料.docx

1、C+扫雷程序输出报告材料程序输出报告程序设计时使用环境-Win10 VS20151程序设计思路模块化设计一个扫雷游戏。要实现埋雷,计算一个格子周围雷数,打开雷位,显示雷区几个功能.需要以下几个主要数据,判断雷位的雷是否存在,雷位周围的雷数,是否已经被打开,游戏是否结束,雷区大小,布雷量(本程序中非必须保存于类中数据)2功能的具体实现为了方便计算和理解先分出类class OneMine OneMine(); /雷位构造函数 void InitOneMine(); /初始化一个雷位 bool IsMine; /是否是雷 bool Opened; /是否已经打开 short AroundMines;

2、 /周边的雷数 friend class Operation; friend class Mines;class Mines/创建雷区类 bool GameOver; /扫雷是否结束 short Rows; /雷区的行数 short Cols; /雷区的列数 short MinesCount; /布设雷的数量 OneMine *pos5050; /存放雷对象的数组指针public: Mines(); /雷区类构造函数 Mines(); /析构函数 friend class Operation;class Operation :public Mines/操作类public: void ReIni

3、tMine(short row, short col, short mines); /重新初始化雷区 void LayOneMines(); /布置一个地雷 void CalculateAroundMine(int x, int y); /计算每个雷周边的雷数 void ShowOneMine(int x,int y); /触雷时的执行函数 void ShowMine(); /显示未触雷时的雷区情况 void ShowAllMine(); /触雷时的触发函数 void OpenOneMine(int x, int y); /打开一个雷位;实现埋雷/布一个地雷void Operation:Lay

4、OneMines() /布一个地雷 int m, n; do m = rand() % Cols + 1; n = rand() % Rows + 1; /随机产生雷位坐标 while (posmn-IsMine); posmn-IsMine = true;PS:rand()函数的输出是依赖于默认输入数据的,需要使用windows.h中的GetTickCount()函数来初始化实现计算格子周围雷数void Operation:CalculateAroundMine(int x, int y) /计算雷位周边雷数 int mines = 0; for (int i = x - 1; i = x

5、+ 1; i+) for (int j = y - 1; j IsMine; /利用IsMine数据的特性计算周围雷数 posxy-AroundMines = mines;实现打开雷位void Operation:OpenOneMine(int x, int y) /打开一个雷位 if (xCols | xRows | yOpened) return; /如果该位置已经打开,则返回 if (posxy-IsMine) /如果该雷位是地雷 ShowAllMine(); /找出所有的地雷,并显示出来 cout Opened = true; if (posxy-AroundMines = 0) /如

6、果该雷位周边的雷数为零,打开周边的雷位,采用递归调用的方法 if (x != 1) OpenOneMine(x - 1, y); /打开左边 if (x != Cols) OpenOneMine(x + 1, y); /打开右边 if (y != 1) OpenOneMine(x, y - 1); /打开上边 if (y != Rows) OpenOneMine(x, y + 1); /打开下边 if (x != 1 & y != 1) OpenOneMine(x - 1, y - 1); /打开左上 if (x != 1 & y != Rows) OpenOneMine(x - 1, y +

7、 1); /打开左下 if (x != Cols&y != 1) OpenOneMine(x + 1, y - 1); /打开右上 if (x != Cols&y != Rows)OpenOneMine(x + 1, y + 1); /打开右下 实现输出未触雷的雷区 void Operation:ShowMine() /显示雷区 int k = 0; /换行判定变量 if (GameOver = false) if (Rows = 10) cout ; cout ; for (int i = 1; i = Cols; i+) /输出横坐标 cout i = 10 & i 10) cout ;

8、for (int i = 1; i = Rows; i+) for (int j = 1; j = Cols; j+) if (k%Cols = 0) cout endl i % (Rows + 1) ; /纵坐标+按列 if (i = 10) cout = 10) cout Opened) cout AroundMines ; k+; else cout H ; k+; cout IsMine)/right cout M ; else cout AroundMines= 10) cout ; cout ; for (int i = 1; i = Cols; i+) /输出横坐标 cout i

9、 = 10 & i 10) cout ; for (int i = 1; i = Rows; i+) for (int j = 1; j = Cols; j+, k+) if (k%Cols = 0) cout endl i % (Rows + 1) ; /纵坐标+按列 if (i = 10) cout = 10) cout ; ShowOneMine(j, i); cout endl;3程序运行结果 4程序分析由于不是鼠标操作,加一道标记操作显得过于繁琐,所以没有加入标记地雷功能,也因此该地雷游戏其实没有完整的胜利途径.没有将雷区框架(即X-Y轴)输出函数化5程序改进思路加入标记地雷功能,使

10、用条件判断,每次输入打开行列坐标前,请求输入Y/N是否进行标记操作.对类进行详细分类,分别封装是否存雷类,是否打开类,是否结束游戏类.6附:完整源代码/ ConsoleApplication1.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include#include windows.husing namespace std;class OneMine OneMine(); /雷位构造函数 void InitOneMine(); /初始化一个雷位 bool IsMine; /是否是雷 bool Opened; /是否已经打开 short AroundMines

11、; /周边的雷数 friend class Operation; friend class Mines;class Mines/创建雷区类 bool GameOver; /扫雷是否结束 short Rows; /雷区的行数 short Cols; /雷区的列数 short MinesCount; /布设雷的数量 OneMine *pos5050; /存放雷对象的数组指针public: Mines(); /雷区类构造函数 Mines(); /析构函数 friend class Operation;class Operation :public Mines/操作类public: void ReIn

12、itMine(short row, short col, short mines); /重新初始化雷区 void LayOneMines(); /布置一个地雷 void CalculateAroundMine(int x, int y); /计算每个雷周边的雷数 void ShowOneMine(int x,int y); /触雷时的执行函数 void ShowMine(); /显示未触雷时的雷区情况 void ShowAllMine(); /触雷时的触发函数 void OpenOneMine(int x, int y); /打开一个雷位;OneMine:OneMine()/雷位构造函数 In

13、itOneMine();void OneMine:InitOneMine()/重新初始化一个雷位 IsMine = false; /雷位默认无雷 Opened = 0; /雷位默认未打开 AroundMines = 0; /雷位周围雷数默认为无Mines:Mines()/雷区构造函数 for (int i = 0; i50; i+) for (int j = 0; j50; j+) posji = new OneMine();Mines:Mines()/雷区析构函数 for (int i = 0; i50; i+) for (int j = 0; j50; j+) delete posji;v

14、oid Operation:ReInitMine(short row, short col, short mines)/重新初始化雷区 int i, j; GameOver = false; /游戏默认为未结束 Rows = row; Cols = col; /行数列数 MinesCount = mines; /初始雷数 for (i = 1; i = Rows; i+) /把所有的雷位地雷清除 for (j = 1; j InitOneMine(); /InitOneMine()为初始化雷位函数 srand(unsigned)GetTickCount(); /初始化产生随机数函数 for (

15、i = 0; iMinesCount; i+) /布置地雷 LayOneMines(); for (i = 1; i = Rows; i+) /计算每个雷位周边的雷数 for (j = 1; j IsMine); posmn-IsMine = true;void Operation:CalculateAroundMine(int x, int y) /计算雷位周边雷数 int mines = 0; for (int i = x - 1; i = x + 1; i+) for (int j = y - 1; j IsMine; /利用IsMine数据的特性计算周围雷数 posxy-AroundM

16、ines = mines;void Operation:ShowOneMine(int x,int y) /触发雷后显示一个雷 int i = x; int j = y; if (posij-IsMine)/right cout M ; /雷显示为M else cout AroundMines= 10) /适当输出空格使得雷区不至于变形(以下输出空格均属于此功能) cout ; cout ; for (int i = 1; i = Cols; i+) /输出横坐标 cout i = 10 & i 10) cout ; for (int i = 1; i = Rows; i+) for (int

17、 j = 1; j = Cols; j+, k+) if (k%Cols = 0) cout endl i % (Rows + 1) ; /纵坐标+按列 if (i = 10) cout = 10) cout ; ShowOneMine(j, i); cout = 10) cout ; cout ; for (int i = 1; i = Cols; i+) /输出横坐标 cout i = 10 & i 10) cout ; for (int i = 1; i = Rows; i+) for (int j = 1; j = Cols; j+) if (k%Cols = 0) cout endl

18、 i % (Rows + 1) ; /纵坐标+按列 if (i = 10) cout = 10) cout Opened) cout AroundMines ; k+; else cout H ; k+; cout Cols | xRows | yOpened) return; /如果该位置已经打开,则返回 if (posxy-IsMine) /如果该雷位是地雷 ShowAllMine(); /找出所有的地雷,并显示出来 cout Opened = true; if (posxy-AroundMines = 0) /如果该雷位周边的雷数为零,打开周边的雷位 if (x != 1) OpenOn

19、eMine(x - 1, y); /打开左边 if (x != Cols) OpenOneMine(x + 1, y); /打开右边 if (y != 1) OpenOneMine(x, y - 1); /打开上边 if (y != Rows) OpenOneMine(x, y + 1); /打开下边 if (x != 1 & y != 1) OpenOneMine(x - 1, y - 1); /打开左上 if (x != 1 & y != Rows) OpenOneMine(x - 1, y + 1); /打开左下 if (x != Cols&y != 1) OpenOneMine(x +

20、 1, y - 1); /打开右上 if (x != Cols&y != Rows)OpenOneMine(x + 1, y + 1); /打开右下 int main()/主函数 short row, col, mines; int x, y, i; Operation p; cout 请输入行、列、布雷数 row col mines; p.ReInitMine(row, col, mines); p.ShowMine(); for (i = 0; i = row*col; i+) /循环要求输入打开雷位并循环输出雷区 cout 请输入要打开的行、列坐标: y x; p.OpenOneMine(x, y); p.ShowMine(); cout endl; return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1