xxxxxxxxxx
180
var size =10;
var grid =10;
var mineCount;
var mines = [];
var w
var first = true
var gameover = false
var victory = false
var timerValue = 0;
var timer;
var sizeSlider;
var mineSlider;
var resetbutton;
function setup() {
for (let element of document.getElementsByClassName("p5Canvas")) {
element.addEventListener("contextmenu", (e) => e.preventDefault());
}
canvas = createCanvas(window.innerWidth,window.innerHeight);
resetbutton = createButton("Restart")
resetbutton.mousePressed(restart)
resetbutton.position(width/2,height-50)
sizeSlider = createSlider(3,30,10,1)
mineSlider = createSlider(5,500,10,5)
size = 10
mineCount = 10
restart()
}
function restart(){
clearInterval(timer)
gameover = false
victory = false
w = (height-100)/size;
sizeSlider.size(w*size*0.8)
mineSlider.size(w*size*0.8)
sizeSlider.position(width/2 - size*w/2,height-100)
mineSlider.position(width/2 - size*w/2,height+20-100)
first=true
mines = []
grid = new Array(size*size)
for(let i=0; i<size; i++){
for(let j=0; j<size; j++){
grid[i*size+j] = new Tile(i,j)
}
}
timerValue = 0
}
function draw() {
translate(width/2 - size*w/2,0)
if(size != sizeSlider.value()){
size = sizeSlider.value()
restart()
}
if(mineCount != min(mineSlider.value(),size*size-1)){
mineCount = min(mineSlider.value(),size*size-1)
restart()
}
background(220);
textAlign(RIGHT)
stroke(255)
textSize(20);
fill(0)
text(sizeSlider.value() + " size",size*w,height-83)
text(min(mineSlider.value(),size*size-1) + " mines",size*w,height-63)
for(let i=0; i<grid.length; i++){
grid[i].show()
}
if(gameover) {
textAlign(CENTER)
stroke(255)
textSize(150);
fill(0)
text("GAMEOVER\n"+timerValue +"sec",size*w/2,height/2)
}
if(victory) {
textAlign(CENTER)
stroke(0)
textSize(150);
fill(0,200,0)
text("VICTORY\n"+timerValue+"sec",size*w/2,height/2)
}
textAlign(LEFT)
stroke(255)
textSize(30);
fill(0)
text(timerValue +"sec",0,height-20)
}
function mousePressed(){
let translatedX =mouseX-(width/2 - size*w/2)
if(mouseY> size*w || translatedX>size*w || translatedX <0 || gameover || victory){
return
}
if(first){
first = false;
let options = grid.slice();
options.splice(floor(translatedX/w)*size + floor(mouseY/w),1)
for(let i=0; i<mineCount; i++){
let index = floor(random(options.length))
let mine = options[index]
grid[mine.x*size + mine.y].mine=true
options.splice(index,1)
}
for(let i=0; i<size*size;i++){
grid[i].countNeighbors()
}
grid[floor(translatedX/w)*size + floor(mouseY/w)].reveal()
timerCountdown()
} else {
if(mouseButton === LEFT){
if(grid[floor(translatedX/w)*size + floor(mouseY/w)].mine){
gameover = true
revealAll()
}
grid[floor(translatedX/w)*size + floor(mouseY/w)].reveal()
} else {
if(!grid[floor(translatedX/w)*size + floor(mouseY/w)].revealed) {
grid[floor(translatedX/w)*size + floor(mouseY/w)].flag = true
}
}
}
victory = true
for(let i = 0; i < size*size;i++){
if(!grid[i].mine){
if(!grid[i].revealed || gameover){
victory = false
break;
}
}
}
if(victory){
revealAll()
clearInterval(timer)
}
}
function revealAll(){
for(let i = 0; i < size*size;i++){
grid[i].revealed = true
}
}
function timerCountdown() {
timer = setInterval(function() {
if (!victory && !gameover) {
timerValue++;
}else{
clearInterval(timer)
}
}, 1000);
}