能力拓展训练扫雷游戏.docx

上传人:b****2 文档编号:1580174 上传时间:2023-05-01 格式:DOCX 页数:11 大小:103.42KB
下载 相关 举报
能力拓展训练扫雷游戏.docx_第1页
第1页 / 共11页
能力拓展训练扫雷游戏.docx_第2页
第2页 / 共11页
能力拓展训练扫雷游戏.docx_第3页
第3页 / 共11页
能力拓展训练扫雷游戏.docx_第4页
第4页 / 共11页
能力拓展训练扫雷游戏.docx_第5页
第5页 / 共11页
能力拓展训练扫雷游戏.docx_第6页
第6页 / 共11页
能力拓展训练扫雷游戏.docx_第7页
第7页 / 共11页
能力拓展训练扫雷游戏.docx_第8页
第8页 / 共11页
能力拓展训练扫雷游戏.docx_第9页
第9页 / 共11页
能力拓展训练扫雷游戏.docx_第10页
第10页 / 共11页
能力拓展训练扫雷游戏.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

能力拓展训练扫雷游戏.docx

《能力拓展训练扫雷游戏.docx》由会员分享,可在线阅读,更多相关《能力拓展训练扫雷游戏.docx(11页珍藏版)》请在冰点文库上搜索。

能力拓展训练扫雷游戏.docx

能力拓展训练扫雷游戏

能力拓展训练-----扫雷游戏

学号:

0120810680326

课程设计

 

题目

扫雷游戏

学院

计算机学院

专业

软件工程

班级

0803班

姓名

徐泽前

指导教师

 

2010

7

15

 

扫雷游戏

1规则描述

游戏开始后,系统会在雷区的小方块中随机布下若干个地雷。

部署完毕后,系统会在其他非雷方块中填充一些数字。

某一个具体数字表示与其紧邻的8个方块中雷方块的数量,玩家可以根据这些信息去半段时候可以打开某些方块,并把认为是地雷的方块打上标记,当玩家吧所有地雷找出来后,其余非雷方块区域都已打开,这时游戏结束。

在游戏过程中一旦错误的打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数量超过程序设定,虽然打开了全部其余方块,游戏仍不会结束。

2软件环境

WindowsXP

MicrosoftVisualC++

3功能需求分析

游戏需要提供两个计数器,一个用来显示用户扫雷所花费的时间,以秒为单位;一个用来显示当前还剩多少个雷方块。

另外提供一个按钮,用来开始游戏。

在游戏区域方面,按功能将它分成两大区域:

雷区和提示区。

提示区除了上面提供的计数器外,还包括两个按钮,一个用来开始游戏,一个用来显示版本信息。

游戏过程中,当玩家用鼠标点击相应的方块,程序就会做出相应的鼠标响应时间,程序处理这些鼠标时间的过程中会伴随着GDI绘图,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。

4程序实现

4.1界面设计

图1界面设计图

4.2具体实现

4.21布雷

随机获取一个状态为非雷的点,将它的属性标识为雷,重复这样的工作,直到布下足够的累为止,流程图如下

在CMineWind类中添加游戏的布雷模块的处理函数,该函数的具体实现如下所示:

VoidCMineWnd:

:

LayMines(UINITrow,UINTcol)

