蛇游戏bug问题

时间:2013-05-31 19:19:30

标签: javascript canvas

我有一个蛇游戏,但有时食物放在蛇的目前。 我已经创建了这个代码,因为我认为它可以工作,它运行正常,但不会改变任何东西吗?

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

1 个答案:

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

}