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

上传人:b****5 文档编号:2926203 上传时间:2022-11-16 格式:DOCX 页数:37 大小:555KB
下载 相关 举报
扫雷游戏程序设计课程设计报告.docx_第1页
第1页 / 共37页
扫雷游戏程序设计课程设计报告.docx_第2页
第2页 / 共37页
扫雷游戏程序设计课程设计报告.docx_第3页
第3页 / 共37页
扫雷游戏程序设计课程设计报告.docx_第4页
第4页 / 共37页
扫雷游戏程序设计课程设计报告.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

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

《扫雷游戏程序设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《扫雷游戏程序设计课程设计报告.docx(37页珍藏版)》请在冰豆网上搜索。

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

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

课程设计

 

设计题目

扫雷游戏程序设计

学生姓名

学号

专业班级

指导教师

2013年11月5日

 

设计题目

扫雷游戏程序设计

成绩

扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。

参考系统自带的扫雷程序,自行开发设计一款扫雷游戏。

要求:

(1)鼠标左击排雷,右击插小旗,打问号;

(2)方格里面的数字表示方格周围的雷数;

(3)能够显示未标记雷数和游戏用时;

(4)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。

在任何情况下单击小脸可以重新开始游戏;

(5)可进行游戏难度的设定:

包括预定义的难度级别(雷区行数,列数和雷数),和自行定义雷区行数,列数和雷数的功能;

(6)排行榜功能,扫雷成功时候,根据游戏用时更新排行榜。

 

建议:

从学生的工作态度、工作量、设计(论文)的创造性、学术性、实用性及书面表达能力等方面给出评价。

 

签名:

200年月日

合肥工业大学课程设计任务书

一.设计任务

(1)鼠标左击排雷,右击插小旗,打问号;

(2)方格里面的数字表示方格周围的雷数;

(3)能够显示未标记雷数和游戏用时;

(4)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。

在任何情况下单击小脸可以重新开始游戏;

(5)可进行游戏难度的设定:

包括预定义的难度级别(雷区行数,列数和雷数),和自行定义雷区行数,列数和雷数的功能;

(6)排行榜功能,扫雷成功时候,根据游戏用时更新排行榜。

二.具体设计

(一)、设计思路

扫雷游戏是很经典也很有趣的一款游戏,这次的游戏程序设计要求设计出功能与原游戏相近的一款游戏,首先定义变量和类要画出游戏方格以及位图,设计游戏等级,等级越高方格越多雷数也越多;然后设置随机布雷以保证每次重新开始游戏都有不同的雷区地图;另外定义鼠标左击扫雷,左击标记周围埋雷情况,右击奇数次排雷偶数次取消上次排雷,以及扫雷第一次左击不能扫到雷。

类名

成员类别

类型

成员名

描述

CMyView

属性

int

leftnum

剩下雷数

int

leinum

雷数

int

n

定义格数

int

jieshu

结束

int

realnum

真实雷数

int

secondstart

开始计时

int

m_RowCount

int

m_ColCount

short

second

计时

CBitmap

m_Bitmap[12]

位图数组

CBitmap

m_anniu[4]

按钮数组

Lei

lei[50][50]

最大雷区

方法

afx_msgvoid

OnTimer(UINTnIDEvent)

计时器函数

afx_msgvoid

OnLButtonDown(UINT,CPoint)

左键按下消息

afx_msgvoid

OnStart()

开始函数

afx_msgvoid

OnLButtonUp(UINT,CPoint)

左键抬起消息

afx_msgvoid

OnRButtonDown(UINT,CPoint)

右键按下消息

afx_msgvoid

OnEasy()

简单模式函数

afx_msgvoid

OnMiddle()

中等模式函数

afx_msgvoid

OnHard()

困难模式函数

afx_msgint

OnCreate(LPCREATESTRUCT)

创建窗口函数

Lei

属性

int

weitu

标志位图

int

shumu

标志状态

(二)、设计表示:

(三)、实现功能

1、鼠标左击排雷,右击插小旗,打问号;

2、方格里面的数字表示方格周围的雷数;

3、能够显示未标记雷数和游戏用时;

4、雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。

在任何情况下单击小脸可以重新开始游戏;

5、可进行游戏难度的设定:

包括预定义的难度级别(雷区行数,列数和雷数);

6、任何时候开始游戏第一次点击不会扫到雷。

由于时间等原因未完成功能:

排行榜和自行定义雷区行数,列数和雷数功能。

(四)、详细设计

1、添加位图

前十二幅是在雷区的,后四幅是按钮。

为了便于加载,必须各自保证其连续性。

分别表示游戏进行的状态、结果胜利或触雷。

2、预设等级方格数雷数变化

voidCMywqq20112074View:

:

OnEasy()/////////////////////////////初级

{

m_RowCount=10;//行数10

m_ColCount=10;//列数10

leinum=10;

realnum=leinum;

SetTimer(1,50,NULL);

//TODO:

Addyourcommandhandlercodehere

second=0;//计时

secondstart=0;//1时开始计时

//num=0;

leftnum=leinum;//剩余雷数

jieshu=0;//jieshu=1时停止

intaa=0;

//初始化0

for(inti=0;i

{

for(intj=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:

Addyourcommandhandlercodehere

second=0;//计时

secondstart=0;//1时开始计时

//num=0;

leftnum=leinum;//剩余雷数

jieshu=0;//jieshu=1时停止

intaa=0;

//初始化0

for(inti=0;i

{

for(intj=0;j

{

lei[i][j].shumu=0;

lei[i][j].weitu=0;

}

}

//设置40个雷

voidCMywqq20112074View:

:

OnHard()///////////////////////////////////////////高级

{

m_RowCount=25;//行数25

m_ColCount=16;//列数16

leinum=80;

realnum=leinum;

SetTimer(1,50,NULL);

//TODO:

Addyourcommandhandlercodehere

second=0;//计时

secondstart=0;//1时开始计时

//num=0;

leftnum=leinum;//剩余雷数

jieshu=0;//jieshu=1时停止

intaa=0;

//初始化0

for(inti=0;i

{

for(intj=0;j

{

lei[i][j].shumu=0;

lei[i][j].weitu=0;

}

}

//设置80个雷

do

{

intk=rand()%m_RowCount;

intl=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;)//////////////踩到第一个雷

{

intaa=0;

//初始化0

for(inti=0;i

{

for(intj=0;j

{

lei[i][j].shumu=0;

lei[i][j].weitu=0;

}

}

do

{

intk=rand()%m_RowCount;

intl=rand()%m_ColCount;

if(lei[k][l].shumu!

=-1)

{

lei[k][l].shumu=-1;

aa++;

}

}while(aa!

=leinum);

//给方格赋值

for(inta=0;a

for(intb=0;b

if(lei[a][b].shumu==0)

{

for(intc=a-1;c

for(intd=b-1;d

if(c>=0&&c=0&&d

lei[a][b].shumu++;

}

}

4、鼠标右击插小旗,打问号

第一次用右键单击某个区域时,该区域上插上一面小红旗,此时单击左键没有任何变化,第二次用右键单击时恢复原状。

//判断显示什么位图

//weitu=1已按下的数字区

//weitu=2显示旗

//weitu=3显示问号

for(inta=0;a

for(intb=0;b

{if(lei[a][b].weitu==1)

{

Dc.SelectObject(m_Bitmap[lei[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);

}if(lei[a][b].weitu==2)

{Dc.SelectObject(m_Bitmap[9]);

pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);

}if(lei[a][b].weitu==3)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

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

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