fixed minesweeper
This commit is contained in:
parent
ffca29cc18
commit
fec941e502
4 changed files with 53 additions and 75 deletions
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue