Free Code for mine sweeper


SUBMITTED BY: koreatea123

DATE: Dec. 27, 2018, 1:28 a.m.

FORMAT: Text only

SIZE: 5.0 kB

HITS: 174

  1. <html>
  2. <body oncontextmenu='return false;' >
  3. <br><br><br>
  4. <label id='status'></label>
  5. <script>
  6. const rows = 4;
  7. const columns = 20;
  8. let mines, remaining, revealed;
  9. let status = document.getElementById('status');
  10. status.addEventListener('click', init)
  11. let board = new Array(rows);
  12. let picture = new Array(rows);
  13. let tile = new Array(rows);
  14. for (let i = 0; i < board.length; i++) {
  15. board[i] = new Array(columns);
  16. picture[i] = new Array(columns);
  17. tile[i] = new Array(columns)
  18. }
  19. init();
  20. function check(row, column) {
  21. if (column >= 0 && row >= 0 && column < columns && row < rows)
  22. return board[row][column];
  23. }
  24. function init() {
  25. mines = 5;
  26. remaining = mines;
  27. revealed = 0;
  28. status.innerHTML = ('Click on the tiles to reveal them');
  29. for (let row = 0; row < rows; row++)
  30. for (let column = 0; column < columns; column++) {
  31. let index = row * columns + column;
  32. tile[row][column] = document.createElement('img');
  33. tile[row][column].src = 'hidden.png';
  34. tile[row][column].style = 'position:absolute;height:30px; width: 30px';
  35. tile[row][column].style.top = 150 + row * 30;
  36. tile[row][column].style.left = 50 + column * 30;
  37. tile[row][column].addEventListener('mousedown', click);
  38. tile[row][column].id = index;
  39. document.body.appendChild(tile[row][column]);
  40. picture[row][column] = 'hidden';
  41. board[row][column] = '';
  42. }
  43. let placed = 0;
  44. do {
  45. let column = Math.floor(Math.random() * columns);
  46. let row = Math.floor(Math.random() * rows);
  47. if (board[row][column] != 'mine') {
  48. board[row][column] = 'mine';
  49. placed++;
  50. }
  51. } while (placed < mines);
  52. for (let column = 0; column < columns; column++)
  53. for (let row = 0; row < rows; row++) {
  54. if (check(row, column) != 'mine') {
  55. board[row][column] =
  56. ((check(row + 1, column) == 'mine') | 0) +
  57. ((check(row + 1, column - 1) == 'mine') | 0) +
  58. ((check(row + 1, column + 1) == 'mine') | 0) +
  59. ((check(row - 1, column) == 'mine') | 0) +
  60. ((check(row - 1, column - 1) == 'mine') | 0) +
  61. ((check(row - 1, column + 1) == 'mine') | 0) +
  62. ((check(row, column - 1) == 'mine') | 0) +
  63. ((check(row, column + 1) == 'mine') | 0);
  64. }
  65. }
  66. }
  67. function click(event) {
  68. let source = event.target;
  69. let id = source.id;
  70. let row = Math.floor(id / columns);
  71. let column = id % columns;
  72. if (event.which == 3) {
  73. switch (picture[row][column]) {
  74. case 'hidden':
  75. tile[row][column].src = 'flag.png';
  76. remaining--;
  77. picture[row][column] = 'flag';
  78. break;
  79. case 'flag':
  80. tile[row][column].src = 'question.png';
  81. remaining++;
  82. picture[row][column] = 'question';
  83. break;
  84. case 'question':
  85. tile[row][column].src = 'hidden.png';
  86. picture[row][column] = 'hidden';
  87. break;
  88. }
  89. event.preventDefault();
  90. }
  91. status.innerHTML = 'Mines remaining: ' + remaining;
  92. if (event.which == 1 && picture[row][column] != 'flag') {
  93. if (board[row][column] == 'mine') {
  94. for (let row = 0; row < rows; row++)
  95. for (let column = 0; column < columns; column++) {
  96. if (board[row][column] == 'mine') {
  97. tile[row][column].src = 'mine.png';
  98. }
  99. if (board[row][column] != 'mine' && picture[row][column] == 'flag') {
  100. tile[row][column].src = 'misplaced.png';
  101. }
  102. }
  103. status.innerHTML = 'GAME OVER<br><br>Click here to restart';
  104. } else
  105. if (picture[row][column] == 'hidden') reveal(row, column);
  106. }
  107. if (revealed == rows * columns - mines)
  108. status.innerHTML = 'YOU WIN!<br><br>Click here to restart';
  109. }
  110. function reveal(row, column) {
  111. tile[row][column].src = board[row][column] + '.png';
  112. if (board[row][column] != 'mine' && picture[row][column] == 'hidden')
  113. revealed++;
  114. picture[row][column] = board[row][column];
  115. if (board[row][column] == 0) {
  116. if (column > 0 && picture[row][column - 1] == 'hidden') reveal(row, column - 1);
  117. if (column < (columns - 1) && picture[row][+column + 1] == 'hidden') reveal(row, +column + 1);
  118. if (row < (rows - 1) && picture[+row + 1][column] == 'hidden') reveal(+row + 1, column);
  119. if (row > 0 && picture[row - 1][column] == 'hidden') reveal(row - 1, column);
  120. if (column > 0 && row > 0 && picture[row - 1][column - 1] == 'hidden') reveal(row - 1, column - 1);
  121. if (column > 0 && row < (rows - 1) && picture[+row + 1][column - 1] == 'hidden') reveal(+row + 1, column - 1);
  122. if (column < (columns - 1) && row < (rows - 1) && picture[+row + 1][+column + 1] == 'hidden') reveal(+row + 1, +column + 1);
  123. if (column < (columns - 1) && row > 0 && picture[row - 1][+column + 1] == 'hidden') reveal(row - 1, +column + 1);
  124. }
  125. }
  126. </script>
  127. </body></html>

comments powered by Disqus