2014-01-21 3 views
3

Im в настоящее время кодирует змею игры. И чтобы быть коротким, у меня возникла проблема относительно 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, когда я запустить программу. Wierd, потому что я проверил значения, которые получит метод. Значения, показанные выше, являются значениями, которые проверяет инструкция my if. Теперь я считаю, что 88 и 66 не равны друг другу.

Я оглянулся на форуме для лучшего объяснения оператора & &, а после сказал мне, что & & только проверяет оба утверждения, если первое верно. И один & будет проверять, являются ли оба аргумента истинными. Но я получил тот же результат с & и & &.

Могу ли я пропустить что-то глупое здесь? я устал? Можете ли вы увидеть что-то не так с этим заявлением? И скажите мне, почему он думает 88 == 66?

Спасибо за ваше время!

+0

Вы пробовали распечатать значения внутри 'if'? – Christian

+1

Ваша идея хорошая, но вы не должны сравнивать голову с собой. – Ingo

+0

Я добавил -1 к длине массива. Теперь это работает как шарм. Огромное спасибо! должен лечь спать сейчас ..: D примет ответ, когда предел 5minute закончен. – Surangie

ответ

5

Вы зацикливаете каждую ячейку змеи, включая голову. Голова находится в том же месте, что и голова, поэтому змея ест свое лицо и умирает. Не включайте головку в петлю.

+1

Ценный урок жизни: не ешьте свое лицо. – roippi

+0

Я добавил -1 к длине массива. Теперь это работает как шарм. Огромное спасибо! должен лечь спать сейчас ..: D примет ответ, когда предел 5minute закончен. – Surangie

1

Разница между & и & & заключается в том, что один является логическим оператором, а другой - оператором короткого замыкания. Difference between & and &&

Также кажется, что вы в конечном итоге сравните голову с самой головой, если только ваша getLength не идет одна под голову.

+0

Я добавил -1 к длине массива. Теперь это работает как шарм. Огромное спасибо! должен лечь спать сейчас ..: D примет ответ, когда предел 5minute закончен. – Surangie

+0

Проверьте ссылку на & & &&, а также, если вы хотите понять разницу. Также убедитесь, что вы помогли найти ответы, которые помогли. – Ion

+0

Да, никогда не узнаешь об основах! :) – Surangie

Смежные вопросы