为什么这个返回坐标的函数有时会返回超出其假定限制的坐标?

作为练习,我正在构建经典 Nibbles/Snake 游戏的克隆。


游戏区域由一个二维数组(行和列)组成,玩家蛇由另一个二维数组组成,其中包含蛇当前占据的游戏区域中每个单元格的坐标。


然后我有一个函数来创建蛇应该吃的苹果。此函数返回一个简单的数组,其中包含一个 x 坐标和一个 y 坐标,用于指定放置苹果的游戏区域单元格。这个单元格当然永远不应该是玩家蛇在创建苹果时占据的单元格之一。


但是,我构建的函数有时会在玩家蛇当前占据的单元格中创建一个苹果。


任何人都可以发现错误吗?


这是相关代码:


const rows = 20;

const cols = 26;


const cells = createCells(rows, cols);

let player = [[1,1], [1,2], [1,3], [1,4]];

let apple = createApple(cells, player);


function createCells(rows, cols) {

    let cells = new Array(rows);

    for (let r = 0; r < cells.length; r++) {

        cells[r] = new Array(cols);

    }

    return cells;

}


function createApple(cells, player) {

    let positions = new Array();

    for (let r = 0; r < cells.length; r++) {

        for (let c = 0; c < cells[r].length; c++) {

            for (let p = 0; p < player.length; p++) {

                if (!(player[p][0] === r && player[p][1] === c)) {

                    positions.push([r, c]);

                }

            }

        }

    }

    let random = Math.floor(Math.random() * positions.length - 1);

    let apple = positions[random];

    return apple;

}


收到一只叮咚
浏览 122回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript