Created
October 1, 2011 00:11
-
-
Save jl2/1255396 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function randInt(minv, maxv) { | |
var rv = minv + Math.floor(Math.random()*(maxv-minv)); | |
return rv; | |
} | |
function initialize(width, height, prob) { | |
var life = new Array(height); | |
for (var i = 0; i<height; ++i) { | |
life[i] = new Array(width); | |
for (var j=0; j<width; ++j) { | |
life[i][j] = false; | |
} | |
} | |
var numFilled = (width*height*prob); | |
for (var i=0;i<numFilled; ++i) { | |
var ri = randInt(0, height); | |
var rj = randInt(0, width); | |
life[ri][rj] = true; | |
} | |
return life; | |
} | |
function countNeighbors(i,j,arr) { | |
var h = arr.length; | |
var w = arr[0].length; | |
var num = 0; | |
var up = i-1>0 ? i-1 : h-1; | |
var down = i+1 <h-1 ? i+1 : 0; | |
var left = j-1>0 ? j-1 : w-1; | |
var right = j+1 < w-1 ? j+1 : 0; | |
num += arr[up][j]; | |
num += arr[down][j]; | |
num += arr[i][left]; | |
num += arr[i][right]; | |
num += arr[up][left]; | |
num += arr[up][right]; | |
num += arr[down][left]; | |
num += arr[down][right]; | |
return num; | |
} | |
function evolve(arr) { | |
var h = arr.length; | |
var w = arr[0].length; | |
var rval = new Array(h); | |
for (var i=0;i<h;++i) { | |
rval[i] = new Array(w); | |
} | |
for (var i=0; i<h; ++i) { | |
for (var j=0; j<w; ++j) { | |
var num = countNeighbors(i,j,arr); | |
if (arr[i][j]) { | |
if ((num < 2) || (num > 3)) { | |
rval[i][j] = false; | |
} else { | |
rval[i][j] = true; | |
} | |
} else { | |
if (num == 3) { | |
rval[i][j] = true; | |
} else { | |
rval[i][j] = false; | |
} | |
} | |
} | |
} | |
return rval; | |
} | |
function show(iter, arr) { | |
var h = arr.length; | |
var w = arr[0].length; | |
for (var i=0;i<h; ++i) { | |
for (var j=0;j<w; ++j) { | |
if (arr[i][j]) { | |
// new solidblock(new point(i,j,2*iter), new point(i+1,j+1,2*iter+1)); | |
new solidblock(new point(i,j,iter), new point(i+1,j+1,iter+1)); | |
} | |
} | |
} | |
} | |
function game_of_life(width, height, iterations) { | |
var life_board = initialize(width, height, 0.42); | |
for (var iter = 0; iter<iterations; ++iter) { | |
show(iter, life_board); | |
life_board = evolve(life_board); | |
} | |
} | |
game_of_life(10,10,20); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment