game of life

by Terrance Smith

HTML

<body> 
  <form> 
    
    3x3 Blinker<br /> 
    <canvas id="blinker" width="75" height="75"> 
        No canvas support found!
    </canvas><br><br> 
    6x6 Glider<br> 
    <canvas id="glider" width="150" height="150"> 
        No canvas support found!
    </canvas><br><br> 
    8x8 Random<br> 
    <canvas id="random" width="200" height="200"> 
        No canvas support found!
    </canvas>
    <br /> 
    <input type="button" value="start" onclick="init();"/>
</form> 
</body>

JavaScript

function run(game, ctx, w, h) {
    game.print(ctx, w, h);
    game.nextGen();

    return 0;
}

function GameOfLife() {
    var x = 0;
    var y = 0;
    var n = 0;
    var i = 0;
    var dx = -1;
    var dy = -1;

    this.init = function(turns, width, height) {
        this.board = new Array(height);
        var x = 0;
        for (x = 0; x < height; x++) {
            this.board[x] = new Array(width);
            var y = 0;
            for (y = 0; y < width; y++) {
                this.board[x][y] = Math.round(Math.random());
            }
        }
        this.turns = turns;
    };

    this.nextGen = function() {
        this.boardNext = new Array(this.board.length);
        for (i = 0; i < this.board.length; i++) {
            this.boardNext[i] = new Array(this.board[i].length);
        }
        for (x = 0; x < this.board.length; x++) {
            for (y = 0; y < this.board[x].length; y++) {
                n = 0;
                for (dx = -1; dx <= 1; dx++) {
                    for (dy = -1; dy <= 1; dy++) {
                        if (dx === 0 && dy === 0) {} else if (typeof this.board[x + dx] !== 'undefined' && typeof this.board[x + dx][y + dy] !== 'undefined' && this.board[x + dx][y + dy]) {
                            n++;
                        }
                    }
                }
                var c = this.board[x][y];
                switch (n) {
                case 0:
                case 1:
                    c = 0;
                    break;
                case 2:
                    break;
                case 3:
                    c = 1;
                    break;
                default:
                    c = 0;
                }
                this.boardNext[x][y] = c;
            }
        }
        this.board = this.boardNext.slice();
    };

    this.print = function(ctx, w, h) {
        if (!w) {
            w = 8;
        }
        if (!h) {
            h = 8;
        }
        for (x = 0; x < this.board.length; x++)...