我正在 node.js 中撰寫一個終端游戲,它會生成一個由以下組成的隨機欄位
const hat = '^';
const hole = 'O';
const fieldCharacter = '?';
const pathCharacter = '*';
玩家需要穿過迷宮并找到他們的帽子。欄位表示為
randomArr
因為陣列是隨機的,所以生成的欄位可能無法通過,因為帽子被孔包圍,玩家根本無法到達那里,所以我正在制作一個演算法首先檢查是否可能的功能獲勝(基本上是迷宮生成器)。我有一個應該可以作業的代碼,但它無法正確執行,因為它陷入了無限回圈。它遇到了 conditional ,需要滿足條件才能將雙元素陣列添加到嵌套陣列中(條件是:相鄰方格必須是欄位元素并且之前沒有訪問過該方格)。盡管不滿足第二個條件,演算法會一遍又一遍地將相同的元素添加到陣列中。
這是回圈的開始:
while (true) {
//checking if next move is a winning move
if (randomArr?.[p[0]]?.[p[1] 1] === hat || randomArr?.[p[0]]?.[p[1] - 1] === hat || randomArr?.[p[0] 1]?.[p[1]] === hat || randomArr?.[p[0] - 1]?.[p[1]] === hat) {
console.table(visited, visitedTwice, visited3x, visited4x, visited5x);
console.log(`solution found, reached postion ${p}`)
return randomArr;
}
//checking if neighbouring square hasn't been visited, if no, go there
else if (randomArr?.[p[0]]?.[p[1] 1] === fieldCharacter && !visited.includes([ p[0], p[1] 1 ])) {
p = [p[0], p[1] 1];
visited.push([p[0], p[1]]);
//console.log(visited.includes([ p[0], p[1] 1 ]), 0);
//console.log(visited);
} else if (randomArr?.[p[0]]?.[p[1] - 1] === fieldCharacter && !visited.includes([ p[0], p[1] - 1 ])) {
p = [p[0], p[1] - 1];
visited.push([p[0], p[1]]);
//console.log(visited.includes([ p[0], p[1] - 1 ]), 1);
//console.log(visited);
} else if (randomArr?.[p[0] 1]?.[p[1]] === fieldCharacter && !visited.includes([ p[0] 1, p[1] ])) {
p = [p[0] 1, p[1]];
visited.push([p[0], p[1]]);
//console.log(!visited.includes([ p[0] 1, p[1] ]), 2);
//console.log(visited);
} else if (randomArr?.[p[0] - 1]?.[p[1]] === fieldCharacter && !visited.includes([ p[0] - 1, p[1] ])) {
p = [p[0] - 1, p[1]];
visited.push([p[0], p[1]]);
//console.log(!visited.includes([ p[0] - 1, p[1] ]), 3);
//console.log(visited);
這段代碼繼續遍歷前 2 個 else if 陳述句,并不斷將相同的元素添加到visited
陣列中。(注釋掉的console.log
陳述句是讓我檢查發生了什么)。
uj5u.com熱心網友回復:
你不能使用!visited.includes([ p[0], p[1] 1 ])
. 陣列是通過身份匹配的,而不是通過比較內容,所以這永遠不會是真的。
利用
!visited.some(([el1, el2]) => el1 == p[0] && el2 == p[1] 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/496709.html
標籤:javascript 节点.js 数组 if 语句