查看 if 语句结果

Viewing if statements results

我正在为我的回合制策略游戏创建 AI,我的想法是象国际象棋一样有方块,而那些 方块 可以包含单位。

在我的 class 中,我保留了一份敌方单位列表,并希望根据它们的“威胁等级”对它们进行排序。

    /// <summary>
    /// Enemy unit
    /// </summary>
    public Unit Unit { get; private set; }
    /// <summary>
    /// Distance towards other side of the board / victory
    /// </summary>
    public float Distance { get; private set; }
    /// <summary>
    /// Allied Unit covering the lane
    /// </summary>
    public Unit CoveringUnit { get; set; }

但是我的 if 语句有点吃力:

 public int CompareTo(AiEnemyUnit pOther)
    {
        if (CoveringUnit == null && pOther.CoveringUnit == null)
            return Distance.CompareTo(pOther.Distance);
        if (CoveringUnit != null && pOther.CoveringUnit == null)
            return 1;
        if (CoveringUnit == null && pOther.CoveringUnit != null)
            return -1;
        // coverunits are both not null
        Unit lvWinningUnit = GameManager.Instance.WhoWouldWin(this.Unit, this.CoveringUnit);
        Unit lvWinningOtherUnit = GameManager.Instance.WhoWouldWin(pOther.Unit, pOther.CoveringUnit);
        if ((lvWinningUnit == null && lvWinningOtherUnit == null) ||
            lvWinningUnit == this.Unit && lvWinningOtherUnit == pOther.Unit)
            return Distance.CompareTo(pOther.Distance);
        if (lvWinningUnit == this.CoveringUnit && lvWinningOtherUnit != pOther.CoveringUnit)
            return -1;
        if (lvWinningUnit != this.CoveringUnit && lvWinningOtherUnit == pOther.CoveringUnit)
            return 1;
        Debug.Log("CompareTo AiEnemyUnit couldn't compare??");
        return Distance.CompareTo(pOther.Distance);
    }

CoveringUnit 是已经覆盖敌方单位所在车道的单位(应该是一个列表,但 w.e。),所以如果 这个对象有一个CoverUnit其他对象则没有其他 对象应该有优先权,因为它需要生成一个单位来覆盖那条车道。

它一直给我调试消息,但我无法用 Unity 调试它。

所以我的问题是:

是否有工具或在线网站可以帮助使用 if 语句来查看我缺少的内容?

提前致谢。

EDIT1:@paqogomez 建议改写:

我的 CompareTo 函数缺少什么?

如果没有适当的 IDE 支持调试,您将不得不完全按照您已经开始的方式进行调试。

在您的调试消息中,打印出您在上面的 if 语句中使用的一些变量以确定它们的实际值。

Debug.Log("CoveringUnit Won: " + lvWinningUnit == this.CoveringUnit)
Debug.Log("Other CoveringUnit Won: " + lvWinningOtherUnit == pOther.CoveringUnit)

您会发现这两个 return 都为假或两个 return 为真,否则您根本不会遇到调试消息。

我猜你的 WhoWouldWin 方法的逻辑有问题。我也不确定您是否应该将 Unit 与 CoveringUnit 进行比较,因为我并不完全了解您的领域。

我通过重新安装 UnityVS 使 Visual Studio 调试再次工作。

if ((lvWinningUnit == null && lvWinningOtherUnit == null) ||
                lvWinningUnit == this.Unit && lvWinningOtherUnit == pOther.Unit ||
                lvWinningUnit == this.CoveringUnit && lvWinningOtherUnit == pOther.CoveringUnit)

必须添加:|| lvWinningUnit == this.CoveringUnit && lvWinningOtherUnit == pOther.CoveringUnit)

找到了:)