Сапер на js. Что делать счетчик мин вокруг не работает?

Счетчик мин вокруг работает неправильно:
countMineAround: function(x, y) {
          var x0 = Math.max(0, x - 1);
          var x1 = Math.min(game.width - 1, x + 1);
          var y0 = Math.max(0, y - 1);
          var y1 = Math.min(game.height - 1, y + 1);
          game.field[x][y].mineAround = 0;
          for (var i = x0; i <= x1; i++) {
            for (var j = y0; j <= y1; j++) {
              if (i == x && j == y)
                continue;
              if (game.field[i][j].isMine)
                game.field[x][y].mineAround++;  
            }
          }
        }

Весь код:
function setCellState() {
        this.isMine = false;
        this.isOpen = false;
        this.mineAround = 0;
    }
    var game = {
        askStandartField: confirm(
            "Стандартные настройки? 10 ячеек х 10 ячеек, 10 мин"
        ),
        width: 10,
        height: 10,
        mineCount: 10,
        standartField: function() {
            if (!game.askStandartField) {
                // Если пользователь не хочет стандартные настройки
                game.width = prompt("Длина поля");
                game.height = prompt("Высота поля");
                game.mineCount = prompt("Кол-во мин:");
            }
        },
        openCount: 0,
        field: [],
        fillField: function() {
            for (var x = 0; x < game.width; x++) {
                var row = []; //Создаем массив row и заталкиваем в field
                game.field.push(row);
                for (var y = 0; y < game.height; y++) {
                    row.push(new setCellState());
                }
            }
            for (var i = 0; i < game.mineCount; i++) {
                // Генерируем мины
                var xx = Math.floor(Math.random() * game.width);
                var yy = Math.floor(Math.random() * game.height);
                if (!game.field[xx][yy].isMine) {
                    game.field[xx][yy].isMine = true;
                } else {
                    i--;
                }
            }
        },
        drawField: function() {
            $("body").append("<table id = 'play-table' border=1>");
            for (var x = 0; x < game.width; x++) {
                $("table").append("<tr>");
                for (var y = 0; y < game.height; y++) {
                game.countMineAround(x, y);
                    $("tr:last-child").append('<td>');
                }
            }
        },
        countMineAround: function(x, y) {
          var x0 = Math.max(0, x - 1);
          var x1 = Math.min(game.width - 1, x + 1);
          var y0 = Math.max(0, y - 1);
          var y1 = Math.min(game.height - 1, y + 1);
          game.field[x][y].mineAround = 0;
          for (var i = x0; i <= x1; i++) {
            for (var j = y0; j <= y1; j++) {
              if (i == x && j == y)
                continue;
              if (game.field[i][j].isMine)
                game.field[x][y].mineAround++;  
            }
          }
        }
    };
    function startGame() {
        game.standartField();
        game.fillField();
        game.drawField();
    }
    startGame();
    $("td").click(function() {
        var x = this.cellIndex;
        var y = this.parentNode.rowIndex; //сохраняем координаты ячейки
        
        game.openCount++;
        game.countMineAround(x, y);
        
        if (!((game.field[x][y].mineAround == 0) || (game.field[x][y].isMine))) {
            $(this).text(game.field[x][y].mineAround);
        }
        if (game.field[x][y].isMine) {
            $(this).addClass("isMine");
            $("#info").text("Вы проиграли");
            $(this).text(game.field[x][y].mineAround)
            for (var x0 = 0; x0 < game.width; x0++) {
                for (var y0 = 0; y0 < game.height; y0++) {
                    if (game.field[x0][y0].isMine) {
                        $(
                            "#play-table tr:nth-child(" +
                                x0 +
                                ") td:nth-child(" +
                                y0 +
                                ")"
                        ).addClass("isMine"); //Если поле минное взрываем все мины
                    }
                }
            }
        } else {
            $(this).addClass("isOpen"); // Если нет то открываем
        }
    });
  • Вопрос задан
  • 614 просмотров
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
function(x, y) {
     var field = game.field[x][y];
     field.mineAround = 0;
     for (var i = x - 1; i <= x + 1; i++) {
         for (var j = y - 1; j <= y + 1; j++) {
             if (i != x || j != y) {
                 try {
                     field.mineAround += game.field[i][j].isMine;
                 } catch (e) {}
             }
         }
     }
 }

Но не воспринимайте ответ серьезно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы