扫雷游戏制作ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9)
11
111 11 1 0
(9,0) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8) (9,9)
01 11 00 0 0 00
24
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9)
扫雷游戏制作
1
一、分析扫雷游戏的基本功能
• 1、从外观上分析: • 方块 • 笑脸 • 地雷数目显示 • 计时器 • 有雷标识 • 无雷标识 • 红旗显示 • 胜利画面 • 失败画面
2
一、分析扫雷游戏的基本功能
• 2、从操作上分析:
鼠标
单击 右击 双击
点击鼠标左键于未知
区域,如果未知区域有
雷,游戏停止,显示所
11 10 0 00 00 0
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9)
1
10 0 00 1 11
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9)
10 01 00 01
26
/*8个方向递归显示所有的空白格子*/
if(i!=0&&Mine[i-1][j].num!=1)
ShowWhite(i-1,j);
if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1)
ShowWhite(i-1,j+1);
if(j!=9&&Mine[i][j+1].num!=1)
1
11
21 111
(6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9)
11 11 22 211 0
(7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9)
011 1 1
2
10
11 10 0 00 00 0
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9)
1
10 0 00 1 11
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9)
10 01 00 01
去,一直蔓延到不可展开的雷区。
18
三、总体设计
• 3、布雷 • (2) 核心算法的实现 • 整个游戏程序包含3个阶段:布雷、扫雷过程和结果
(并不是操作结果展示,而是在扫雷过程中,玩家通 过与游戏交互后的操作结果展示)。 • 首先定义雷方块的数据结构,具体描述如下所示。 • struct • { int num;/*格子当前处于什么状态,1有雷,0已经显 示过数字或者空白格子*/ • int roundnum;/*统计格子周围有多少雷*/ • int flag;/*右键按下显示红旗的标志,0没有红旗标 志,1有红旗标志*/ • }Mine[10][10];然后定义雷方块的状态类别和属性类别。
1
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9)
01
1 0 11 11 2
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9)
11 1 2 1 2
11
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9)
14
三、总体设计
• 游戏总体流程图
15
三、总体设计
• 1、游戏界面 • (1)提示区 • (2)雷区
16
三、总体设计
• 2、游戏界面
17
三、总体设计
• 2、布雷
(1) 算法的设计
把整个雷区看成一个二维数组,a[i][j]周围的雷个数 是由如下8个雷区决定的(如果超出边界,应该再加 以判断):
{ DrawEmpty(i,j,1,7); Mine[i][j].num=0; }
else if(Mine[i][j].roundnum!=0)/*输出雷数*/
{ DrawEmpty(i,j,0,8); sprintf(randmineNUM,"%d",Mine[i][j].roundnum); setcolor(RED); outtextxy(195+j*20,95+i*20,randmineNUM); Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/ return ; }
有的地雷。如果没雷,
则显示周围雷数,如果
周围没雷,则再查看周
围八个区域是否有雷
直到有雷为止,并显
示雷的数目。
3
一、分析扫雷游戏的基本功能
• 2、从操作上分析:
鼠标
单击 右击 双击
点击鼠标右键于未知 区域,则显示小红旗, 将其置为有雷。在该 位置再次点击右键则 视为不确定,显示问 号,点击第三次,取 消设置,问号消失。
示空白格子,并拓展周围格子,不为0则显示地雷数。 • 流程图说明:数据的起始和结束用圆角矩形
数据的处理用矩形
表示判断用菱形
数据流向用带方向箭头表示
21
鼠标左击事件流程图
22
空白格子拓展
23
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9)
011 1 1
2
10
(8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9)
11
111 11 1 0
(9,0) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8) (9,9)
01 11 00 0 0 00
8
二、需求分析
2、功能需求: • (1)雷区上部左侧显示总雷数,并减去被
标明有雷区域的数目。 • (2)雷区上部中间位置显示一按钮用于开
局和显示鼠标动作的结果。 • (3)雷区上部右侧显示扫雷的时间。
9
二、需求分析
• 2、功能需求: • (4)将雷全部扫清后,则显示一对话框将你
的姓名记入排行榜。以时间排序。 • (5)点击鼠标左键于未知区域,如果未知区
4
一、分析扫雷游戏的基本功能
• 2、从操作上分析:
鼠标
单击 右击 双击
如果该数字方块周围 地雷已经完全标识出, 双击该数字所在方块, 将快速翻开所有周围 不是地雷的方块,并 显示,直到有雷为止。
5
二、需求分析
• 1、功能概述: • 按功能将游戏区域分成两个区域:雷区和
提示区。提示区包括一个计数器和一个按 键操作。游戏过程中,当玩家用鼠标点击 相应的方块,程序就会作出相应的鼠标响 应事件,而众多鼠标事件的处理,都是围 绕着实现扫雷程序的算法而衍生的。
25
int ShowWhite(int i,int j)/*显示无雷区的空白部分*/ { if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就
不对该格进行任何判断*/ return;
NmineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子 当所有格子都处理过了表示胜利*/ if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*显示空格*/
2பைடு நூலகம்
(5,3)
12
11
i=3 (5,4) (5,5) (5,6) (5,7) (5,8)
(5,9)
1
11
2 j=14 1 1 1
(6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9)
11 11 22 211 0
(7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9)
6
二、需求分析
• 1、功能概述: • 游戏开始时,系统会在雷区的某些小方块
中随机布下若干个地雷。安放好地雷的小 方块称之为雷方块,其他的称之为非雷方 块。部署完毕后,系统会在其他非雷方块 中填充一些数字。某一个具体数字表示与 其紧邻的8个方块中有多少雷方块。玩家可 以根据这些信息去判断是否可以打开某些 方块,并把认为是地雷的方块打上标识。 如果某个数字方块周围的地雷全都标记完, 可以指向该方块并同时点击鼠标左右键, 将其周围剩下的方块挖开。
ShowWhite(i,j+1);
if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)
ShowWhite(i+1,j+1);
if(i!=9&&Mine[i+1][j].num!=1)
ShowWhite(i+1,j);
if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)
ShowWhite(i+1,j-1);
if(j!=0&&Mine[i][j-1].num!=1)
ShowWhite(i,j-1);
if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)
ShowWhite(i-1,j-1);}
27
11
二、需求分析
• 3、功能模块: • (1)游戏界面 • (2)布雷 • (3)鼠标事件 • (4)地雷判断 • (5)游戏胜利 • (6)游戏结束
12
二、需求分析
• 3、功能模块: • (7)游戏设置。 • (8)查看英雄榜,帮助。
13
三、总体设计
• 1、游戏总体流程图 • 用圆角矩形代表数据开始和结束。 • 用矩形代表数据处理。 • 用菱形代表判断。 • 用带方向的箭头代表数据流向。
7
二、需求分析
• 1、功能概述: • 如果编号方块周围地雷没有全部标记,在
同时点击鼠标左右键时,其他隐藏或未标 记的方块将被按下一次(即闪烁一下)。 当玩家将所有地雷找出后,其余的非雷方 块区域都已打开,此时游戏胜利。在游戏 过程中,一旦错误地打开了雷方块则立即 失败,游戏结束;当玩家标识的地雷数超 过程序设定,虽然打开了全部其余方块, 游戏仍然不会结束。
a[i-1][j-1], a[i-1][j], a[i-1][j+1],
a[i][j-1],
a[i][j+1],
a[i+1][ j-1], a[i+1][j], a[i+1][j+1],
在被展开时,检查周围的雷数是否与周围标示出来
的雷数相等,如果相等则展开周围未标示的雷区。
这样新的雷区展开又触发这个事件,就这样递归下
19
三、总体设计
• 2、布雷 • (3) 布雷流程图
randomize(); /*初始化随机数发生器 */
for(i=0;i<=10;i++)
for(j=0;j<=10;j++)
{Mine[i][j].num=2;/*表示没有地雷*/
Mine[i][j].flag=0;}/*表示没红旗标志*/
while(1)
域有雷,游戏停止,显示所有的地雷。如果没 雷,则显示周围雷数,如果周围没雷,则再查看 周围八个区域是否有雷直到有雷为止,并 显示周围雷的数目。
10
二、需求分析
• 2、功能需求: • (6)点击鼠标右键于未知区域,则显示小红
旗,将其置为有雷。在该位置再次点击右 键则视为不确定,显示问号,点击第三次, 取消设置,问号消失。 • (7)如果该数字方块周围地雷已经完全标 识出,双击该数字所在方块,将快速翻开 所有周围不是地雷的方块,并显示,直到 有雷为止。
{ i=random(100)%10;
j=random(100)%10;
if(Mine[i][j].num!=1)
{Mine[i][j].num=1;
mineNUM++; }
if(mineNUM==10) break; }
20
三、总体设计
• 3、鼠标事件 • 鼠标左击事件流程图 • (1)点击未知区域。 • (2)是地雷,游戏结束。 • (3)不是地雷,判断周围地雷数目是否为0,为0则显
1
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9)
01
1 0 11 11 2
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9)
11
(5,0) (5,1)
1
(5,2)
相关文档
最新文档