Счетчик мин вокруг работает неправильно:
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"); // Если нет то открываем
}
});