- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(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
1
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9)
方块,并把认为是地雷的方块打上标识。
如果某个数字方块周围的地雷全都标记完,
可以指向该方块并同时点击鼠标左右键,
将其周围剩下的方块挖开。
ppt课件
7
二、需求分析
• 1、功能概述: • 如果编号方块周围地雷没有全部标记,在
同时点击鼠标左右键时,其他隐藏或未标 记的方块将被按下一次(即闪烁一下)。 当玩家将所有地雷找出后,其余的非雷方 块区域都已打开,此时游戏胜利。在游戏 过程中,一旦错误地打开了雷方块则立即 失败,游戏结束;当玩家标识的地雷数超 过程序设定,虽然打开了全部其余方块, 游戏仍然不会结束。
{Mine[i][j].num=1;
mineNUM++; }
if(mineNUM==10) break; }ppt课件
20
三、总体设计
• 3、鼠标事件 • 鼠标左击事件流程图 • (1)点击未知区域。 • (2)是地雷,游戏结束。 • (3)不是地雷,判断周围地雷数目是否为0,为0则显
示空白格子,并拓展周围格子,不为0则显示地雷数。 • 流程图说明:数据的起始和结束用圆角矩形
• (7)如果该数字方块周围地雷已经完全标 识出,双击该数字所在方块,将快速翻开 所有周围不是地雷的方块,并显示,直到 有雷为止。
ppt课件
11
二、需求分析
• 3、功能模块: • (1)游戏界面 • (2)布雷 • (3)鼠标事件 • (4)地雷判断 • (5)游戏胜利 • (6)游戏结束
ppt课件
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
ppt课件
25
int ShowWhite(int i,int j)/*显示无雷区的空白部分*/
{ if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就 不对该格进行任何判断*/
(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)
1
11
21 111
(6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9)
a[i][j-1],
a[i][j+1],
a[i+1][ j-1], a[i+1][j], a[i+1][j+1],
在被展开时,检查周围的雷数是否与周围标示出来
的雷数相等,如果相等则展开周围未标示的雷区。
这样新的雷区展开又触发这个事件,就这样递归下
去,一直蔓延到不可展开的雷区。
ppt课件
18
三、总体设计
• int roundnum;/*统计格子周围有多少雷*/
• int flag;/*右键按下显示红旗的标志,0没有红旗标 志,1有红旗标志*/
• }Mine[10][10];然后定义雷方块的状态类别和属性类别。
ppt课件
19
三、总体设计
• 2、布雷 • (3) 布雷流程图
randomize(); /*初始化随机数发生器 */
return;
NmineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子 当所有格子都处理过了表示胜利*/
if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*显示空格*/
{ DrawEmpty(i,j,1,7);
Mine[i][j].num=0; }
for(i=0;i<=10;i++)
for(j=0;j<=10;j++)
{Mine[i][j].num=2;/*表示没有地雷*/
Mine[i][j].flag=0;}/*表示没红旗标志*/
while(1)
{ i=random(100)%10;
j=random(100)%10;
if(Mine[i][j].num!=1)
4
一、分析扫雷游戏的基本功能
• 2、从操作上分析:
鼠标
单击 右击 双击
如果该数字方块周围 地雷已经完全标识出, 双击该数字所在方块, 将快速翻开所有周围 不是地雷的方块,并 显示,直到有雷为止。
ppt课件
5
二、需求分析
• 1、功能概述: • 按功能将游戏区域分成两个区域:雷区和
提示区。提示区包括一个计数器和一个按 键操作。游戏过程中,当玩家用鼠标点击 相应的方块,程序就会作出相应的鼠标响 应事件,而众多鼠标事件的处理,都是围 绕着实现扫雷程序的算法而衍生的。
• 3、布雷
• (2) 核心算法的实现
• 整个游戏程序包含3个阶段:布雷、扫雷过程和结果 (并不是操作结果展示,而是在扫雷过程中,玩家通 过与游戏交互后的操作结果展示)。
• 首先定义雷方块的数据结构,具体描述如下所示。
• struct
• { int num;/*格子当前处于什么状态,1有雷,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);
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
(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
数据的处理用矩形
表示判断用菱形
数据流向用pp带t课件方向箭头表课件
22
空白格子拓展
ppt课件
23
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9)
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)
扫雷游戏制作
ppt课件
1
一、分析扫雷游戏的基本功能
• 1、从外观上分析: • 方块 • 笑脸 • 地雷数目显示 • 计时器 • 有雷标识 • 无雷标识 • 红旗显示 • 胜利画面 • 失败画面
ppt课件
2
一、分析扫雷游戏的基本功能
• 2、从操作上分析:
鼠标
单击 右击 双击
ppt课件
点击鼠标左键于未知
ppt课件
8
二、需求分析
2、功能需求: • (1)雷区上部左侧显示总雷数,并减去被
标明有雷区域的数目。 • (2)雷区上部中间位置显示一按钮用于开
局和显示鼠标动作的结果。 • (3)雷区上部右侧显示扫雷的时间。
ppt课件
9
二、需求分析
• 2、功能需求:
• (4)将雷全部扫清后,则显示一对话框将你 的姓名记入排行榜。以时间排序。
• (5)点击鼠标左键于未知区域,如果未知区 域有雷,游戏停止,显示所有的地雷。如果没 雷,则显示周围雷数,如果周围没雷,则再查看 周围八个区域是否有雷直到有雷为止,并 显示周围雷的数目。
ppt课件
10
二、需求分析
• 2、功能需求:
• (6)点击鼠标右键于未知区域,则显示小红 旗,将其置为有雷。在该位置再次点击右 键则视为不确定,显示问号,点击第三次, 取消设置,问号消失。
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)
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
区域,如果未知区域有
雷,游戏停止,显示所
有的地雷。如果没雷,
则显示周围雷数,如果
周围没雷,则再查看周
围八个区域是否有雷
直到有雷为止,并显
示雷的数目。
3
一、分析扫雷游戏的基本功能
• 2、从操作上分析:
鼠标
单击 右击 双击
ppt课件
点击鼠标右键于未知 区域,则显示小红旗, 将其置为有雷。在该 位置再次点击右键则 视为不确定,显示问 号,点击第三次,取 消设置,问号消失。
ppt课件
6
二、需求分析
• 1、功能概述: