//var gridWidth = 30; //var gridHeight = 16; //var gridBombs = 99; //var gridWidth = 9; //var gridHeight = 9; //var gridBombs = 10; //var gridWidth = 16; //var gridHeight = 16; //var gridBombs = 40; //var gridWidth = 11; //var gridHeight = 16; //var gridBombs = 35; var gridWidth = "11"; var gridHeight = "16"; var gridBombs = "30"; var imageDir = "mineimages/"; var fillColour = "#D1F3D2"; var textColour = "#000000"; var borderColour = "#000000"; var mineGrid = new Array(); var gameOver = false; imgHalfFlag = new Image(); imgHalfFlag.src = imageDir + "halfflag.jpg"; imgBadFlag = new Image(); imgBadFlag.src = imageDir + "badflag.jpg"; imgFlag = new Image(); imgFlag.src = imageDir + "flag.jpg"; imgCovered = new Image(); imgCovered.src = imageDir + "covered.jpg"; imgBomb = new Image(); imgBomb.src = imageDir + "bomb.jpg"; imgFlagOn = new Image(); imgFlagOn.src = imageDir + "flagmodeon.jpg"; imgFlagOff = new Image(); imgFlagOff.src = imageDir + "flagmodeoff.jpg"; imgGameOver = new Image(); imgGameOver.src = imageDir + "gameover.jpg"; imgYouWin = new Image(); imgYouWin.src = imageDir + "youwin.gif"; var gridImg = new Array(); gridImg[0] = new Image(); gridImg[0].src = imageDir + "grid0.jpg"; gridImg[1] = new Image(); gridImg[1].src = imageDir + "grid1.jpg"; gridImg[2] = new Image(); gridImg[2].src = imageDir + "grid2.jpg"; gridImg[3] = new Image(); gridImg[3].src = imageDir + "grid3.jpg"; gridImg[4] = new Image(); gridImg[4].src = imageDir + "grid4.jpg"; gridImg[5] = new Image(); gridImg[5].src = imageDir + "grid5.jpg"; gridImg[6] = new Image(); gridImg[6].src = imageDir + "grid6.jpg"; gridImg[7] = new Image(); gridImg[7].src = imageDir + "grid7.jpg"; gridImg[8] = new Image(); gridImg[8].src = imageDir + "grid8.jpg"; // NOTE: stopFindWin=true means that it won't check too see if a game has been completed. function checkSquare(inImage, stopFindWin, inEvent) { //alert("Event alt: " + event.altKey + "\nEvent ctrlKey: " + event.ctrlKey + "\nEvent Shift: " + event.shiftKey); var isSpeshButton = false; if(inEvent) {isSpeshButton = (inEvent.ctrlKey || inEvent.shiftKey)}; if(gameOver) return; var xyarr = inImage.id.split("-"); var thisX = parseInt(xyarr[0]); var thisY = parseInt(xyarr[1]); var fmi = document.getElementById("flagmodeimg"); if(fmi.src == imgFlagOn.src) { if(inImage.src == imgHalfFlag.src) { inImage.src = imgFlag.src; } else { inImage.src = imgHalfFlag.src; } updateScore(); return; } //alert("isSpeshButton: " + isSpeshButton); if(isSpeshButton) { if(inImage.src == imgCovered.src) { inImage.src = imgFlag.src; } else if(inImage.src == imgFlag.src) { inImage.src = imgCovered.src; } updateScore(); return; } if(inImage.src==imgFlag.src) {return;} var isBomb = mineGrid[thisX][thisY]; if(isBomb) { gameOver = true; fmi.src = imgGameOver.src; inImage.src = imgBomb.src; for(cx = 0; cx < gridWidth; cx++) for(cy = 0; cy < gridHeight; cy++) { if(mineGrid[cx][cy]) { timg = document.getElementById(cx + "-" + cy); if(timg.src==imgFlag.src) { timg.src = imgBadFlag.src; } else { timg.src = imgBomb.src; } } } return; } var surCount = 0; var offX; var offY; for(offX = -1; offX <= 1; offX++) for(offY = -1; offY <= 1; offY++) { cx = parseInt(thisX) + offX; cy = parseInt(thisY) + offY; if(cx >= 0 && cy >= 0 && cx < gridWidth && cy < gridHeight) { //alert("checking (" + cx + ", " + cy + ")"); if(mineGrid[cx][cy] == true) surCount++; } } //alert("SurCount: " + surCount); inImage.src = gridImg[surCount].src; var offXx; var offYy; if(surCount == 0) { for(offXx = -1; offXx <= 1; offXx++) for(offYy = -1; offYy <= 1; offYy++) if(offXx==0 && offYy==0) {} else { var chx = parseInt(thisX) + offXx; var chy = parseInt(thisY) + offYy; if(chx >= 0 && chy >= 0 && chx < gridWidth && chy < gridHeight) { var ttimg = document.getElementById(chx + "-" + chy); if(ttimg.src == imgCovered.src) { checkSquare(ttimg, true); curCount = 0; } } } //return; } // checking to find win if(!stopFindWin) { var uncovered = 0; var tcx; var tcy; for(tcx = 0; tcx < gridWidth; tcx++) for(tcy = 0; tcy < gridHeight; tcy++) { timg = document.getElementById(tcx + "-" + tcy); if(timg.src != imgCovered.src && timg.src != imgFlag.src) { uncovered++; } } if(uncovered == (gridWidth * gridHeight) - gridBombs) { //alert('youwin\nunc: ' + uncovered + "\out of: " + (gridWidth*gridHeight)); fmi.src = imgYouWin.src; gameOver = true; for(tcx = 0; tcx < gridWidth; tcx++) for(tcy = 0; tcy < gridHeight; tcy++) { timg = document.getElementById(tcx + "-" + tcy); if(mineGrid[tcx][tcy]) { timg.src = imgFlag.src; } } updateScore(); } } } function updateScore() { var bcd = document.getElementById("bombCountDiv"); var cx; var cy; var fcount = 0; for(cx = 0; cx < gridWidth; cx++) for(cy = 0; cy < gridHeight; cy++) { timg = document.getElementById(cx + "-" + cy); if(timg.src == imgFlag.src) { fcount++; } } bcd.innerHTML = "" + (gridBombs - fcount) + "
left"; } function msreset() { gameOver = false; var fmi = document.getElementById("flagmodeimg"); fmi.src = imgFlagOff.src; // Unsetting All Bombs mineGrid = new Array(gridWidth); for(mgx = 0; mgx < gridWidth; mgx++) { mineGrid[mgx] = new Array(gridHeight); for(mgy = 0; mgy < gridHeight; mgy++) { mineGrid[mgx][mgy] = false; timg = document.getElementById(mgx + "-" + mgy); timg.src = imgCovered.src; } } // Setting Bombs for(mb = 0; mb < gridBombs; mb++) { isUnique = false; while(!isUnique) { isUnique = false; var ranX = parseInt(Math.random() * gridWidth); var ranY = parseInt(Math.random() * gridHeight); //document.write("setting x" + ranX + " y" + ranY); if(mineGrid[ranX][ranY] == false) { mineGrid[ranX][ranY] = true; timg = document.getElementById(ranX + "-" + ranY); //timg.src= imgBomb.src; //alert("timg: " + timg); //document.write("Bomb " + mb + ": (" + ranX + "," + ranY + ")
"); isUnique = true; } else { isUnique = false; //document.write("Warning: Repeat on xy:" + ranX + ", " + ranY + "
"); } } } //document.write("

mb: " + mb + " - gridBombs: " + gridBombs + "

"); updateScore(); } function goFlagMode(inFlagImage) { var cx; var cy; if(inFlagImage.src == imgGameOver.src) return; if(inFlagImage.src == imgYouWin.src) return; if(inFlagImage.src == imgFlagOff.src) { inFlagImage.src = imgFlagOn.src; for(cx = 0; cx < gridWidth; cx++) for(cy = 0; cy < gridHeight; cy++) { timg = document.getElementById(cx + "-" + cy); if(timg.src == imgCovered.src) {timg.src = imgHalfFlag.src;} } } else { inFlagImage.src = imgFlagOff.src; for(cx = 0; cx < gridWidth; cx++) for(cy = 0; cy < gridHeight; cy++) { timg = document.getElementById(cx + "-" + cy); if(timg.src == imgHalfFlag.src) {timg.src = imgCovered.src;} } } } var mineAttempt = 0; function initt(inDiv) { // Drawing insertDiv = document.getElementById(inDiv); //alert("idtest:" + insertDiv); if(mineAttempt > 10) { window.status="Error loading Minesweeper. No Element by the name of '" + inDiv + "' could me found."; return; } if(!insertDiv) { window.status="Attempt " + mineAttempt + " at loading Minesweeper"; setTimeout("initt('" + inDiv + "');",500 * mineAttempt); return; } window.status="Done"; mineAttempt = 0; var outText = ""; outText += ""; outText += ""; for(dcy = 0; dcy < gridHeight; dcy++) { outText += ""; for(dcx = 0; dcx < gridWidth; dcx++) { outText += ""; } outText += ""; } outText += ""; outText += ""; outText += "
Change to andfrom flagmode
"; outText += ""; outText += "
RESET GAME
Find this and more at Ratage.com
"; //outText += "Ref: "; insertDiv.innerHTML = outText; msreset(); }