上下文: 我正在制作流行游戏《贪吃蛇》的一个版本。当我试图避免食物出现在蛇的各个部位的同一位置时,我遇到了一些问题。
所以我使用 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 循环),我将生成其他坐标。但不知什么原因,在我的蛇吃掉第一个食物后,游戏崩溃了,Google Chrome 的选项卡没有响应。 我认为循环有错误,但我找不到它。
最佳答案
您将蛇各节的坐标与 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
坐标的值,您的函数可能会导致无限循环。
关于javascript - 当我的脚本运行时 Google Chrome 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007766/