我有一个蛇游戏,但有时食物放在蛇的目前。 我已经创建了这个代码,因为我认为它可以工作,它运行正常,但不会改变任何东西吗?
function CreateFood() {
food = {
x: Math.round(Math.random()*(w-cellSize)/cellSize),
y: Math.round(Math.random()*(h-cellSize)/cellSize),
};
for(var i = 0; i < snakeArray.length; i++) {
if (snakeArray[i].x == food.x && snakeArray[i].y == food.y) {
CreateFood();
}
}
}
编辑:有些方法使用它像paintfoodcells方法等,我有一个paint snakecells方法。我想要做的是,如果生成的随机食物位置与其中一个蛇形阵列位置相同,那么它只是再次尝试。对于整个源代码,请转到提供的链接并右键单击查看源。 http://www.taffatech.com/Snake.html
答案 0 :(得分:1)
我认为问题在于你正在使用递归。当您检测到食物与蛇的位置相同时,您会创建一个新的食物对象,但不会更改第一个食物的值。而是尝试一个while循环。
done = true;
while (done == false){
food = {
x: Math.round(Math.random()*(w-cellSize)/cellSize),
y: Math.round(Math.random()*(h-cellSize)/cellSize),
};
for(var i = 0; i < snakeArray.length; i++) {
if (snakeArray[i].x == food.x && snakeArray[i].y == food.y) {
done = false;
}
}
}