Проебразования массива
Всем привет,
У меня есть вот такой вот массив.
[
[1, 1, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 1, 2, 1, 1, 0, 0]
[0, 0, 1, 1, 2, 1, 1, 1, 1]
[0, 0, 1, 1, 3, 2, 2, 1, 0]
[0, 0, 0, 0, 1, 1, 1, 1, 1]
[1, 1, 0, 0, 1, 1, 1, 0, 0]
[1, 2, 0, 0, 0, 0, 1, 2, 2]
[1, 2, 0, 0, 0, 0, 1, 1, 1]
]
Как сделать так что-бы, например при нажатие на позицию [0][4] все ячейки где 0 преоброзовались в "show", с условием что они ограничены числами которые не ровны 0.
Вот таким образом
[
[1, 1, 1, 'show', 'show', 'show', 'show', 'show', 'show']
[0, 0, 1, 1, 2, 1, 1, 'show', 'show']
[0, 0, 1, 1, 2, 1, 1, 1, 1]
[0, 0, 1, 1, 3, 2, 2, 1, 0]
[0, 0, 0, 0, 1, 1, 1, 1, 1]
[1, 1, 0, 0, 1, 1, 1, 0, 0]
[1, 2, 0, 0, 0, 0, 1, 2, 2]
[1, 2, 0, 0, 0, 0, 1, 1, 1]
]
Ответы (1 шт):
Автор решения: Sergey Glazirin
→ Ссылка
const gameMap = [
[1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 2, 1, 1, 0, 0],
[0, 0, 1, 1, 2, 1, 1, 1, 1],
[0, 0, 1, 1, 3, 2, 2, 1, 0],
[0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 1, 0, 0, 1, 1, 1, 0, 0],
[1, 2, 0, 0, 0, 0, 1, 2, 2],
[1, 2, 0, 0, 0, 0, 1, 1, 1],
];
function open(x, y) {
if (x === gameMap.length || y === gameMap[0].length || y === -1 || x === -1 || gameMap[x][y] === 'show') {
return;
}
if (gameMap[x][y] === 0) {
gameMap[x][y] = 'show';
const neiborhood = [{
a: x,
b: y + 1
},
{
a: x + 1,
b: y
},
{
a: x,
b: y - 1
},
{
a: x - 1,
b: y
}
];
neiborhood.forEach((item) => {
open(item.a, item.b)
})
} else {
alert('You loose!');
}
}
open(0, 4);
console.log(gameMap);