Итак, я делаю тральщик в JS.Игра «Сапер» - превышена максимальная сумма стека вызовов
У меня есть эта функция:
function doSquare(x, y) { //takes x,y coordinates of a square. checks and acts accordingly to what's around it
var revealed = [];
var size = board.length;
var mines = countAround(x,y);
table.rows[x].cells[y].innerHTML = mines;
if (mines === 0) {
for (var i=Math.max(0,x-1), l = Math.min(x+1, size-1); i<=l; i++) {
for (var j=Math.max(0, y-1), k = Math.min(y+1, size-1); j<=k; j++) {
if (x == i && y==j) {continue;}
if (revealed.indexOf(i+"."+j) === -1) {
doSquare(i, j);
revealed.push(i+"."+j);
}
}
}
}
}
строк и перевалы платы равны. countAround(x,y)
возвращает количество мин вокруг (x, y); revealed
- это массив, в котором хранятся квадраты, которые уже были обработаны, чтобы предотвратить их повторное использование.
Эта функция должна, когда щелкнуть квадрат, показать количество мин рядом с ней и записать ее в ячейку. Затем он проверяет каждый квадрат вокруг него, и если этот квадрат еще не был обработан (если он не находится в массиве revealed
), функция doSquare()
снова запускается на нем. Функция не будет «распространяться» с квадрата, если на квадрате есть какие-то мины рядом с ним.
Я получаю сообщение об ошибке: максимальный размер стека вызовов превышен. Но функция останавливает свое «распространение» при достижении квадрата с минами, а также не работает на квадрате, о котором уже позаботились. Поэтому мне хотелось бы объяснить, почему это происходит.
Ваша петля/рекурсия убежала, я думаю. Проверьте свои условия и ограничители. – Joseph