Advertisement
KoMeDiAnT

WSH Canway`s Game Of Life

Jun 1st, 2017
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>Conway`s Game Of Life</title>
  5. </head>
  6.  
  7. <body>
  8. <canvas id="myCanvas" width="600" height="600" style="border: 1px solid #000000;" onclick="changeCell()">
  9.     Your browser does not support the HTML5 canvas tag.
  10. </canvas>
  11.  
  12. <p>
  13.     <input type="button" value="Clear" onclick="init()" />
  14.     <input type="button" id="go" value="Run" onclick="run()" />
  15.     <input type="button" value="Stop" onclick="stop()" />
  16.     <input type="button" value="Step" onclick="play()" />
  17. </p>
  18.  
  19. <script>
  20.     function init() {
  21.         for (var i = 0; i < field.length; i++) {
  22.             for (var j = 0; j < field.length; j++) {
  23.                 field[i][j] = 0;
  24.                 ctx.fillStyle = '#FFFFFF';
  25.                 ctx.strokeStyle = '#000000';
  26.                 ctx.strokeRect(cellSize*j, cellSize*i, cellSize, cellSize);
  27.                 ctx.fillRect(cellSize*j, cellSize*i, cellSize, cellSize);
  28.             }
  29.         }
  30.     }
  31.  
  32.     function run() {
  33.         document.getElementById("go").disabled = true;
  34.         timerId = setInterval(play, 400);
  35.     }
  36.  
  37.     function stop() {
  38.         clearInterval(timerId);
  39.         document.getElementById("go").disabled = false;
  40.     }
  41.  
  42.     function play() {
  43.         var newField = new Array(fieldSize);
  44.  
  45.         for (var i = 0; i < fieldSize; i++) {
  46.             newField[i] = new Array(fieldSize);
  47.         }
  48.  
  49.         for (var i = 0; i < fieldSize; i++) {
  50.             for (var j = 0; j < fieldSize; j++) {
  51.                 var count = 0;
  52.  
  53.                 for (var x = -1; x <= 1; x++) {
  54.                     for (var y = -1; y <= 1; y++) {
  55.                         count += field[(i + x + fieldSize) % fieldSize][(j + y + fieldSize) % fieldSize];
  56.                     }
  57.                 }
  58.  
  59.                 count -= field[i][j];
  60.  
  61.                 if (count === 3 && field[i][j] === 0) {
  62.                     newField[i][j] = 1;
  63.                     ctx.fillStyle = '#000000';
  64.                 }
  65.                 else if ((count === 3 || count === 2) && field[i][j] === 1) {
  66.                     newField[i][j] = 1;
  67.                     ctx.fillStyle = '#000000';
  68.                 }
  69.                 else {
  70.                     newField[i][j] = 0;
  71.                     ctx.fillStyle = '#FFFFFF'
  72.                 }
  73.  
  74.                 ctx.strokeStyle = '#000000';
  75.                 ctx.strokeRect(cellSize*j, cellSize*i, cellSize, cellSize);
  76.                 ctx.fillRect(cellSize*j, cellSize*i, cellSize, cellSize);
  77.             }
  78.         }
  79.  
  80.         for (var i = 0; i < fieldSize; i++) {
  81.             for (var j = 0; j < fieldSize; j++) {
  82.                 field[i][j] = newField[i][j];
  83.             }
  84.         }
  85.     }
  86.  
  87.     function changeCell() {
  88.         var x = Math.ceil(((event.pageX - 9) / cellSize) - 1);
  89.         var y = Math.ceil(((event.pageY - 9) / cellSize) - 1);
  90.  
  91.         if (field[y][x] === 1) {
  92.             field[y][x] = 0;
  93.             ctx.fillStyle = '#FFFFFF';
  94.         }
  95.         else {
  96.             field[y][x] = 1;
  97.             ctx.fillStyle = '#000000';
  98.         }
  99.  
  100.         ctx.strokeStyle = '#000000';
  101.         ctx.strokeRect(cellSize*x, cellSize*y, cellSize, cellSize);
  102.         ctx.fillRect(cellSize*x, cellSize*y, cellSize, cellSize);
  103.     }
  104.  
  105.     var fieldSize = 60;
  106.     var cellSize = 10;
  107.     var field = new Array(fieldSize);
  108.     var timerId = setInterval(play, 400);
  109.  
  110.     for (var i = 0; i < field.length; i++) {
  111.         field[i] = [];
  112.     }
  113.  
  114.     for (var i = 0; i < fieldSize; i++) {
  115.         for (var j = 0; j < fieldSize; j++) {
  116.             field[i][j] = 0;
  117.         }
  118.     }
  119.  
  120.     var canvas = document.getElementById("myCanvas");
  121.     var ctx = canvas.getContext("2d");
  122.  
  123.     for (var i = 0; i < fieldSize; i++) {
  124.         for (var j = 0; j < fieldSize; j++) {
  125.             ctx.fillStyle = '#FFFFFF';
  126.             ctx.strokeStyle = '#000000';
  127.             ctx.strokeRect(cellSize*j, cellSize*i, cellSize, cellSize);
  128.             ctx.fillRect(cellSize*j, cellSize*i, cellSize, cellSize);
  129.         }
  130.     }
  131. </script>
  132.  
  133. </body>
  134. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement