首页 > 其他分享 >31. 出牌能量判断

31. 出牌能量判断

时间:2024-03-07 09:55:31浏览次数:21  
标签:判断 playerMana 31 卡牌 玩家 回合 能量 public

本节目标

当玩家出牌的时候会扣除能量,当能量不够的时候不能出牌。每个玩家回合开始的时候恢复能量。

代码实现

玩家身上的能量

首先创建一个IntVariable来表示玩家当前的能量,其中该值发生变化的时候会产生PlayerManaChangedEvent事件

然后再写代码,使用这个IntVariable变量

using UnityEngine;

public class Player : CharacterBase
{
    public IntVariable playerMana;
    public int maxMana;

    public int CurrentMana 
    {
        get => playerMana.currentValue;
        set => playerMana.SetValue(value);
    }

    private void OnEnable() 
    {
        playerMana.maxValue = maxMana;
        CurrentMana = playerMana.maxValue; 
    }

    /// <summary>
    /// 监听事件函数
    /// </summary>
    public void newTurn()
    {
        CurrentMana = maxMana;
    }

    public void UpdateMana(int cost)
    {
        CurrentMana -= cost;
        if (CurrentMana <= 0)
        {
            CurrentMana = 0;
        }
    }
}

如上面代码所示,我们在玩家身上增加了一个最大能量,以及当前能量。在OnEnable的时候赋值最大能量

然后监听PlayerTurnBegin事件,当它发生的时候调用Player.newTurn开始新的回合,也就是说将当前mana值设置为最大mana值

然后监听CostEvent事件,当它发生的时候调用Player.UpdateMana,从当前的Mana值扣去CostEvent传递的Mana值。当玩家当前的Mana值发生变化的时候,就会触发playerMana.ValueChangeEvent

GameplayPanel 监听事件

GameplayPanel 需要监听两类事件,它们分别是EnemyTurnBeginPlayerTurnBegin这一类,以及PlayerManaChangedEvent这一类

EnemyTurnBeginPlayerTurnBegin事件产生的时候,分别会进入敌人和玩家的回合。敌人回合时,结束回合按钮是不能点击的,上方的标签要显示红色的敌方回合文字。玩家回合时,结束回合按钮是可以点击的,上方的标签要显示白色的玩家回合文字。

PlayerManaChangedEvent事件产生的时候,就会把当前界面上的数字显示为传过来的Mana数值

打出卡牌的时候要消耗能量

需要定义一个CostEvent

当卡牌被打出的时候,需要广播消耗的能量

Player 会监听这个CostEvent,然后执行扣能量操作

判断卡牌能否被打出

CardDeck 每次抽卡和弃卡之后,都会执行SetCardLayout,因此我们可以在这个方法里面修改每张卡牌的状态

Card 里面需要添加一下这个方法,当前是否可用的条件是cardData.cost <= player.CurrentMana,可用时标为绿色,不可用时标为红色

然后在CardDragHandler里面,判断一下当前卡牌是否可用,如果不可用,那么就不能进行拖拽操作

最终效果

开始游戏,在TurnBaseManager上面点击GameStart

然后可以看到卡牌的数字都是绿色的

当能量不够的时候,卡牌上面的数字就变成红色了,并且也不能被打出了

回合结束之后,能量回到3点

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240307_0916

标签:判断,playerMana,31,卡牌,玩家,回合,能量,public
From: https://www.cnblogs.com/hellozjf/p/18058229

相关文章

  • 能量
    一、能量定义:一个物体能对其他物体做功,我们就说这个物体具有能量势能:(1)重力势能(2)弹性势能(1)重力势能定义:物体处于某一高度具有的势能决定因素:质量,高度1.当质量相同时,高度越高,重力势能越大2.当高度相同时,质量越大,重力势能越大(2)弹性势能定义:发生弹性形变而具有的势能决定因......
  • Codeforces Round 931div2补题
    B.YetAnotherCoinProblem真[https://www.bilibili.com/video/BV1o2421M7pV/]不同硬币之间有倍数关系,使得一定数量后的小硬币可以被大硬币替代达到最优方案,而每个小硬币在最优下有可能的数量如下,进行枚举后找到最优方案。1:不多于2个(3个1会被3替代)3:不多于一个(2个3......
  • (面试题1)看程序写结果(先判断有没有问题,如果没有,写出结果)
    面试题:1:看程序写结果(先判断有没有问题,如果没有,写出结果)packagecom.shujia.面试题;classFu{publicvoidshow(){System.out.println("fushow");}}classZiextendsFu{publicvoidshow(){System.out.println("zishow"......
  • (面试题2)看程序写结果(先判断有没有问题,如果没有,写出结果)
    2:看程序写结果(先判断有没有问题,如果没有,写出结果)packagecom.shujia.面试题;/*2:看程序写结果(先判断有没有问题,如果没有,写出结果)*/classA{publicvoidshow(){show2();}publicvoidshow2(){System.out.println("我");......
  • 基础设置之——条件判断(二)
    A:=[1,2,1,3,1,4,2,5,4,6]B:=[1,3,3,3,4,4,2,2,6,6]C:=['x','y','xyz','yyy','z']**Part1*显示元素元组比较。*可以比较两个相同长度的元组,也可以将一个元组与单个值进行比较。以下行显示*a)HDevelop语言语法([==]、[<]等)*b)HALCON运算符语法(tuple_equal_e......
  • 3121008942
    1.软件工程第一次作业这个作业属于哪个课程2021软件工程这个作业要求在哪里<作业要求的链接>这个作业的目标<写上具体方面>其他参考文献.....目录1.软件工程第一次作业2.评估当前的自己2.1个人信息2.2当前值2.2.1专业水平个人爱好的作品3.展望未来3.1阅......
  • 【C++】判断一颗二叉树是否对称
    四步法:(1)如果两个子树都为空指针,则它们相等或对称(2)如果两个子树只有一个为空指针,则它们不相等或不对称(3)如果两个子树根节点的值不相等,则它们不相等或不对称(4)根据相等或对称要求,进行递归处理。//四步法判断一颗二叉树是否对称//主函数boolisSymmetric(TreeNode*root){......
  • AT_abc331_f [ABC331F] Palindrome Query 题解
    分析线段树。每个节点维护两个值:$s[l\dotsr]$和$s[r\dotsl]$。判断字串是否是回文直接就是询问的答案维护出来的两个值是否相同。首先想到用线段树暴力维护。第一个值很显然是两个儿子的第一个值加起来,第二个值是反着加起来。得到很酷的代码:ilvoidup(intnow){ tr[now......
  • 313
    3.2今天去学校。这天早上六点多起来,吃早餐。蛋炒饭的说,本以为会是还有其他菜,没想到就只是蛋炒饭而已。不过也没事了。早上八点的车,差点赶不及,好险。还是舍不得家啊。下午一点多就到了广州海珠区,乘公交两点也就到学校了。这天大概也就是这样了。稍微有点意思的是,乘坐广州公......
  • sql注入--基础注入判断方法(构造闭合)
    在我们拿到一个sql注入的题目之后,在确定了注入点之后,接下来要做的事情就是进行基础注入判断。在开始前,我们需要理解一个SQL注入中最常用的词汇——构造闭合。对于SQL处理语句后台的写法:SELECTusername,passwordFROMusersWHEREid=?这里的问号可以有多种的闭合方式,......