查看 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)
找到了:)
我正在为我的回合制策略游戏创建 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)
找到了:)