我正在编写游戏蛇。简而言之,我对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.
当我运行程序时,蛇会立即停止。这很奇怪,因为我检查了方法得到的值。显示的值是我的if语句检查的值。现在我相信88和66并不等于彼此。
我在论坛上环顾四周,以便更好地解释&amp;&amp;接线员和一个帖子告诉我&amp;&amp;如果第一个为真,则仅检查两个语句。单一&amp;将检查两个参数是否都为真。但是我得到的结果与&amp;和&amp;&amp;。
我在这里看到傻事吗?我累了吗?你能否看到这个陈述有什么问题?并告诉我为什么它认为88 == 66?
谢谢你的时间!
答案 0 :(得分:5)
你正在环绕蛇的每个细胞,包括头部。头与头部位于同一个位置,因此蛇吃掉自己的脸并死亡。不要将头部包括在循环中。
答案 1 :(得分:1)
和&amp;之间的区别和&amp;&amp;是一个逻辑运算符,另一个是短路运算符。 Difference between & and &&
另外看起来你最终会将头部与头部本身进行比较,除非你的getLength在头部之下。