Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head><title>Javascript Minesweeper</title>
- <style type="text/css">
- .a {
- color: blue;
- text-decoration: underline;
- cursor: pointer }
- .y {
- overflow: auto;
- max-width: 800px;
- max-height: 600px;
- text-align: center;
- vertical-align: middle;
- }
- span#stats {
- font-size: 80%;
- }
- </style>
- <script type="text/javascript">
- <!--
- var h, w, m; // Height, width, mines in board
- var squares = []; // Holds board data - 1,2,4 bits = mine,flag,opened
- var patterns =
- [[[3,2], [0,0], [0,1], [0,2], [3,0], [3,1], [3,2], [1,1,2,1]], // linear
- [[2,3], [0,0], [1,0], [2,0], [0,3], [1,3], [2,3], [1,1,1,2]], // linear
- [[6,2], [0,0], [0,1], [0,2], [6,0], [6,1], [6,2], [1,1,2,1], [2,1,4,1],[4,1,5,1]], // double linear
- [[2,6], [0,0], [1,0], [2,0], [0,6], [1,6], [2,6], [1,1,1,2], [1,2,1,4],[1,4,1,5]], // double linear
- [[3,3], [0,0], [3,0], [0,3], [3,3], [1,1,1,2], [1,1,2,1], [1,2,2,2]]]; // block
- function initialize() {
- loadBoard(262, 718, 40000);
- var max = 10;
- var z = 0;
- var k = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
- var total = 0;
- document.getElementById('stats').innerHTML = "";
- for (var q=0; q<max; q++) {
- placeMines();
- var holder = [];
- for (var i=0; i<h+2; i++) {
- holder[i] = [];
- for (var j=0; j<w+2; j++) {
- if (j==0 || j==w+1 || i==0 || i==h+1) holder[i][j] = 1;
- else holder[i][j] = (squares[i-1][j-1] & 1);
- }
- }
- if (countGuesses(holder) >= k.length) {
- for (var i=k.length; i<=countGuesses(holder); i++) {
- k[i] = 0;
- }
- }
- k[countGuesses(holder)]++;
- total += countGuesses(holder);
- }
- document.getElementById('stats').innerHTML += k + "<br>" + (total/max);
- }
- function loadBoard(newH, newW, newM) {
- h = newH;
- w = newW;
- m = newM;
- for (var i=0; i<h; i++) {
- squares[i] = [];
- for (var j=0; j<w; j++) {
- squares[i][j] = 0;
- }
- }
- }
- function clearBoard() {
- for (var i=0; i<h; i++) {
- for (var j=0; j<w; j++) {
- squares[i][j] = 0;
- }
- }
- }
- function placeMines() {
- clearBoard();
- for (var i=0; i<m; i++) {
- var done = false;
- while (!done) {
- var newX = Math.floor(Math.random() * w);
- var newY = Math.floor(Math.random() * h);
- if ((squares[newY][newX] & 1) == 0) {
- squares[newY][newX]++;
- done = true;
- }
- }
- }
- }
- function printMines() {
- var s="<pre>";
- for (var i=0; i<h; i++) {
- for (var j=0; j<w; j++) {
- s += (squares[i][j]==0 ? "." : "X")
- }
- s += "<br>";
- }
- document.getElementById('stats').innerHTML += s;
- }
- function countGuesses(arr) {
- var num=0;
- for (var a=0; a<patterns.length; a++) { // a-th pattern
- for (var b=0; b<h+2-patterns[a][0][0]; b++) { // i index
- for (var c=0; c<w+2-patterns[a][0][1]; c++) { // j index
- var good = true;
- for (var d=1; d<patterns[a].length; d++) { // number of the set
- var cnt = 0;
- for (var e=0; 2*e<patterns[a][d].length; e++) { // coordinate pair of the set
- cnt += arr[b+patterns[a][d][2*e]][c+patterns[a][d][2*e+1]];
- }
- if (cnt != 1) good = false;
- }
- //if (good) {num++; document.getElementById('stats').innerHTML += b+"."+c+"<br>";}
- if (good) num++;
- }
- }
- }
- return num;
- }
- function isMine(x, y) {
- if (isValid(x,y) && (squares[y][x] & 1) > 0) return 1;
- else return 0;
- }
- function isValid(x, y) {
- if (x < 0 || y < 0 || x >= w || y >= h) return false;
- return true;
- }
- // -->
- </script></head>
- <body onload="initialize()" onkeydown="if(event.keyCode==113) resetBoard(false)" bgcolor="#f8f8f8">
- <span id="stats"> </span>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement