function mouseClicked() {
this.w = (width - 2 * offset) / n;
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (this.mat[i][j] == 0) {
this.mat[i][j] = this.isBomb(i - 1, j - 1) + this.isBomb(i - 1, j) + this.isBomb(i - 1, j + 1) + this.isBomb(i, j + 1) + this.isBomb(i + 1, j + 1) + this.isBomb(i + 1, j) + this.isBomb(i + 1, j - 1) + this.isBomb(i, j - 1);
if (i < 0 || i > this.n - 1 || j < 0 || j > this.n - 1) return 0;
return this.mat[i][j] === -1 ? 1 : 0;
let i = floor((x - offset) / this.w);
let j = floor((y - offset) / this.w);
for (let i = 0; i < this.n; i++) {
for (let j = 0; j < this.n; j++) {
switch(max(this.state[i][j],this.gameState)){
rect(offset + i * this.w, offset + j * this.w, this.w, this.w);
rect(offset + i * this.w, offset + j * this.w, this.w, this.w);
text(this.mat[i][j], (i + 0.5) * this.w + offset, (j + 0.5) * this.w + offset);
rect(offset + i * this.w, offset + j * this.w, this.w, this.w);
rect(offset + i * this.w, offset + j * this.w, this.w, this.w);
rect(offset + i * this.w, offset + j * this.w, this.w, this.w);
} = this.getIndex(mouseX, mouseY);
if (mouseButton === LEFT)
else if (mouseButton === RIGHT) {
console.log({bombs : this.bombs, marked : this.bombsMarked, remaning: this.remaining});
if (this.bombs === this.bombsMarked && this.bombs === this.remaining) {
console.log('%cYou win','color:blue;font-size:20px');
if (this.state[i][j] === 0) {
if (i < 0 || i > this.n - 1 || j < 0 || j > this.n - 1 || this.state[i][j] > 0) return;
if(this.state[i][j] === -1){
if (this.mat[i][j] === 0) {
this.changeState(i - 1, j - 1);
this.changeState(i - 1, j);
this.changeState(i - 1, j + 1);
this.changeState(i, j + 1);
this.changeState(i + 1, j + 1);
this.changeState(i + 1, j);
this.changeState(i + 1, j - 1);
this.changeState(i, j - 1);
} else if (this.mat[i][j] < 0) {
console.log("%cGame Over","color:red;font-size:20px");
document.oncontextmenu = function() {