查看if语句结果

时间:2015-04-17 16:44:38

标签: c# debugging if-statement helper

我正在为我的回合制策略游戏创建AI,我的想法就是棋子中的棋子和那些瓦片可以包含单位。

在我的班级中,我会保留一份敌方单位列表,并希望根据他们的“威胁级别”对其进行排序。

    /// <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 是已经覆盖敌方单位所在道路的单位(应该是一个列表,但我们),所以如果这个对象有一个 CoverUnit 其他对象不会,其他对象应具有优先级,因为它需要生成一个单元来覆盖该通道。 / p>

它一直给我调试消息,但我不能用Unity调试它。

所以我的问题是:

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

提前致谢。

EDIT1:@paqogomez建议的改述:

我在CompareTo函数中缺少什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

你会发现这两个都返回false或者两者都返回true,否则你根本就不会打你的调试信息。

我猜猜你的WhoWouldWin方法的逻辑存在错误。我不确定您是否应该将单位与CoveringUnit进行比较,因为我不完全了解您的域名。

答案 1 :(得分:0)

我通过重新安装UnityVS让Visual Studio调试再次运行。

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

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

找到它:)