收藏 分享(赏)

扫雷游戏制作.ppt

上传人:HR专家 文档编号:6539244 上传时间:2019-04-16 格式:PPT 页数:27 大小:315KB
下载 相关 举报
扫雷游戏制作.ppt_第1页
第1页 / 共27页
扫雷游戏制作.ppt_第2页
第2页 / 共27页
扫雷游戏制作.ppt_第3页
第3页 / 共27页
扫雷游戏制作.ppt_第4页
第4页 / 共27页
扫雷游戏制作.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、扫雷游戏制作 一、分析扫雷游戏的基本功能 1、从外观上分析: 方块 笑脸 地雷数目显示 计时器 有雷标识 无雷标识 红旗显示 胜利画面 失败画面 一、分析扫雷游戏的基本功能 2、从操作上分析: 鼠标 单击 右击 双击 点击鼠标左键于未知区域 ,如果未知区域有雷 ,游戏停止 ,显示所有的地雷。如果没雷 ,则显示周围雷数 ,如果周围没雷 ,则再查看周围八个区域是否有雷直到有雷为止,并显示雷的数目。 一、分析扫雷游戏的基本功能 2、从操作上分析: 鼠标 单击 右击 双击 点击鼠标右键于未知区域 ,则显示小红旗,将其置为有雷。在该位置再次点击右键则视为不确定,显示问号,点击第三次,取消设置,问号消失。

2、 一、分析扫雷游戏的基本功能 2、从操作上分析: 鼠标 单击 右击 双击 如果该数字方块周围地雷已经完全标识出,双击该数字所在方块,将快速翻开所有周围不是地雷的方块,并显示,直到有雷为止。 二、需求分析 1、功能概述: 按功能将游戏区域分成两个区域:雷区和提示区。提示区包括一个计数器和一个按键操作。游戏过程中,当玩家用鼠标点击相应的方块,程序就会作出相应的鼠标响应事件,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。 二、需求分析 1、功能概述: 游戏开始时 , 系统会在雷区的某些小方块中随机布下若干个地雷 。 安放好地雷的小方块称之为雷方块 , 其他的称之为非雷方块 。 部署完毕

3、后 , 系统会在其他非雷方块中填充一些数字 。 某一个具体数字表示与其紧邻的 8个方块中有多少雷方块 。 玩家可以根据这些信息去判断是否可以打开某些方块 , 并把认为是地雷的方块打上标识 。如果某个数字方块周围的地雷全都标记完 ,可以指向该方块并同时点击鼠标左右键 ,将其周围剩下的方块挖开 。 二、需求分析 1、 功能概述: 如果编号方块周围地雷没有全部标记 , 在同时点击鼠标左右键时 , 其他隐藏或未标记的方块将被按下一次 ( 即闪烁一下 ) 。当玩家将所有地雷找出后 , 其余的非雷方块区域都已打开 , 此时游戏胜利 。 在游戏过程中 , 一旦错误地打开了雷方块则立即失败 , 游戏结束;当玩

4、家标识的地雷数超过程序设定 , 虽然打开了全部其余方块 ,游戏仍然不会结束 。 二、需求分析 2、功能需求: ( 1)雷区上部左侧显示总雷数,并减去被标明有雷区域的数目。 ( 2)雷区上部中间位置显示一按钮用于开局和显示鼠标动作的结果。 ( 3)雷区上部右侧显示扫雷的时间。 二、需求分析 2、功能需求: ( 4)将雷全部扫清后 ,则显示一对话框将你的姓名记入排行榜。以时间排序。 ( 5)点击鼠标左键于未知区域 ,如果未知区域有雷 ,游戏停止 ,显示所有的地雷。如果没雷 ,则显示周围雷数 ,如果周围没雷 ,则再查看周围八个区域是否有雷直到有雷为止,并显示周围雷的数目。 二、需求分析 2、功能需求

5、: ( 6)点击鼠标右键于未知区域 ,则显示小红旗,将其置为有雷。在该位置再次点击右键则视为不确定,显示问号,点击第三次,取消设置,问号消失。 ( 7)如果该数字方块周围地雷已经完全标识出,双击该数字所在方块,将快速翻开所有周围不是地雷的方块,并显示,直到有雷为止。 二、需求分析 3、功能模块: ( 1)游戏界面 ( 2)布雷 ( 3)鼠标事件 ( 4)地雷判断 ( 5)游戏胜利 ( 6)游戏结束 二、需求分析 3、功能模块: ( 7)游戏设置。 ( 8)查看英雄榜,帮助。 三、总体设计 1、游戏总体流程图 用圆角矩形代表数据开始和结束。 用矩形代表数据处理。 用菱形代表判断。 用带方向的箭头

6、代表数据流向。 三、总体设计 游戏总体流程图 三、总体设计 1、游戏界面 ( 1)提示区 ( 2)雷区 三、总体设计 2、游戏界面 三、总体设计 2、布雷 ( 1) 算法的设计 把整个雷区看成一个二维数组, aij周围的雷个数是由如下 8个雷区决定的 (如果超出边界,应该再加以判断 ): ai-1j-1, ai-1j, ai-1j+1, aij-1, aij+1, ai+1 j-1, ai+1j, ai+1j+1, 在被展开时,检查周围的雷数是否与周围标示出来的雷数相等,如果相等则展开周围未标示的雷区。这样新的雷区展开又触发这个事件,就这样递归下去,一直蔓延到不可展开的雷区。 三、总体设计 3

7、、布雷 ( 2) 核心算法的实现 整个游戏程序包含 3个阶段:布雷、扫雷过程和结果(并不是操作结果展示,而是在扫雷过程中,玩家通过与游戏交互后的操作结果展示)。 首先定义雷方块的数据结构,具体描述如下所示。 struct int num;/*格子当前处于什么状态 ,1有雷, 0已经显示过数字或者空白格子 */ int roundnum;/*统计格子周围有多少雷 */ int flag;/*右键按下显示红旗的标志 ,0没有红旗标志 ,1有红旗标志 */ Mine1010;然后定义雷方块的状态类别和属性类别。 三、总体设计 2、布雷 ( 3) 布雷流程图 randomize(); /*初始化随机数

8、发生器 */ for(i=0;i=10;i+) for(j=0;j=10;j+) Mineij.num=2;/*表示没有地雷 */ Mineij.flag=0;/*表示没红旗标志 */ while(1) i=random(100)%10; j=random(100)%10; if(Mineij.num!=1) Mineij.num=1; mineNUM+; if(mineNUM=10) break; 三、总体设计 3、鼠标事件 鼠标左击事件流程图 ( 1)点击未知区域。 ( 2)是地雷,游戏结束。 ( 3)不是地雷,判断周围地雷数目是否为 0,为 0则显示空白格子,并拓展周围格子,不为 0则显

9、示地雷数。 流程图说明:数据的起始和结束用圆角矩形 数据的处理用矩形 表示判断用菱形 数据流向用带方向箭头表示 鼠标左击事件流程图 空白格子拓展 (0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9) (1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7)

10、 (3,8) (3,9) (4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9) (6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9) (7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9) (8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7)

11、 (8,8) (8,9) (9,0) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8) (9,9) 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 0 1 1 0 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 0 1 1 2 2 2 1 1 0 0 1 1 2 0 0 1 1 1 0 0 0 0 (0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7)

12、 (0,8) (0,9) (1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7)

13、 (5,8) (5,9) (6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9) (7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9) (8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9) (9,0) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8) (9,9) 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1

14、 0 0 0 1 0 1 1 0 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 0 1 1 2 2 2 1 1 0 0 1 1 2 0 0 1 1 1 0 0 0 0 i=3 j=4 int ShowWhite(int i,int j)/*显示无雷区的空白部分 */ if(Mineij.flag=1|Mineij.num=0)/*如果有红旗或该格处理过就不对该格进行任何判断 */ return; NmineNUM-;/*显示过数字或者空格的格子就表示多处理了一个格子 ,当所有格子都处理过了表示胜利

15、 */ if(Mineij.roundnum=0 Mineij.num=0; else if(Mineij.roundnum!=0)/*输出雷数 */ DrawEmpty(i,j,0,8); sprintf(randmineNUM,“%d“,Mineij.roundnum); setcolor(RED); outtextxy(195+j*20,95+i*20,randmineNUM); Mineij.num=0;/*已经输出雷数的格子用 0表示已经用过这个格子 */ return ; /*8个方向递归显示所有的空白格子 */ if(i!=0 if(i!=0 if(j!=9 if(j!=9 if(i!=9 if(i!=9 if(j!=0 if(i!=0

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报