版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
扫雷游戏制作1扫雷游戏制作1一、分析扫雷游戏的基本功能1、从外观上分析:方块笑脸地雷数目显示计时器有雷标识无雷标识红旗显示胜利画面失败画面2一、分析扫雷游戏的基本功能1、从外观上分析:2一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止,并显示雷的数目。
3一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击点击鼠标右键于未知区域,则显示小红旗,将其置为有雷。在该位置再次点击右键则视为不确定,显示问号,点击第三次,取消设置,问号消失。4一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击如果该数字方块周围地雷已经完全标识出,双击该数字所在方块,将快速翻开所有周围不是地雷的方块,并显示,直到有雷为止。5一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击二、需求分析1、功能概述:按功能将游戏区域分成两个区域:雷区和提示区。提示区包括一个计数器和一个按键操作。游戏过程中,当玩家用鼠标点击相应的方块,程序就会作出相应的鼠标响应事件,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。6二、需求分析1、功能概述:6二、需求分析1、功能概述:游戏开始时,系统会在雷区的某些小方块中随机布下若干个地雷。安放好地雷的小方块称之为雷方块,其他的称之为非雷方块。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中有多少雷方块。玩家可以根据这些信息去判断是否可以打开某些方块,并把认为是地雷的方块打上标识。如果某个数字方块周围的地雷全都标记完,可以指向该方块并同时点击鼠标左右键,将其周围剩下的方块挖开。7二、需求分析1、功能概述:7二、需求分析1、功能概述:如果编号方块周围地雷没有全部标记,在同时点击鼠标左右键时,其他隐藏或未标记的方块将被按下一次(即闪烁一下)。当玩家将所有地雷找出后,其余的非雷方块区域都已打开,此时游戏胜利。在游戏过程中,一旦错误地打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数超过程序设定,虽然打开了全部其余方块,游戏仍然不会结束。8二、需求分析1、功能概述:8二、需求分析2、功能需求:(1)雷区上部左侧显示总雷数,并减去被标明有雷区域的数目。(2)雷区上部中间位置显示一按钮用于开局和显示鼠标动作的结果。(3)雷区上部右侧显示扫雷的时间。9二、需求分析2、功能需求:9二、需求分析2、功能需求:(4)将雷全部扫清后,则显示一对话框将你的姓名记入排行榜。以时间排序。(5)点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止,并显示周围雷的数目。10二、需求分析2、功能需求:10二、需求分析2、功能需求:(6)点击鼠标右键于未知区域,则显示小红旗,将其置为有雷。在该位置再次点击右键则视为不确定,显示问号,点击第三次,取消设置,问号消失。(7)如果该数字方块周围地雷已经完全标识出,双击该数字所在方块,将快速翻开所有周围不是地雷的方块,并显示,直到有雷为止。11二、需求分析2、功能需求:11二、需求分析3、功能模块:(1)游戏界面(2)布雷(3)鼠标事件(4)地雷判断(5)游戏胜利(6)游戏结束12二、需求分析3、功能模块:12二、需求分析3、功能模块:(7)游戏设置。(8)查看英雄榜,帮助。13二、需求分析3、功能模块:13三、总体设计1、游戏总体流程图用圆角矩形代表数据开始和结束。用矩形代表数据处理。用菱形代表判断。用带方向的箭头代表数据流向。14三、总体设计1、游戏总体流程图14三、总体设计游戏总体流程图15三、总体设计游戏总体流程图15三、总体设计1、游戏界面(1)提示区(2)雷区16三、总体设计1、游戏界面16三、总体设计2、游戏界面17三、总体设计2、游戏界面17三、总体设计2、布雷(1)算法的设计把整个雷区看成一个二维数组,a[i][j]周围的雷个数是由如下8个雷区决定的(如果超出边界,应该再加以判断):
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],在被展开时,检查周围的雷数是否与周围标示出来的雷数相等,如果相等则展开周围未标示的雷区。这样新的雷区展开又触发这个事件,就这样递归下去,一直蔓延到不可展开的雷区。18三、总体设计2、布雷18三、总体设计3、布雷(2)核心算法的实现整个游戏程序包含3个阶段:布雷、扫雷过程和结果(并不是操作结果展示,而是在扫雷过程中,玩家通过与游戏交互后的操作结果展示)。首先定义雷方块的数据结构,具体描述如下所示。struct{intnum;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/introundnum;/*统计格子周围有多少雷*/intflag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/}Mine[10][10];然后定义雷方块的状态类别和属性类别。19三、总体设计3、布雷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){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三、总体设计2、布雷randomize();/*初始化随机三、总体设计3、鼠标事件鼠标左击事件流程图(1)点击未知区域。(2)是地雷,游戏结束。(3)不是地雷,判断周围地雷数目是否为0,为0则显示空白格子,并拓展周围格子,不为0则显示地雷数。流程图说明:数据的起始和结束用圆角矩形数据的处理用矩形表示判断用菱形数据流向用带方向箭头表示21三、总体设计3、鼠标事件21鼠标左击事件流程图22鼠标左击事件流程图22空白格子拓展23空白格子拓展23(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)(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)(8,8)(8,9)(9,0)(9,1)(9,2)(9,3)(9,4)(9,5)(9,6)(9,7)(9,8)(9,9)11111100000000000001111100010110111121121211111010111111111111121111011222110011200111000024(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)(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)(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)(8,8)(8,9)(9,0)(9,1)(9,2)(9,3)(9,4)(9,5)(9,6)(9,7)(9,8)(9,9)111111000000000000011111000101101111211212111110101111111111111211110112221100112001110000i=3j=425(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)intShowWhite(inti,intj)/*显示无雷区的空白部分*/{if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就不对该格进行任何判断*/return;NmineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利*/if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*显示空格*/{DrawEmpty(i,j,1,7);Mine[i][j].num=0;}elseif(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;}26intShowWhite(inti,intj)/*显示/*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)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/*8个方向递归显示所有的空白格子*/27扫雷游戏制作28扫雷游戏制作1一、分析扫雷游戏的基本功能1、从外观上分析:方块笑脸地雷数目显示计时器有雷标识无雷标识红旗显示胜利画面失败画面29一、分析扫雷游戏的基本功能1、从外观上分析:2一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止,并显示雷的数目。
30一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击点击鼠标右键于未知区域,则显示小红旗,将其置为有雷。在该位置再次点击右键则视为不确定,显示问号,点击第三次,取消设置,问号消失。31一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击如果该数字方块周围地雷已经完全标识出,双击该数字所在方块,将快速翻开所有周围不是地雷的方块,并显示,直到有雷为止。32一、分析扫雷游戏的基本功能2、从操作上分析:鼠标单击右击双击二、需求分析1、功能概述:按功能将游戏区域分成两个区域:雷区和提示区。提示区包括一个计数器和一个按键操作。游戏过程中,当玩家用鼠标点击相应的方块,程序就会作出相应的鼠标响应事件,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。33二、需求分析1、功能概述:6二、需求分析1、功能概述:游戏开始时,系统会在雷区的某些小方块中随机布下若干个地雷。安放好地雷的小方块称之为雷方块,其他的称之为非雷方块。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中有多少雷方块。玩家可以根据这些信息去判断是否可以打开某些方块,并把认为是地雷的方块打上标识。如果某个数字方块周围的地雷全都标记完,可以指向该方块并同时点击鼠标左右键,将其周围剩下的方块挖开。34二、需求分析1、功能概述:7二、需求分析1、功能概述:如果编号方块周围地雷没有全部标记,在同时点击鼠标左右键时,其他隐藏或未标记的方块将被按下一次(即闪烁一下)。当玩家将所有地雷找出后,其余的非雷方块区域都已打开,此时游戏胜利。在游戏过程中,一旦错误地打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数超过程序设定,虽然打开了全部其余方块,游戏仍然不会结束。35二、需求分析1、功能概述:8二、需求分析2、功能需求:(1)雷区上部左侧显示总雷数,并减去被标明有雷区域的数目。(2)雷区上部中间位置显示一按钮用于开局和显示鼠标动作的结果。(3)雷区上部右侧显示扫雷的时间。36二、需求分析2、功能需求:9二、需求分析2、功能需求:(4)将雷全部扫清后,则显示一对话框将你的姓名记入排行榜。以时间排序。(5)点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止,并显示周围雷的数目。37二、需求分析2、功能需求:10二、需求分析2、功能需求:(6)点击鼠标右键于未知区域,则显示小红旗,将其置为有雷。在该位置再次点击右键则视为不确定,显示问号,点击第三次,取消设置,问号消失。(7)如果该数字方块周围地雷已经完全标识出,双击该数字所在方块,将快速翻开所有周围不是地雷的方块,并显示,直到有雷为止。38二、需求分析2、功能需求:11二、需求分析3、功能模块:(1)游戏界面(2)布雷(3)鼠标事件(4)地雷判断(5)游戏胜利(6)游戏结束39二、需求分析3、功能模块:12二、需求分析3、功能模块:(7)游戏设置。(8)查看英雄榜,帮助。40二、需求分析3、功能模块:13三、总体设计1、游戏总体流程图用圆角矩形代表数据开始和结束。用矩形代表数据处理。用菱形代表判断。用带方向的箭头代表数据流向。41三、总体设计1、游戏总体流程图14三、总体设计游戏总体流程图42三、总体设计游戏总体流程图15三、总体设计1、游戏界面(1)提示区(2)雷区43三、总体设计1、游戏界面16三、总体设计2、游戏界面44三、总体设计2、游戏界面17三、总体设计2、布雷(1)算法的设计把整个雷区看成一个二维数组,a[i][j]周围的雷个数是由如下8个雷区决定的(如果超出边界,应该再加以判断):
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],在被展开时,检查周围的雷数是否与周围标示出来的雷数相等,如果相等则展开周围未标示的雷区。这样新的雷区展开又触发这个事件,就这样递归下去,一直蔓延到不可展开的雷区。45三、总体设计2、布雷18三、总体设计3、布雷(2)核心算法的实现整个游戏程序包含3个阶段:布雷、扫雷过程和结果(并不是操作结果展示,而是在扫雷过程中,玩家通过与游戏交互后的操作结果展示)。首先定义雷方块的数据结构,具体描述如下所示。struct{intnum;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/introundnum;/*统计格子周围有多少雷*/intflag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/}Mine[10][10];然后定义雷方块的状态类别和属性类别。46三、总体设计3、布雷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){i=random(100)%10;j=random(100)%10;if(Mine[i][j].num!=1){Mine[i][j].num=1;mineNUM++;}if(mineNUM==10)break;}47三、总体设计2、布雷randomize();/*初始化随机三、总体设计3、鼠标事件鼠标左击事件流程图(1)点击未知区域。(2)是地雷,游戏结束。(3)不是地雷,判断周围地雷数目是否为0,为0则显示空白格子,并拓展周围格子,不为0则显示地雷数。流程图说明:数据的起始和结束用圆角矩形数据的处理用矩形表示判断用菱形数据流向用带方向箭头表示48三、总体设计3、鼠标事件21鼠标左击事件流程图49鼠标左击事件流程图22空白格子拓展50空白格子拓展23(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)(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)(8,8)(8,9)(9,0)(9,1)(9,2)(9,3)(9,4)(9,5)(9,6)(9,7)(9,8)(9,9)11111100000000000001111100010110111121121211111010111111111111121111011222110011200111000051(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)(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)(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)(8,8)(8,9)(9,0)(9,1)(9,2)(9,3)(9,4)(9,5)(9,6)(9,7)(9,8)(9,9)11111100000000000001111100010110111121121211111010111111111111121111011222
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年建材市场商铺租赁及品牌展示合同2篇
- 二零二五版A4一页纸环保印刷定制合同2篇
- 二零二五年度活动板房租赁合同(含消防设施及安全检查)3篇
- 二零二五版城市绿化带基站场地租赁与景观融合合同3篇
- 二零二五版办公室能源管理合同3篇
- 二零二五年度高性能1号不锈钢驳接爪批量采购供货合同2篇
- 二零二五版企业清算注销及员工安置及补偿及债务清理合同3篇
- 二零二五版金融资产抵押交易合同范本3篇
- 二零二五版古建筑修复工程劳务承包施工合同2篇
- 二零二五版钢材现货及期货交易合同示范文本3篇
- 2024质量管理理解、评价和改进组织的质量文化指南
- 手指外伤后护理查房
- 油气回收相关理论知识考试试题及答案
- 我能作业更细心(课件)-小学生主题班会二年级
- 2023年湖北省武汉市高考数学一模试卷及答案解析
- 城市轨道交通的网络安全与数据保护
- 英国足球文化课件
- 《行政职业能力测验》2023年公务员考试新疆维吾尔新疆生产建设兵团可克达拉市预测试题含解析
- 医院投诉案例分析及处理要点
- 烫伤的安全知识讲座
- 工程变更、工程量签证、结算以及零星项目预算程序实施细则(试行)
评论
0/150
提交评论