{

Srand((unsigned)time(NULL));

UINTi,j;

for(UNITindex=0;index

{

i=rand()%m_uYNum;

j=rand()%m_uXNum

if(i==row&&j==col)continue;

if(m_pMines[i][j].uAttrib!

=ATTRIB_MINE)

{

m_pMines[i][j].uAttrib=ATTRIB_MINEl

index++;

}

}

}

4.22扫雷

当布雷完毕后,接下来就是扫雷了,从开始扫雷到游戏结束的整个过程中,游戏会根据鼠标的不同动作,做出相应的计算以及反馈。

也就是说,只需要将算法加载到各种鼠标的时间处理中,就可以实现整个游戏的核心。

接下来就分析不同的鼠标时间,应该做出什么样的计算处理。

鼠标左击事件流程如下:

voidCSweepmineDlg:

:

OnLButtonDown(UINTnFlags,CPointpoint)

//单击事件

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

GRID*grid=GetLikeGrid(point);

if(grid!

=NULL)

{

grid->m_IsShow=TRUE;

if(grid->m_State==ncMINE)

{

ShowAllMine();

Invalidate();

KillTimer

(1);

MessageBox("你输了,请再接再厉!

");

if(MessageBox("是否继续新游戏?

","系统提示",MB_YESNO

|MB_ICONQUESTION)==IDYES)

{

OnButstart();

}

else

OnCancel();

}

elseif(grid->m_State==ncNULL)

DownNullShow(grid);

Invalidate();

}

CDialog:

:

OnLButtonDown(nFlags,point);

}

VoidCSweepmineDlg:

:

OnLButtonDblClk(UINTnFlags,CPointpoint)

//双击事件,进行拓展

{

GRID*grid=GetLikeGrid(point);

if(grid!

=NULL)

{

intnum=IsNumber(grid->m_State);

if(num!

=9)

{

grid->m_IsShow=TRUE;

DblClkNum(grid,num);

}

Invalidate();

}

CDialog:

:

OnLButtonDblClk(nFlags,point);

}

鼠标右击事件:

voidCSweepmineDlg:

:

OnRButtonDown(UINTnFlags,CPointpoint)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

GRID*grid=GetLikeGrid(point);

if(grid!

=NULL)

{

if(m_Flag==70)

{

MessageBox("标记已用完!

");

return;

}

if(grid->m_State==ncFLAG)

{

for(inti=0;i<70;i++)

{

if(m_FlagRect[i]==grid->m_Rect)

{

grid->m_State=m_FlagState[i];

m_FlagState[i]=ncUNDOWN;

m_FlagRect[i]=0;

grid->m_IsShow=FALSE;

m_Flag--;

CStringstr;

str.Format("剩余地雷数:

%d",70-m_Flag);

m_Number.SetWindowText(str);

}

}

}

else

{

if(grid->m_IsShow==FALSE)

{

m_FlagRect[m_Flag]=grid->m_Rect;

m_FlagState[m_Flag++]=grid->m_State;

CStringstr;

str.Format("剩余地雷数:

%d",70-m_Flag);

m_Number.SetWindowText(str);

grid->m_State=ncFLAG;

grid->m_IsShow=TRUE;

if(IsWin())

{

KillTimer

(1);

MessageBox("你赢了");

if(MessageBox("是否继续新游戏?

","系统提示",MB_YESNO

|MB_ICONQUESTION)==IDYES)

{

OnButstart();

}

else

OnCancel();

}

}

}

Invalidate();

}

CDialog:

:

OnRButtonDown(nFlags,point);

}

关键技术:

在设计扫雷游戏时,现在对话框中绘制软件的背景位图,绘制的位图是以一个网格为单位的,然后在网格中随机布雷,并通过算法计算无雷网格中应该显示的数据。

如果当前网格周围的8个网格中没有地雷,则显示为空地,否则,周围的8个网格中有几个地雷则显示数字几,当用户翻开空地时,会自动翻开空地周围的数字,通过鼠标右键可以标记地雷,并可以取消地雷标记,用户胜利的条件是将所有得嘞都标记出来。

如果标记的地雷为止都是地雷的位置则游戏胜利,标记数和地雷数是相同的,所以当标记用完而游戏还没有结束时,说明标记的地雷有错误,这样扫雷游戏结束

5程序运行结果

程序运行结果如图

 

6总结体会不足

在课程设计的这段日子里,发现自己有很多的知识还没有掌握好,最先的时候,学习的都是一些基本的理论知识,觉得个人掌握的还是很好的。

应用后才发现缺点和不足。

在课程设计中间,出了很多错误,不是把引用弄错了,就是把代码写错地方了。

有时候,往往把写在数据层的代码,写到了逻辑层。

而在接口层的时候,却发现在其他地方没有定义。

点击运行的时候,错误一大片。

最后,只有重新开始,最后发现调用函数可以让程序层次清晰很多。

C#这么语言,是目前世界上非常流行的语言之一。

而我学习的只是处在一个入门的位置上。

我们需要在今后发更多的时间去了解这门功能强大的语言,之所以应用c#,也是让自己接触更多的编程语言。

学习并应用它。

让自己有更大的提高。

通过课程设计我发现编程能力要提高,方法很多,最重要的就是练习,可以认真学习教材上面的例题,最后把上面的代码自己写一遍,看看运行的结果和教材给出的结果是否一致。

要学会看代码,最好的方法就是看设计器中的代码。

通过实践找出一个很好的方法去调试程序,寻找并改正程序中错误。

参考文献

[1]karliWatson,hristianNagel编C#入门经典(第四版)清华大学出版社2008.12

[2]王小科、吕双编C#从入门到精通清华大学出版社2008.9

[3]宋学江、赵兰编C#轻松入门人民邮电出版社2009。

4

 

本科生课程设计成绩评定表

班级:

软件工程0703 姓名:

戚思敏 学号:

序号

评分项目

满分

实得分

1

学习态度认真、遵守纪律

10

2

设计分析合理性

10

3

设计方案正确性、可行性、创造性

20

4

设计结果正确性

40

5

设计报告的规范性

10

6

设计验收

10

总得分/等级

评语:

 

注:

最终成绩以五级分制记。

优(90-100分)、良(80-89分)、中(70-79分)、

及格(60-69分)、60分以下为不及格

 

                  指导教师签名:

                  2010年 月 日

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

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2