Доброй ночи! Если вратце - делаю сапёр, точнее уже всё сделал кроме одной фишечки. А именно, открытие всех пустых клеток, располагающихся рядом, заливка своего рода. Поле представлено двумерным массивом. Написал вот такой код
fillEmptyCells(x, y) {
//верхний левый угол
this.field[x][y].isOpen = true;
if (((x - 1) >= 0) && ((y - 1) >= 0)) {
if (this.field[x-1][y-1].bombsNear == 0) {
this.field[x-1][y-1].isOpen = true;
this.fillEmptyCells(x-1,y-1);
}
}
//верхний правый угол
if (((x + 1) < this.height) && ((y - 1) >= 0)) {
if (this.field[x+1][y-1].bombsNear == 0) {
this.field[x+1][y-1].isOpen = true;
this.fillEmptyCells(x+1,y-1);
}
}
//верхний кубик
if (((y - 1) >= 0)) {
if (this.field[x][y-1].bombsNear == 0) {
this.field[x][y-1].isOpen = true;
this.fillEmptyCells(x,y-1);
}
}
//нижний левый угол
if (((x - 1) >= 0) && ((y + 1) < this.width)) {
if (this.field[x-1][y+1].bombsNear == 0) {
this.field[x-1][y+1].isOpen = true;
this.fillEmptyCells(x-1,y+1);
}
}
//нижний правый угол
if (((x + 1) < this.height) && ((y + 1) < this.width)) {
if (this.field[x+1][y+1].bombsNear == 0) {
this.field[x+1][y+1].isOpen = true;
this.fillEmptyCells(x+1,y+1);
}
}
//нижний кубик
if (((y + 1) < this.width)) {
if (this.field[x][y+1].bombsNear == 0) {
this.field[x][y+1].isOpen = true;
this.fillEmptyCells(x,y+1);
}
}
//Слева
if (((x - 1) >= 0)) {
if (this.field[x-1][y].bombsNear == 0) {
this.field[x-1][y].isOpen = true;
this.fillEmptyCells(x-1,y);
}
}
//Справа
if (((x + 1) < this.height)) {
if (this.field[x+1][y].bombsNear == 0) {
this.field[x+1][y].isOpen = true;
this.fillEmptyCells(x+1,y);
}
}
},
То есть проверяем все окружающие клетки. При таком подходе я получаю переполнение стека. На бесконечную рекурсию не похоже, да и на маленьком поле глубина рекурсии должна быть не такой уж и большой. Подскажите, пожалуйста, как избежать, или как правильно сделать. Заранее спасибо!