扫雷游戏程序设计课程设计报告

  • 格式:doc
  • 大小:729.50 KB
  • 文档页数:23

下载文档原格式

  / 23
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;)

//////////////踩到第一个雷

{