Advertisement
Guest User

Game of Life

a guest
Apr 18th, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $( document ).ready(function() {
  2.         var grid;
  3.         var pixelX, pixelY, numPixel;
  4.         var canvas = $("#game")[0];
  5.         var ctx = canvas.getContext('2d');
  6.         canvas.width = window.innerWidth;
  7.         canvas.height = window.innerHeight;
  8.         ctx.fillstyle = "white";
  9.         ctx.fillRect(0,0, canvas.width, canvas.height);
  10.         init();
  11.         function randomColor(){
  12.                 return '#'+Math.random().toString(16).substr(-6);
  13.         }
  14.  
  15.         function init(){
  16.                 gosperGlider = [
  17.                         // Gosper glider gun
  18.                         [1, 5],[1, 6],[2, 5],[2, 6],[11, 5],[11, 6],[11, 7],[12, 4],[12, 8],[13, 3],[13, 9],[14, 3],[14, 9],[15, 6],[16, 4],[16, 8],[17, 5],[17, 6],[17, 7],[18, 6],[21, 3],[21, 4],[21, 5],[22, 3],[22, 4],[22, 5],[23, 2],[23, 6],[25, 1],[25, 2],[25, 6],[25, 7],[35, 3],[35, 4],[36, 3],[36, 4]
  19.                 ];
  20.                 pixelX = 10;
  21.                 pixelY = 10;
  22.                 numPixel = Math.floor(canvas.width/pixelX);
  23.                 grid = new Array(numPixel);                
  24.                 for(var i=0; i<grid.length; i++){
  25.                         grid[i] = new Array(numPixel);
  26.                         for(var j=0; j<grid[i].length; j++){
  27.                                 grid[i][j] = 0; //To make all 0 for gosper glider config
  28.                                 //grid[i][j] = (Math.random() >= 0.5) ? 1 : 0;  //To make random config
  29.                         }
  30.                 }
  31.                 for(var i=0; i<gosperGlider.length; i++){
  32.                         grid[gosperGlider[i][0]][gosperGlider[i][1]] = 1;
  33.                 }
  34.         }
  35.         var pixelColor = randomColor();
  36.         var bgColor = randomColor();
  37.  
  38.         function draw(){
  39.                 for(var i=0; i<grid.length; i++){
  40.                         for(var j=0; j<grid[i].length; j++){
  41.                                 if(grid[i][j]==1){
  42.                                         ctx.fillStyle = pixelColor;
  43.                                         ctx.fillRect(i*pixelX, j*pixelY, pixelX-1, pixelY-1);
  44.                                         ctx.fill();
  45.                                 } else {
  46.                                         ctx.fillStyle = bgColor;
  47.                                         ctx.fillRect(i*pixelX, j*pixelY, pixelX-1, pixelY-1);
  48.                                         ctx.fill();
  49.                                 }
  50.                         }
  51.                 }
  52.         }
  53.         window.requestAnimFrame = function(){
  54.             return (
  55.                 window.requestAnimationFrame       ||
  56.                 window.webkitRequestAnimationFrame ||
  57.                 window.mozRequestAnimationFrame    ||
  58.                 window.oRequestAnimationFrame      ||
  59.                 window.msRequestAnimationFrame     ||
  60.                 function(callback){
  61.                     window.setTimeout(callback, 1000/60);
  62.                 }
  63.             );
  64.         }();
  65.         function nextGen(){
  66.                 var nextGrid = [];
  67.                 function neighborCount(i,j){
  68.                         var neighbors = 0;
  69.                         function neighborExists(a,b){
  70.                                 return grid[a] && grid[a][b];
  71.                         }
  72.                         if(neighborExists(i, j-1)) neighbors++;
  73.                         if(neighborExists(i, j+1)) neighbors++;
  74.                         if(neighborExists(i-1, j)) neighbors++;
  75.                         if(neighborExists(i+1, j)) neighbors++;
  76.                         if(neighborExists(i-1, j-1)) neighbors++;
  77.                         if(neighborExists(i+1, j+1)) neighbors++;
  78.                         if(neighborExists(i-1, j+1)) neighbors++;
  79.                         if(neighborExists(i+1, j-1)) neighbors++;
  80.                         return neighbors;
  81.                 }
  82.  
  83.                 for(var i=0; i<grid.length; i++){
  84.                         nextGrid[i] = [];
  85.                         for(var j=0; j<grid[i].length; j++){
  86.                                 var neighbors = neighborCount(i,j);
  87.                                 nextGrid[i][j] = grid[i][j];
  88.                                 if(neighbors < 2 || neighbors > 3) nextGrid[i][j] = 0;
  89.                                 if(grid[i][j] == 0 && neighbors == 3) nextGrid[i][j] = 1;                              
  90.                         }
  91.                 }
  92.                 grid = nextGrid;
  93.                 draw();
  94.                 requestAnimFrame(nextGen);
  95.         }
  96.         nextGen();
  97. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement