fixed minesweeper

This commit is contained in:
Patrick 2025-01-05 20:26:18 +01:00
parent ffca29cc18
commit fec941e502
4 changed files with 53 additions and 75 deletions

View file

@ -12,28 +12,35 @@ const canvas = document.getElementById('game');
const ctx = canvas.getContext('2d');
class Minesweeper {
constructor(w, h, bombs) {
constructor(width, height, bombs) {
this.size = 25;
this.field = new Array(w);
this.bombs = new Array(w);
this.field = new Array(width);
this.bombs = new Array(width);
for (let x = 0; x < this.field.length; x++) {
this.field[x] = new Array(h);
this.bombs[x] = new Array(h);
for (let y = 0; y < this.field.length; y++) {
this.field[x] = new Array(height);
this.bombs[x] = new Array(height);
for (let y = 0; y < this.field[x].length; y++) {
this.field[x][y] = 1;
this.bombs[x][y] = false;
}
}
for (let i = 0; i < bombs; i++) {
let x = Math.floor(Math.random() * w);
let y = Math.floor(Math.random() * h);
this.bombs[x][y] ? i-- : this.bombs[x][y] = true;
}
this.bombAmount = bombs > width * height / 2 ? width * height / 2 : bombs;
this.width = width;
this.height = height;
this.firstClick = false;
this.drawField();
}
generateBombs() {
for (let i = 0; i < this.bombAmount; i++) {
let x = Math.floor(Math.random() * this.width);
let y = Math.floor(Math.random() * this.height);
this.bombs[x][y] && this.field[x][y] != 0 ? i-- : this.bombs[x][y] = true;
}
this.firstClick = true;
}
getNearbyBombs(x, y) {
let counter = 0;
for (let newX = x - 1; newX <= x + 1; newX++) {
@ -85,6 +92,7 @@ class Minesweeper {
window.location.reload();
} else if (this.field[x][y] == 1) {
this.field[x][y] = 0;
!this.firstClick ? this.generateBombs() : {};
if (this.getNearbyBombs(x, y) == 0) {
for (let newX = x - 1; newX <= x + 1; newX++) {
for (let newY = y - 1; newY <= y + 1; newY++) {
@ -102,9 +110,9 @@ class Minesweeper {
drawSquare(x, y, type) {
ctx.lineWidth = 3;
let color1 = (x + y) % 2 === 0 ? '#D3D3D3' : '#A9A9A9';
let activeColor = (x + y) % 2 === 0 ? '#4CAF50' : '#81C784';
ctx.fillStyle = type !== 0 ? activeColor : color1;
let uncovered = (x + y) % 2 === 0 ? '#D3D3D3' : '#A9A9A9';
let covered = (x + y) % 2 === 0 ? '#4CAF50' : '#81C784';
ctx.fillStyle = type != 0 ? covered : uncovered;
ctx.fillRect(x * this.size, y * this.size, this.size, this.size);
ctx.strokeStyle = '#000';
ctx.strokeRect(x * this.size, y * this.size, this.size, this.size);
@ -123,9 +131,12 @@ class Minesweeper {
}
drawField() {
const squareWidth = window.innerWidth / (this.field.length + 4);
const squareHeight = window.innerHeight / (this.field[0].length + 4);
squareHeight > this.size ? this.size = squareWidth : this.size = squareHeight;
if (window.innerWidth > window.innerHeight) {
this.size = window.innerHeight / (this.field[0].length + 4);
} else {
this.size = window.innerWidth / (this.field.length + 4);
}
canvas.width = this.size * this.field.length;
canvas.height = this.size * this.field[0].length;