【unity】10.胜利判定

上一篇:【unity】9.右键单击添加旗子(Button Right Click事件)


添加flag相关判定

在上一节中我们添加了右键点击增加旗子功能,测试发现右键单击已经开过的格子也会将其变为有旗子的样子,猜想按钮上的listener并不会判断按钮是否处于enable状态,因此对GameLogic中的SetFlag函数做如下修改:

    public void SetFlag(GameObject _button)
    {
        MinesweeperButton _mineSweeperButton = _button.GetComponent<MinesweeperButton>();
        int _row = _mineSweeperButton.GetRow();
        int _col = _mineSweeperButton.GetCol();
        //如果按钮是enable状态,才能右键设立旗子
        if (_button.GetComponent<Button>().enabled)
        {
            _mineSweeperButton.SetHasFlag(!_mineSweeperButton.GetHasFlag());
            if (_mineSweeperButton.GetHasFlag())
            {
                _button.GetComponent<Image>().sprite = flagImage;
            }
            else
            {
                _button.GetComponent<Image>().sprite = noFlagImage;
            }
        }
    }

同时测试发现DFS在遇到旗子时会显示旗子底下的数字,对DFS函数也做对应修改,遇到旗子直接return


    void DFSMine(int _row, int _col)
    {
    	//前略
    	//如果DFS搜到的格子有旗子了,直接return
        if (_button.GetComponent<MinesweeperButton>().GetHasFlag() == true) { return; }
        //后略
    }

胜利判定

我们规定未开格子剩余数量小于等于雷数量时判定胜利。注意到开过的格子enable都为false,因此计算enable为true的格子数量


	//定义当前剩余空格子数
    int enableNum;
    
    void InitMines()
    {
        //前略
        //初始化空格子数为总数
        enableNum = maxRow * maxCol;
    }
    
    void DFSMine(int _row, int _col)
    {
    	//前略
        _button.GetComponent<Button>().enabled = false;
        //按钮的enabled改为false时将剩余空格子数-1
        enableNum = enableNum - 1;
		//后略
    }
    
    public void ClickMine(GameObject _button)
    {
        int _row = _button.GetComponent<MinesweeperButton>().GetRow();
        int _col = _button.GetComponent<MinesweeperButton>().GetCol();
        if (_button.GetComponent<MinesweeperButton>().GetHasFlag() == false)
        {
            if (bombList.Contains(_row * maxCol + _col))
            {
                _button.GetComponent<Image>().color = Color.red;
                _button.GetComponent<Button>().enabled = false;
                //点击到雷时,标记为失败,表现后面加
                Debug.Log("You Lose!");
            }
            else
            {
                DFSMine(_row, _col);
                //DFS结束时如果剩余空格子小于等于总雷数,标记为胜利。表现后面加
                if (enableNum <= maxBomb)
                {
                    Debug.Log("You win!");
                }
            }
        }
    }

运行结果

在这里插入图片描述
在这里插入图片描述


下一篇:【unity】11.胜利失败界面

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在五花八门的游戏分类中,益智游戏是不可或缺的一大板块;而在益智游戏这个分类中,消除合成类游戏又是当之无愧的No.1。从考古级别的《俄罗斯方块》到现在风靡全国的《开心消消乐》,消除合成类游戏经久不衰,并且不断地涌现出新的经典作品,带给我们新的启发和乐趣。作为Unity3D的初级开发者,从头到尾独立完成一款简单的2D棋盘消除合成小游戏是你初级实战的最好选择。既能全面而详细的检验你的基础框架能力、C#编程能力、UGUI适配技巧,又可以在此基础上,较为深入的学习协程方法、DoTween插件和消除合成类的核心算法,一举数得。一言以蔽之,消除合成类游戏不难,但要写好却并不容易。它琐碎的功能逻辑、层出不穷的延时操作以及复杂的状态控制很容易让人顾此失彼,手忙脚乱,最后的结果往往是,费劲九牛二虎之力把功能实现好了,但代码已经乱成一团糟,定位Bug难、扩展新功能难,甚至自己读起来也难。本课程的最大目的,就是帮初级开发者梳理逻辑,写出规范而有条理的代码,避免陷入以上尴尬境地。条理捋清楚了,你就会觉得一切似乎变得简单了,很多地方都会顺理成章。本课程没有什么高深的编程技巧,更没有炫酷的视觉效果,只是一步一步教你如何踏踏实实、稳稳当当的完成一款《简单消消乐》。因此,资深大牛你就别进了,想学高深知识的你就别点了,自认为消除小case、分分钟搞定的高手你也趁早走人。在这门课程里,你能够学到的,只有以下几点:1、如何使用UGUI搭建棋盘游戏的基础阵列;2、如何快速的实现通用的三消逻辑;3、如何使用Dotween插件实现物体的位移、缩放、旋转动画;4、如何熟练的使用协程方法完成延时操作逻辑;5、数组、集合、引用类型、Prefab等基础知识的巩固;6、如何写出规范而有条理的代码;7、益智小游戏的通用模板。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值