扫雷小程序设计.docx
- 文档编号:5049188
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:18
- 大小:637.11KB
扫雷小程序设计.docx
《扫雷小程序设计.docx》由会员分享,可在线阅读,更多相关《扫雷小程序设计.docx(18页珍藏版)》请在冰豆网上搜索。
扫雷小程序设计
扫雷小程序设计(总20页)
第1章问题描述与分析
1.1问题描述
扫地雷是一个广泛游戏,扫地雷的游戏规则:
扫雷就是要把所有非地雷的格子揭开即胜利;踩到地雷格子就算失败。
当鼠标点击到棋盘范围外时,视为无效,无响应。
游戏主区域由很多个方格组成。
基本要求为:
1.用程序设计分析思想对选题进行分析设计
2.用C语言对选题进行代码实现
测试要求为:
1.进行系统功能性测试,验证基本功能实现情况。
2.进行边界测试及特殊数据用例测试,验证功能模块的逻辑分支流程。
1.2问题分析
仔细分析课题的要求并粗略分析可以得到大致得到:
1.选择棋盘的大小(6*6,9*9,11*11)
2.选择游戏的难度(简单10%的雷,一般20%的雷,困难30%的雷)
3.绘制一个扫雷的面板。
4.根据鼠标点击位置确定所点格子位置。
5.判断格子是否是地雷,若为地雷则游戏结束。
若非地雷显示周围8个格子所含地雷总数。
6.若所有非地雷的格子揭开,则胜利,否则一直循环进行2、3步。
7.
第2章算法设计与流程图
2.
2.1算法设计
扫雷游戏的设计可以从三方面进行考虑:
1.面板的选择(BoardChoice)
2.难度的选择(LevelChoice)
3.游戏主界面(Game)
这三方面即为游戏进行的过程,大致可以画出如图2-1的模块图:
图2-1扫雷游戏设计的模块图
(1)面板的选择
在该模块中,需要决定面板的大小,即每行每列有多少个格子。
在设计时,个人决定使用6*6,9*9和11*11的格子面板。
设计中,个人决定设置3个按钮分别作为3种面板的选择。
在具体实现时,需要从两方面进行考虑,即:
位置确定和数据传入。
位置确定即为确定点击位置是否有效,确定点击位置与按钮的关系。
数据传入即为确定按钮后,将相应的6或9或11载入行列统计变量ROWANDCOLUMN中。
(2)难度的选择
在该模块中,需要决定面板种雷的个数,面板中应包含多少的地雷。
在设计时,个人决定使用10%,20%和30%的总格子数作为雷的总个数。
设计中,个人决定设置3个按钮分别作为3种面板的选择。
在具体实现时,需要从两方面进行考虑,即:
位置确定和数据传入。
位置确定即为确定点击位置是否有效,确定点击位置与按钮的关系。
数据传入即为确定按钮后,将相应的雷数载入变量MINENUM中。
(3)游戏主界面
游戏主界面的设计可以包含图形的绘制模块,鼠标区域的获取模块,数据的生成模块。
各部分包含的内容如下:
a)图形的绘制
1基础线条的绘制
2单个地雷的绘制
3非雷区域的数字输出
4游戏结束后所有雷和数字的结果输出
b)鼠标区域的获取
1有效性判断
2获取鼠标区域将坐标转换为可以使用的相应的数组数据
c)数据的生成
1初始化数据
2随机位置设置雷
3非雷区域计算相应数值
2.2流程图
2.2.1总体流程图
函数的主流程图如图2-2。
在该流程图中,介绍了游戏的三个界面的切换情况,三者为依次展示的状态,完成前一步骤后方可进入下一界面。
图2-2程序的总流程图
2.2.2面板的选择的流程图
面板的选择流程图如图2-3。
在该流程图中,介绍了面板大小选择的流程,主要的部分为界面的绘制过程,鼠标点击区域的判断,以及相应数值的赋值。
该过程是扫雷游戏的第一个界面。
该流程的目的是为了传入相应的参数,使得在游戏主界面时,能够初始化相应数组以及绘制对应的界面。
图2-3面板选择的流程图
2.2.3难度的选择的流程图
难度的选择流程图如图2-4。
在该流程图中,介绍了游戏难度的选择流程,主要的部分为界面的绘制过程,鼠标点击区域的判断,以及相应数值的赋值。
该过程是扫雷游戏的第二个界面。
过程类似于面板选择的流程。
该流程的目的是为了传入相应的参数,使得在游戏主界面时,能够初始化相应数组以及绘制对应的界面。
图2-4难度选择的流程图
2.2.4游戏主界面的流程图
游戏主界面的流程图如图2-5。
在该流程图中,主要的操作为绘制相应的主界面面板,即多个格子。
获取鼠标点击的位置,而后进行储存数据的判断,雷区与非雷区的判断,游戏是否结束的判断等等操作,相应的过程如下所示。
图2-5游戏主界面的流程图
第3章编码与测试
3.
3.1程序编码
程序的编码部分可以分为四各模块,即:
主函数的程序部分,面板大小选择部分,难度选择部分,游戏主界面部分,每个部分内均可以分类编写,互不干扰,以下为代码的主要部分,详细代码由于篇幅的限制,可以在附录中查阅。
3.1.1主函数程序代码
#include<>
#include""
#include""
#include""
1.intROWANDCOLUMN;
2018.
2.EGE文档与源代码.ege-open-source,2018.
3.EGE(EasyGraphicsEngine).manual,2018.
4.EasyGraphicsEngine基础教程.category/lesson,2018.
5.谭浩强.C++程序设计(第3版).北京:
清华大学出版社,2015.
6.严蔚敏,李冬梅,吴伟民.数据结构(C语言版第2版).北京:
人民邮电出版社,2015.
7.王红梅,胡明,王涛.数据结构(C++版).北京:
清华大学出版社,2011.
8.严蔚敏,陈文博.数据结构及应用算法教程(修订版),北京:
清华大学出版社,2011.
9.严蔚敏,陈文博.数据结构及应用算法教程(修订版),北京:
清华大学出版社,2011.
10.Decoder.C/C++程序设计.北京:
中国铁道出版社,2002.
11.谭浩强.C++面向对象程序设计(第2版).北京:
清华大学出版社,2014.
12.
附录
1.必选题题目
使用折半插入排序的方法对10个数进行排序,按照要求画流程图,给出代码及结果截图。
2.流程图
图附-1排序算法流程图
3.程序代码
#include
usingnamespacestd;
voidBInsertSort(int*arr,intlength)
{
for(inti=1;i { inttemp=arr[i];//需要插入的值存放入temp intlow=0; inthigh=i-1; while(low<=high) { intmid=(low+high)/2; if(temp high=mid-1; else low=mid+1; } for(intj=i-1;j>=high+1;j--)//记录后移 arr[j+1]=arr[j]; arr[high+1]=temp;//插入正确位置 } } intmain() { //输入数据 cout<<"请输入需要排序的十个数字"< int*arr=newint[10];//十个数字 for(inti=0;i<10;i++) cin>>arr[i]; cout< //折半排序 BInsertSort(arr,10); //输出结果 cout<<"排序结果"< for(inti=0;i<10;i++) cout< cout< return0; } 4.测试结果 实验测试输入了多组数据,在测试结果该模块中展示的为三个具有代表性的程序结果截图。 图6-2为顺序输入10个数据后的测试结果,在控制台中输入了1-10十个数字的顺序序列,即12345678910,在折半插入排序之后,正常显示从小到大的10个数字序列,排序结果与预期相符,结果正确。 图附-2顺序输入10个数字的测试结果 图6-3为逆序输入10个数据后的测试结果,在控制台中输入了1-10十个数字的逆序序列,即10987654321,在折半插入排序之后,正常显示从小到大的10个数字序列,排序结果与预期相符,结果正确。 图附-3顺序输入10个数字的测试结果 图6-4为乱序输入10个数据后的测试结果,在控制台中输入了87-1992314314010十个数字,在折半插入排序之后,正常显示从小到大的10个数字序列,排序结果与预期相符,结果正确。 图附-4乱序输入10个数字的测试结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扫雷 程序设计