扫雷游戏程序设计课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课 程 设 计
扫雷游戏程序设计
2013 年 11 月 5 日
设计题目 学 号专业班级 学生姓名 指导教师
合肥工业大学课程设计任务书
一.设计任务
(1)鼠标左击排雷,右击插小旗,打问号;
(2)方格里面的数字表示方格周围的雷数;
(3)能够显示未标记雷数和游戏用时;
(4)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏;
(5)可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数),和自行定义雷区行数,列数和雷数的功能;
(6)排行榜功能,扫雷成功时候,根据游戏用时更新排行榜。
二. 具体设计
(一)、设计思路
扫雷游戏是很经典也很有趣的一款游戏,这次的游戏程序设计要求设计出功能与原游戏相近的一款游戏,首先定义变量和类要画出游戏方格以及位图,设计游戏等级,等级越高方格越多雷数也越多;然后设置随机布雷以保证每次重新开始游戏都有不同的雷区地图;另外定义鼠标左击扫雷,左击标记周围埋雷情况,右击奇数次排雷偶数次取消上次排雷,以及扫雷第一次左击不能扫到雷。
(二)、设计表示:
1、鼠标左击排雷,右击插小旗,打问号;
2、方格里面的数字表示方格周围的雷数;
3、能够显示未标记雷数和游戏用时;
4、雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏;
5、可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数);
6、任何时候开始游戏第一次点击不会扫到雷。
由于时间等原因未完成功能:
排行榜和自行定义雷区行数,列数和雷数功能。
(四)、详细设计
1、添加位图
前十二幅是在雷区的,后四幅是按钮。为了便于加载,必须各自保证其连续性。
分别表示游戏进行的状态、结果胜利或触雷。
2、预设等级方格数雷数变化
void CMywqq20112074View::OnEasy() /////////////////////////////初级
{
m_RowCount=10;//行数10
m_ColCount=10;//列数10
leinum=10;
realnum=leinum;
SetTimer(1,50,NULL);
// TODO: Add your command handler code here
second=0;//计时
secondstart=0;//1时开始计时// num=0;
leftnum=leinum;//剩余雷数
jieshu=0;//jieshu=1时停止
int aa=0;
//初始化0
for(int i=0;i { for(int j=0;j { lei[i][j].shumu=0; lei[i][j].weitu=0; } } //设置10个雷 CMywqq20112074View::OnMiddle() //////////////////////////////////中级 { m_RowCount=15;//行数15 m_ColCount=15;//列数15 leinum=40; realnum=leinum; SetTimer(1,50,NULL); // TODO: Add your command handler code here second=0;//计时 secondstart=0;//1时开始计时// num=0; leftnum=leinum;//剩余雷数 jieshu=0;//jieshu=1时停止 int aa=0; //初始化0 for(int i=0;i { for(int j=0;j { lei[i][j].shumu=0; lei[i][j].weitu=0; } } //设置40个雷 void CMywqq20112074View::OnHard() ///////////////////////////////////////////高级 { m_RowCount=25;//行数25 m_ColCount=16;//列数16 leinum=80; realnum=leinum; SetTimer(1,50,NULL); // TODO: Add your command handler code here second=0;//计时 secondstart=0;//1时开始计时// num=0; leftnum=leinum;//剩余雷数 jieshu=0;//jieshu=1时停止 int aa=0; //初始化0 for(int i=0;i { for(int j=0;j { lei[i][j].shumu=0; lei[i][j].weitu=0; } } //设置80个雷 do { int k=rand()%m_RowCount; int l=rand()%m_ColCount; if(lei[k][l].shumu!=-1) { lei[k][l].shumu=-1; aa++; } }while(aa!=leinum); 3、第一次点击不会扫到雷 if(lei[a][b].weitu==0||lei[a][b].weitu==3 ) { for(;n==0&&lei[a][b].shumu==-1;) //////////////踩到第一个雷 {