создаю сапера на JS, есть двумерный массив заполненый нулями и единицами ,1 это мина, нужно создать массив заполненый числами количеством мин вокруг ячейки, не получаеться сделать из-за границ массива.
var mineField =
[
['0', '0', '0', '1', '0'],
['0', '1', '0', '0', '0'],
['0', '0', '1', '0', '1'],
['1', '0', '0', '1', '0'],
['0', '0', '1', '0', '0']
];
var markField=[];
for(var i = 0;i< mineField.length;i++){
markField[i] = [];
for(var j = 0; j< mineField[i].length; j++){
if(field[i][j] == 1)
markField[i][j] = "-1";//если мина то вносить -1
else{
var mineCounter = 0;//Количество мин вокруг ячейки
if (field[i-1][j-1] === 1) mineCounter++;
if (field[i-1][j] === 1) mineCounter++;
if (field[i-1][j+1] === 1) mineCounter++;
if (field[i][j-1] === 1) mineCounter++;
if (field[i][j+1] === 1) mineCounter++;
if (field[i+1][j-1] === 1) mineCounter++;
if (field[i+1][j] === 1) mineCounter++;
if (field[i+1][j+1] === 1) mineCounter++;
markField[i][j] = mineCounter;
}
}
}
Ответ
Передумал закрывать как дубликат Не работает счетчик мин вокруг, так как это другой способ, который тоже имеет право на существование.
var field = [
[0, 0, 0, 1, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 1],
[1, 0, 0, 1, 0],
[0, 0, 1, 0, 0]
];
var mark = [];
for (var i = 0; i < field.length; i++) {
mark[i] = [];
for (var j = 0; j < field[i].length; j++) {
if (field[i][j] == 1)
mark[i][j] = 9; // для красоты вывода результата, 9 тоже не может быть
else {
var counter = 0;
if (field[i - 1] && field[i - 1][j - 1] == 1) counter++;
if (field[i - 1] && field[i - 1][j] == 1) counter++;
if (field[i - 1] && field[i - 1][j + 1] == 1) counter++;
if (field[i][j - 1] == 1) counter++;
if (field[i][j + 1] == 1) counter++;
if (field[i + 1] && field[i + 1][j - 1] == 1) counter++;
if (field[i + 1] && field[i + 1][j] == 1) counter++;
if (field[i + 1] && field[i + 1][j + 1] == 1) counter++;
mark[i][j] = counter;
}
}
}
for (i = 0; i < mark.length; i++)
console.log(JSON.stringify(mark[i]));
Комментариев нет:
Отправить комментарий