Advertisement
Guest User

Untitled

a guest
Jul 6th, 2015
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. <html>
  2.  
  3. <head><title>Memory Minesweeper</title></head>
  4. <style>
  5. table{
  6. width: 100%;
  7. height: 100%; }
  8. .square{
  9. width: 100%;
  10. height: 100%;
  11. background-color: lightgray; }
  12. .square.mine{
  13. background-color: black; }
  14. .playing .square{
  15. background-color: black; }
  16. .playing .square.mine{
  17. background-color: black; }
  18. .playing .square.show{
  19. background-color: lightgray; }
  20. .playing .square.show.mine{
  21. background-color: red; }
  22. .playing.victory .square.mine{
  23. background-color: red; }
  24. body{
  25. margin: 0px; }
  26. </style>
  27.  
  28.  
  29.  
  30. <body>
  31. <div id="main"></div>
  32. </body>
  33.  
  34. <script>
  35.  
  36. // sequence is always one of three possibilities.
  37. var SEED = Math.floor(3 * Math.random());
  38. console.log("Random seed: "+ SEED);
  39.  
  40. function rng(seed){ //blum blum shub, I think. doesnt matter, it works.
  41. var p = 6473197,
  42. q = 9999991,
  43. x = seed? seed : 0;
  44. x += 26483638;
  45. m = p * q;
  46.  
  47. function next(n){
  48. if(x<2){
  49. x=2;
  50. console.warn("rng state less than 2");}
  51. x = Math.floor((x*x)%m);
  52. return n? x%n : x; }
  53. next(); next(); next();
  54. next(); next(); next();
  55. next(); next(); next();
  56. return next;
  57. }
  58.  
  59. var rand = (function(){
  60. var r = rng(SEED),
  61. max = 1000*1000;
  62. return function(){
  63. return r(max)/max; }
  64. })();
  65.  
  66. function X(parnt, tag, props){
  67. if(!tag) tag = 'div';
  68. var elem = document.createElement(tag);
  69. if(parnt) parnt.appendChild(elem);
  70. if(props)
  71. for(var k in props){
  72. elem[k] = props[k]; }
  73. return elem;
  74. }
  75.  
  76.  
  77.  
  78. function newboard(arr, n, p){
  79. if(!p) p = 0.5;
  80. for(var i=0; i<n; ++i){
  81. for(var j=0; j<n; ++j){
  82. arr[i + n*j] = (rand() < p)? 1 : 0; }}
  83. return arr;
  84. }
  85.  
  86. function board(div, n, arr){
  87. console.log("board: " + n);
  88. div.innerHTML = "";
  89. var t = X(div, 'table');
  90. var resetdelay = 1000;
  91. var startdelay = 2000;
  92. var clicked = 0;
  93. var mines = 0;
  94. var finished = true;
  95. function start(){
  96. finished = false;
  97. t.className += " playing"; }
  98. setTimeout(start, startdelay);
  99. function click(){
  100. if(finished) return;
  101. if(this.className.indexOf('show') != -1){
  102. return; }
  103. this.className += " show";
  104. ++clicked;
  105. if(this.className.indexOf('mine') != -1){
  106. finished = true;
  107. setTimeout(board, resetdelay, div, n, arr); }
  108. else if(clicked + mines == n*n){
  109. finished = true;
  110. t.className += " victory";
  111. setTimeout(board, resetdelay, div, n+1, newboard(arr, n+1)); }}
  112. for(var i=0; i<n; ++i){
  113. var tr = X(t, 'tr');
  114. for(var j=0; j<n; ++j){
  115. var val = arr[i + j*n];
  116. if(val) ++mines;
  117. var td = X(tr, 'td');
  118. var props = {
  119. className: 'square' + (val? ' mine' : ''),
  120. onclick: click};
  121. X(td, 'div', props); }}
  122. }
  123.  
  124.  
  125. function init(){
  126. console.log("init");
  127. var n = 3;
  128. var array = newboard([], n);
  129. var main = document.getElementById("main");
  130. board(main, n, array);
  131. }
  132. window.addEventListener("load", init);
  133.  
  134. </script>
  135. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement