7911浏览
查看: 7911|回复: 4

[项目分享] 用Mind+做扫雷游戏(初级)

[复制链接]
本帖最后由 ZeroQin 于 2021-3-24 11:05 编辑

一、项目简介:使用Mind+做一个初级扫雷游戏,模拟Windows自带的扫雷游戏,设计初级关卡。

二、需求分析
       游戏规则:一共5x5=25个格子,隐藏4颗雷。点击格子,如果格子有雷,则直接通关失败;如果无雷,则揭开格子,并在格子中用数字显示该格子周围一共有几颗雷。每找到一颗雷,则用红旗标记,当全部雷被标记找出,则通关成功;如果有雷未被找出,则通关失败。

       通关成功条件:4颗雷被全部找出并用红旗标记。
       通关失败条件:1、踩雷,即直接点击了有雷的格子;2、使用红旗标记完4颗雷后,游戏结束,自动判断标记的4个位置下是否有雷,如果都有雷,说明标记正确,宣布通关成功;如果有的标记下没有雷,说明有雷没有被找出,宣布通关失败。
       游戏结束条件:1、通关成功;2、通关失败。

三、项目编写
设计游戏界面如下:
FriMarch-202103193867..png
       通过上图,及结合需求分析,我们可以知道,整个项目必不可少的角色有:4个红旗、25个格子(有雷格子、无雷格子)、1个定时器、1个计雷器。

      (一)创建主要角色

       1、创建无雷格子
        直接在角色区使用画笔工具画一个正方形,由于格子有“未点开”和“已点开”另种状态,所以需要设计两个造型,如下:
         FriMarch-202103192579..png
        注意造型2里面的数字是最后再加上去的,因为现在并不确定有雷格的位置,因此就无法确定这个格子周围有几颗雷。
        2、创建有雷格子
         FriMarch-202103193440..png
        同样是两种状态,即两个造型,但第二个造型为炸弹造型,代表有雷。
        3、创建红旗:在网上下载一个png图片,上传上去,调整大小即可
         FriMarch-202103191741..png

       (二)编辑代码
        1、给无雷格子编辑代码
         分析:这个格子有两种被点击的情况。情况一:我要直接揭开格子,则点击后直接切换到造型2;情况二:我认为这个格子有雷,要标记这个格子,则我会先点击红旗,再点击格子,点击格子后要在格子上标记一个红旗。         针对情况二,怎么能够知道当前是否有先点击红旗呢?这就需要设置一个变量,用一个名为“准备标记”的变量来记录红旗的点击状态,如果点击了红旗,则把“准备标记”设置为1,这部分的代码在红旗的角色代码中实现。对于当前的格子角色来说,只需要在点击之前判断“准备标记”是否为1,若是,则设置“标记角色”为当前角色值,这是为了能够把当前角色的坐标传递给红旗角色,以达到在当前角色上标记红旗的目的;若“准备标记”不为1,则直接切换造型。
FriMarch-202103198702..png
        2、给有雷格子编码
        分析:和无雷格子一样,同样是直接点击和标记红旗两种情况。如果是直接点击,则踩雷,广播踩雷消息;如果“准备标记”为1,就将当前角色名赋值给“标记角色”,将“是否标记”设置为1(为了后面校验红旗标记是否正确),并将“正确标记数”设置为1(当“正确标记数”为4时,通关成功)。所有的有雷格子都会设置两个广播接收事件:当接收到“踩雷”时,就引爆自己;当接收到“所有雷已找出”(这个消息是玩家找出了所有雷,即4个红旗全部标记完时广播的),判断用户是否标记正确,通过校验“是否标记”这个变量来判断,如果标记正确,揭开格子即可,如果标记错误,则广播“踩雷”并引**弹。
WedMarch-202103249941..png
        3、给红旗编码
        分析:点击红旗之后,将“准备标记”设为1,并给红旗添加图形特效来表示当前是准备标记的状态,此时再点击格子,格子会将其角色名赋值给“标记角色”,因此如果“标记角色”不为0,即将红旗移动到格子上。移动之后,将“准备标记”和“标记角色”清零,将“剩余地雷”减去1(“剩余地雷”初始值为4,当其为0时,说明标记完成,会广播“所有雷已找出”,这部分代码在其他角色中实现)。
        这里有一个点是,将当前的红旗移到格子上后,红旗就没有了,那么玩家想要标记下一个格子怎么办呢?很简单,因为总共有4颗雷,需要标记的红旗也只需要4个,所以在同样的位置上放置4个一模一样的红旗即可。因此只需要将当前的红旗角色再复制3个即可(代码会跟着一起复制)。每个红旗被移动后,它的使命就完成了,因此移动后就停止“这个脚本”,这样才不会在其他红旗执行脚本时被影响,因为我们的“准备标记”变量是全局的。
WedMarch-202103243729..png
       4、创建一个“炸弹角色”,针对所有雷已经找出的情况编写代码
        分析:情况一:所有雷已找出(玩家标记完4个红旗),并且标记正确;情况二:所有雷已找出,但是有标记错误的雷,即有雷没有被正确标记。将“正确标记数”初始值设为0,将“剩余地雷”初始值设为4。炸弹角色显示在游戏页面的下方,用来显示剩余地雷数,初始值为4,玩家没标记一个格子,剩余地雷数减1,直到减为0,广播“所有雷已找出”;当接收到“所有雷已找出”时,校验“正确标记数”是否为4,若是,广播“闯关成功”,否则广播“游戏结束”。
WedMarch-202103243582..png    WedMarch-202103249210..png
       5、添加“游戏结束”角色,判断闯关状态,结束游戏
        分析:该角色两种状态,一种是闯关成功,一种是闯关失败,因此需要创建两个造型。游戏开始需要隐藏该角色,直到接收到广播消息,再根据情况显示角色造型。

WedMarch-202103248106..png WedMarch-202103242924..png       WedMarch-202103243910..png
        6、添加计时器角色进行计时
        分析:开始游戏时即开始计时,如果接收到“踩雷”,则停止计时。
WedMarch-202103241702..png
       7、复制有雷格子和无雷格子
        分析:初始设想是25个格子,其中21个无雷格,4个有雷格。因此只需要将有雷格再复制3个,无雷格再复制20个即可。每个格子的位置都是根据第一个格子来设置的,有雷格随意放置。还记得在创建无雷格角色时,没有给造型2加上数字吗?因为当时还没有确定有雷格的位置,即无法确定当前格子周围到底有几颗雷。现在已经放置好有雷格了,就可以数出来周围有几颗雷,将数字写到造型2上即可。
WedMarch-202103247460..png
四、思考改进
        在这个项目中,每颗雷都是我们手动去确定位置,也就是说,每次游戏的雷的位置是固定不变的,不能随机生成。那么怎样可以让这个雷每次游戏都在不同的位置呢?我们很容易就能想到随机数,但是如果雷的位置随机了,周围无雷格里造型2上的数字也要随机改变。对于每一个无雷格来说,就需要可以获取到周围格子的状态。所以这个问题的关键点在于,如何能够获取到无雷格周围八个格子的状态(是否有雷),并且根据这个状态信息来改变造型上的数字。
        这一点我还没有想到好的方法,欢迎各位大佬指点。
FriMarch-202103194802..png
WedMarch-202103249237..png

扫雷游戏.rar

765.33 KB, 下载次数: 880

本帖被以下淘专辑推荐:

转瞬  初级技师

发表于 2021-3-24 11:09:12

作品很不错,多了一个可以学习的作品
回复

使用道具 举报

rzyzzxw  版主

发表于 2021-3-24 19:02:23

很帅啊,这个项目
回复

使用道具 举报

QQQQQQQ  高级技师

发表于 2022-3-12 14:40:00

厉害厉害
回复

使用道具 举报

AAAAAA  见习技师

发表于 2022-3-12 23:44:21

马牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛逼
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail