0

我有一个蛇游戏,但有时食物放在蛇现在所在的地方。我创建了这段代码,因为我认为它可以正常工作,它运行良好但没有改变任何东西?

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

4

1 回答 1

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;
    }  
}

}

于 2013-05-31T19:36:34.427 回答