function setCellState() {
this.isMine = false;
this.isOpen = false;
this.mineAround = 0;
}
var game = {
askStandartField: confirm(
"Стандартные настройки? 10 ячеек х 10 ячеек, 10 мин"
),
width: 10,
height: 10,
mineCount: 9,
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--;
}
}
},
countMineAround: function(x, y) {
if (
//Если клетка не крайняя
x !== 0 ||
y !== 0 ||
x !== game.width - 1 ||
y !== game.height - 1
) {
if (game.field[x - 1][y - 1].isMine) game.field[x][y].mineAround++;
if (game.field[x][y - 1].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y - 1].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[y][x - 1].isMine) game.field[x][y].mineAround++;
} else if (x === 0 || y === 0) {
//Если клетка занимает одну из крайних позиций
if (game.field[x + 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x][y + 1].isMine) game.field[x][y].mineAround++;
}
if (y === 0) {
if (game.field[x + 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y].isMine) game.field[x][y].mineAround++;
}
if (x == game.width || y === 0) {
if (game.field[x][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y].isMine) game.field[x][y].mineAround++;
}
if (x == game.width) {
if (game.field[x][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y + 1].isMine) game.field[x][y].mineAround++;
}
if (x == game.width || y == game.height) {
if (game.field[x - 1][y - 1].isMine) game.field[x][y].mineAround++;
if (game.field[x][y - 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y].isMine) game.field[x][y].mineAround++;
}
if (y == game.height) {
if (game.field[x][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x - 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y + 1].isMine) game.field[x][y].mineAround++;
}
if (x === 0 || y == game.height) {
if (game.field[x][y - 1].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y - 1].isMine) game.field[x][y].mineAround++;
}
if (x === 0) {
if (game.field[x][y - 1].isMine) game.field[x][y].mineAround++;
if (game.field[x][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y + 1].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y].isMine) game.field[x][y].mineAround++;
if (game.field[x + 1][y - 1].isMine) game.field[x][y].mineAround++;
}
},
drawField: function() {
$("body").append("<table id = 'play-table'>");
for (var x = 0; x < game.width; x++) {
$("table").append("<tr>");
for (var y = 0; y < game.height; y++) {
$("tr:last-child").append(`<td>`);
}
}
}
};
game.standartField();
game.fillField();
game.drawField();
$("td").click(function() {
var x = this.cellIndex;
var y = this.parentNode.rowIndex; //сохраняем координаты ячейки
game.openCount++;
game.field[x][y].countMineAround(x, y);
if (!(game.field[x][y].mineAround = 0)) {
$(this).text(game.field[x][y].mineAround);
}
if (game.field[y][x].isMine) {
$(this).addClass("isMine");
$("#info").text("Вы проиграли");
for (var x0 = 0; x0 < game.width; x0++) {
for (var y0 = 0; y0 < game.height; y0++) {
if (game.field[y0][x0].isMine) {
$(
"#play-table tr:nth-child(" +
x0 +
") td:nth-child(" +
y0 +
")"
).addClass("isMine"); //Если поле минное взрываем все мины
}
}
}
} else {
$(this).addClass("isOpen"); // Если нет то открываем
}
});
Кол-во мин вокруг каждой записывается 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--;
}
}
},
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++;
}
}
},
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(y, x);
$("tr:last-child").append('<td ' + (game.field[y][x].isMine? "class='grayMine'" : "") + '>' + game.field[y][x].mineAround + '</td>');
}
}
}
};
game.standartField();
game.fillField();
game.drawField();
$("td").click(function() {
var x = this.cellIndex;
var y = this.parentNode.rowIndex; //сохраняем координаты ячейки
game.openCount++;
game.countMineAround(x, y);
if (game.field[x][y].mineAround) {
$(this).text(game.field[x][y].mineAround);
}
if (game.field[y][x].isMine) {
$(this).addClass("isMine");
$("#info").text("Вы проиграли");
for (var x0 = 0; x0 < game.width; x0++) {
for (var y0 = 0; y0 < game.height; y0++) {
if (game.field[y0][x0].isMine) {
$(
"#play-table tr:nth-child(" +
x0 +
") td:nth-child(" +
y0 +
")"
).addClass("isMine"); //Если поле минное взрываем все мины
}
}
}
} else {
$(this).addClass("isOpen"); // Если нет то открываем
}
});
//console.log(game.field);
td {
width:15px;
height:15px;
text-align:center;
font-size:12px;
}
.grayMine {
background-color:gray;
}
.isMine {
background-color:red;
}
.isOpen {
background-color:lightgreen;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я использую такой код для классовregister,
Почему с помощью свойства margin-top: -Xpx не получается передвинуть поле ввода в вверх?
При встраивании видео через тег <video> качество меньше чем у оригинала который лежит на сервере
Всем добрый день, надо реализовать перемещение мышкой фона блока (изображение) курсор - moveКаким способом можно сделать?