背景: 我正在制作流行游戏的版本,Snake。当我试图避免在我蛇的同一个地方出现食物时,我遇到了一些问题。
所以我使用框架Phaser生成了这段代码:
generateFood: function() {
var randomX, randomY;
var rightLocation = false;
var foodOnSnake = false;
while(rightLocation === false) {
randomX = Math.floor(Math.random() * (this.game.width / squareSize)) * squareSize;
randomY = Math.floor(Math.random() * (this.game.height / squareSize)) * squareSize;
foodOnSnake = false;
for (var i = 0; i < snake.length; i++) {
if (snake[i].x === food.x && snake[i].y === food.y) {
foodOnSnake = true;
break;
}
}
if(foodOnSnake === false) {
rightLocation = true;
}
}
food = this.game.add.sprite(randomX, randomY, 'snake', 15);
}
目标是在游戏中创建一些随机坐标。并且,虽然食物是在蛇的一部分(for循环)上生成的,但我将生成其他坐标。但由于未知的原因,在我的蛇吃了第一道食物后,游戏崩溃了,谷歌Chrome的标签没有响应。 我认为循环有一个错误,但我无法找到它。
答案 0 :(得分:4)
您将蛇的片段的坐标与food.x
和food.y
进行比较,您永远不会在循环内更新:
if (snake[i].x === food.x && snake[i].y === food.y) {
我认为您希望将其与randomX
和randomY
进行比较:
if (snake[i].x === randomX && snake[i].y === randomY) {
根据food
坐标的值,您的函数可能会导致无限循环。