[英]why items are being pushed into array, despite failing conditional?
我正在 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
語句是讓我檢查發生了什么)。
您不能使用!visited.includes([ p[0], p[1] + 1 ])
。 數組是通過身份匹配的,而不是通過比較內容,所以這永遠不會是真的。
利用
!visited.some(([el1, el2]) => el1 == p[0] && el2 == p[1]+1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.