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;...