作為練習(xí),我正在構(gòu)建經(jīng)典 Nibbles/Snake 游戲的克隆。游戲區(qū)域由一個(gè)二維數(shù)組(行和列)組成,玩家蛇由另一個(gè)二維數(shù)組組成,其中包含蛇當(dāng)前占據(jù)的游戲區(qū)域中每個(gè)單元格的坐標(biāo)。然后我有一個(gè)函數(shù)來(lái)創(chuàng)建蛇應(yīng)該吃的蘋果。此函數(shù)返回一個(gè)簡(jiǎn)單的數(shù)組,其中包含一個(gè) x 坐標(biāo)和一個(gè) y 坐標(biāo),用于指定放置蘋果的游戲區(qū)域單元格。這個(gè)單元格當(dāng)然永遠(yuǎn)不應(yīng)該是玩家蛇在創(chuàng)建蘋果時(shí)占據(jù)的單元格之一。但是,我構(gòu)建的函數(shù)有時(shí)會(huì)在玩家蛇當(dāng)前占據(jù)的單元格中創(chuàng)建一個(gè)蘋果。任何人都可以發(fā)現(xiàn)錯(cuò)誤嗎?這是相關(guān)代碼: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;}
為什么這個(gè)返回坐標(biāo)的函數(shù)有時(shí)會(huì)返回超出其假定限制的坐標(biāo)?
收到一只叮咚
2021-06-08 09:00:01