2014-01-21 67 views
3

我目前正在編寫遊戲蛇。簡而言之,即時通訊有一個關於if語句的問題。給我麻煩的部分是檢查蛇是否與自身發生碰撞的方法。如果陳述不按預期工作

if語句是這樣的:

public void checkCol(){ 
    for(int i = 0; i < snake.getLength(); i++){ 
     if((snake.getXPosArray()[snake.getLength() - 1] == snake.getXPosArray()[i]) 
       && (snake.getYPosArray()[snake.getLength() - 1] == snake.getYPosArray()[i])){ 
      gameOver(); 
     } 

    } 
} 

包涵文字的牆在這裏。這個代碼試圖說的是:如果蛇的頭部與蛇體的任何其他部分具有相同的座標,則它的遊戲結束。

最初蛇的長度是3,並且由座標數組控制。因此,在循環的第一輪將檢查:

xPos[2] == xPos[0] and the same with yPos[2] == yPos[0] 
xPos[2] = 88 , xPos[0] = 66 , yPos[2] = 55 , yPos[0] = 55. 

蛇immidiately停止當我運行該程序。這很奇怪,因爲我檢查了方法會得到的值。顯示的值是我的if語句檢查的值。現在我相信88和66不等於對方。

我看了看周圍的論壇爲& &運營商的一個更好的解釋,以及後告訴我,& &只檢查這兩個語句,如果第一個是真實的。並且一個&將檢查兩個參數是否都是真實的。但我得到了與&和& &相同的結果。

我可以忽略這裏愚蠢的東西嗎?我是否累了?你們能否看到這個說法有什麼問題?並告訴我爲什麼認爲88 == 66?

謝謝你的時間!

+0

您是否嘗試過在'if'中打印值? – Christian

+1

你的想法很好,但你不能把頭與自己比較。 – Ingo

+0

我在數組的長度上加了-1。它現在像一種魅力。謝謝一堆!現在應該睡覺..:D 將在5分鐘限制結束時接受答案。 – Surangie

回答

5

你正在循環蛇中的每個單元格,包括頭部。頭部與頭部位於同一位置,所以蛇吃自己的臉並死亡。不要將頭部包含在循環中。

+1

寶貴的生命教訓:不要吃自己的臉。 – roippi

+0

我在數組的長度上加了-1。它現在像一種魅力。謝謝一堆!現在應該睡覺..:D 將在5分鐘限制結束時接受答案。 – Surangie

1

&和& &之間的區別是一個是邏輯運算符,另一個是短路運算符。 Difference between & and &&

此外,它似乎最終將比較頭部與頭部本身,除非你的getLength頭部下方。

+0

我加了一個-1到數組的長度。它現在像一種魅力。謝謝一堆!現在應該睡覺..:D 將在5分鐘限制結束時接受答案。 – Surangie

+0

查看關於&和&&的鏈接,以及如果您想了解其中的差異。另外請確保upvote幫助的答案。 – Ion

+0

是的,永遠不能學習足夠的基礎知識! :) – Surangie