Game of Life

by Marc Malignan

HTML

<button>START</button>
<span id="nbMinions">0</span>
<canvas id="cvs"></canvas>

CSS

body {
    background: #000;
    color: #eee;
}

#cvs {
    position: absolute;
    top: 50%; left: 50%;
    background: #333;
}

JavaScript

var w = 600;
var h = 400;
var tile = 4;

var tilesX = w/tile;
var tilesY = h/tile;

var cvs = document.getElementById('cvs');
var ctx = cvs.getContext("2d");

var refresh = 50;

var nbMinions = 150;
var maxMinions = 300;
var minions = [];

var deathAge = 50;
var deathChance = 90;

var fightAge = 15;
var fightChance = 50;

var copulateAgeMin = 15;
var copulateAgeMax = 50;
var menopauseChance = 75;
var maxBabies = 3;

var game = null;

function randCoords() {
    return { 
        x: Math.floor(Math.random() * tilesX),
        y: Math.floor(Math.random() * tilesY)
    }
}

function initCvs() {
    $('#cvs')
        .attr('width', w)
        .attr('height', h)
    	.css('width', w+'px')
    	.css('height', h+'px')
    	.css('margin', (h/-2)+'px 0 0 '+(w/-2)+'px');
}

function initData() {
    minions = [];
    
    for(i=0; i<nbMinions; i++) {
        minions[i] = randCoords();
    }
    for(i=0; i<nbMinions; i++) {
        var m = minions[i];
        m.d = 0;
        m.age = 0;
        m.generation = 1;
    }
}

function gameLoop() {
    death();
    if(minions.length > 0) {
        move();
        fight();
        copulate();
        draw();
    }
    else {
        draw();
        clearInterval(game);
    }
}

function move() {
	for(i=0; i<minions.length; i++) {
        
        var m = minions[i];
        var keepDirection = Math.round(Math.random() * 100);
        
        if(keepDirection>75) {
            m.d = Math.floor(Math.random() * 5);
        }

        switch(m.d) {
            case 0: break;
            case 1: m.x--; break;
            case 2: m.x++; break;
            case 3: m.y--; break;
            case 4: m.y++; break;
        }
        
        if(m.x < 0) m.x = 0;
        if(m.y < 0) m.y = 0;
        if(m.x >= tilesX) m.x = tilesX-1;
        if(m.y >= tilesY) m.y = tilesY-1;
    }
}

function copulate() {
    
    var newMinions = [];
    
    for(i=0; i<minions.length; i++) {
        minions[i].copulated = false;
    }
    
	for(i=0;...