2013-05-01 60 views
3

我目前正在開發一個非常基礎的「推箱子」遊戲。我試圖讓這個循環,但似乎無法完成它。我的目標是執行下面的移動代碼示例,我覺得我的語法在添加另一個條件時出現錯誤,它說「(diamondlist.Count)&(Playerlist.Count)。我得到的錯誤是」運算符'&'不能應用於'bool'和'int'類型的操作數。我嘗試添加雙「& &」,這並不能解決問題eitheir,任何幫助表示讚賞 - 感謝:d在繼續之前需要循環檢查2個條件

protected override void Update(GameTime gameTime) 
    { 
     for (int i = 0; i < (diamondlist.Count) & (Playerlist.Count); i++) 
     { 
      if ((Playerlist[i].Position == diamondlist[i].Position) && kb_old.IsKeyDown(Keys.W)) 
      { 
       if (currentMap.isWalkable(new Point(diamondlist[i].m_position.X, diamondlist[i].m_position.Y - 1))) 
        diamondlist[i].m_position.Y--; 
      } 

回答

9

有幾個問題。

  1. 表達i < (diamondlist.Count) & (Playerlist.Count)被評價爲:

    (i < diamondlist.Count) & Playerlist.Count 
    

    表達式(i < diamondlist.Count)的第一部分是一個bool,但第二部分(Playerlist.Count)爲int。這是抱怨,因爲&不接受這樣的兩種不同類型。

  2. 然後您試圖申請&其中(整數)是bitwise AND operator。如果兩種類型都是相同的,這將會起作用,但它可能導致花費不必要的CPU週期,並且通常不用於布爾表達式。您可能想要使用&& - logical or conditional and operator

試試這個:

for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++) 
{ 
    ... 
} 
+0

你的一個紳士,非常感謝:) – 2013-05-01 19:11:55

0
for (int i = 0; i < (diamondlist.Count) && i < (Playerlist.Count); i++) 
2

每個檢查是相互獨立的。你必須明確你正在檢查的內容。當你說「我小於diamondlist.Count和playerList.Count」你的真實意思是「我小於diamondlist.Count和我小於playerlist.Count」。

for (int i = 0; (i < diamondlist.Count) && (i < Playerlist.Count); i++) 
.... 
+0

ahh我明白了,太棒了 - 謝謝你! – 2013-05-01 19:13:35

4

怎麼樣簡化您的測試條件?

int maxValue = System.Math.Min(diamondlist.Count,Playerlist.Count); 
for (int i = 0; i < maxValue; i++) 
+0

最好的解決方案,唯一的原始的,顯然。 – SimpleVar 2013-05-01 19:12:56

+1

但是請注意OP,他也應該從其他答案中學習(一個就足夠了......) – SimpleVar 2013-05-01 19:18:10

0

我不知道你試圖實現什麼,但我認爲這是你想要什麼:

的for(int i = 0;我<(diamondlist.Count & &我< Playerlist .Count之間;我++)

0

你可以嘗試:for (int i = 0; i < (diamondlist.Count) & i < (Playerlist.COunt); i++)

看來,你所得到的錯誤,表明i < (diamondlist.Count) & (Playerlist.Count)正因爲這樣執行的。比較i < (diamondlist.Count)&(Playlist.Count),這是一個int。

0

如果要檢查這兩個條件,那麼就應該是這樣的:

for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++) ... 

& &是邏輯運算符。 &是按位AND運算符。

+0

非常感謝您的解釋! – 2013-05-01 19:13:02

0

想想這就像一臺電腦。它需要一個在那裏評估爲真或假的東西。在英語中,您有:

IF (i is less than this) AND (this) 

它不能evaulate第二個表達式,因爲沒有比較怎麼回事(雖然給人類似乎有)。所以你必須把它做得更寬一些,並且這樣做:

IF (i is less than this) AND (i is less than this)