2015-04-17 106 views
1

我正在爲我的Turn Based Strategy遊戲創建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其他對象沒有那麼其他對象建議立即進行刪除d有優先權,因爲它需要產生一個單位來覆蓋那條車道。

它不斷給我調試消息,但我不能用Unity調試。

所以我的問題是:

是否有if語句,看看我缺少什麼幫助的工具或在線網站?

在此先感謝。

EDIT1:

什麼是我在我的CompareTo功能缺失:改寫由@paqogomez建議?

+0

什麼調試信息?此外,索取工具或非現場資源是SO的主題。請重新提出您的問題,以更直接地解決您的困境。 – paqogomez

+0

這可能是OP代碼的倒數第二行。 –

+0

@paqogomez像格蘭特溫尼說,這確實是我的代碼的第二行。我不介意重述我的問題,但這基本上是我要求修正CompareTo方法,因爲我太密集而無法自己做,再加上該工具或非現場資源將來會很有用。 – SHEePYTaGGeRNeP

回答

0

我通過重新安裝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)

發現它:)

2

如果沒有一個支持調試的適當IDE,您將不得不按照您已經開始執行的方式來執行此操作。

在您的調試消息中,打印出您在if語句中使用的一些變量,以確定其實際值。

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

你會發現,這兩個的返回false或兩者返回true,否則你不會在所有的打你的調試消息。

我猜你在WhoWouldWin方法的邏輯中有一個錯誤。我不確定您是否應該將單元與CoveringUnit進行比較,因爲我不完全瞭解您的域。