- function generate() {
- generation += 1;
- var x = 0;
- var y = generation * cellHeight;
- var s = '0' + world.map(function(c) { return c.state }).join('') + '0';
- world = [];
- for (var i = 0; i < cells; i++) {
- world.push(new cell(x, y, cellWidth, cellHeight));
- x += cellWidth;
- state[s.substr(i, 3)] == 1 ? world[i].revive() : world[i].kill();
+ function tick(automaton) {
+ automaton.generation += 1;
+ var universe = automaton.population;
+ var newUniverse = [];
+ for (var i = 0; i < universe.length; i++) {
+ newUniverse[i] = [];
+ for (var ii = 0; ii < universe[i].length; ii++) {
+ var neighbors = (universe[i][ii+1] ? universe[i][ii+1].state : 0) +
+ (universe[i][ii-1] ? universe[i][ii-1].state : 0) +
+ (universe[i+1] ?
+ (universe[i+1][ii] ? universe[i+1][ii].state : 0) +
+ (universe[i+1][ii+1] ? universe[i+1][ii+1].state : 0) +
+ (universe[i+1][ii-1] ? universe[i+1][ii-1].state : 0)
+ : 0) +
+ (universe[i-1] ?
+ (universe[i-1][ii] ? universe[i-1][ii].state : 0) +
+ (universe[i-1][ii-1] ? universe[i-1][ii-1].state : 0) +
+ (universe[i-1][ii+1] ? universe[i-1][ii+1].state : 0)
+ : 0);
+ universe[i][ii].neighbors = neighbors;
+ if (universe[i][ii].state == 1) {
+ if (neighbors < 2 || neighbors > 3) {
+ newUniverse[i][ii] = 0;
+ } else {
+ newUniverse[i][ii] = 1;
+ }
+ } else {
+ newUniverse[i][ii] = (neighbors == 3 ? 1 : 0);
+ }
+ }