Last active
February 5, 2016 22:15
-
-
Save seysn/1fa7c15cb88ede897ded to your computer and use it in GitHub Desktop.
This file contains 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
// la grille de cellule avec un ensemble fixe (le carr�) et un clignotant | |
var monde = [ | |
[0,0,0,0,0,0,0,0], | |
[0,1,1,0,0,0,0,0], | |
[0,1,1,0,0,0,0,0], | |
[0,0,0,0,0,0,0,0], | |
[0,0,0,0,1,0,0,0], | |
[0,0,0,0,1,0,0,0], | |
[0,0,0,0,1,0,0,0], | |
[0,0,0,0,0,1,1,1] | |
]; | |
// fonction cr�eant un tableau � deux dimensions de nbLig lignes et nbCol colonnes, initialis� avec la valeur value | |
// il est conseill� de commencer avec un tableau � une dimension dans lequel on ajoute progressivement chacune des lignes, repr�sent�es sous la forme d'un tableau � une dimension de nombres | |
var mondeVide = function(nbLig, nbCol, value){ | |
var res = []; | |
for (var i = 0; i < nbLig; i++) { | |
res[i] = []; | |
for (var j = 0; j < nbCol; j++) { | |
res[i][j] = value; | |
} | |
} | |
return res; | |
}; | |
// il vaut mieux avoir un tableau temporaire lors du calcul de la g�n�ration suivante ;) | |
var mondeTMP = mondeVide(8, 8, 0); | |
// fonction prenant en param�tre un tableau � deux dimensions contenant des 0 et 1 qui affiche le tableau sous forme de caract�re dans la <tt>div</tt> d'<tt>id</tt> �gal � <tt>GOLScreen</tt> | |
var affiche = function(m) { | |
var screen = document.getElementById("GOLScreen"); | |
screen.style['font-family'] = 'monospace'; | |
screen.innerHTML = ''; | |
for (var idxL=0; idxL<m.length; idxL++) { | |
var ligne = ""; | |
for (var idxC=0; idxC < m[0].length; idxC++) { | |
ligne += (m[idxL][idxC] === 0 ? '.' : '*'); | |
} | |
var node = document.createTextNode(ligne); | |
screen.appendChild(node); | |
var newLine = document.createElement("br"); | |
screen.appendChild(newLine); | |
} | |
} | |
// calcul le nombre de cellules vivantes autour de la cellule de coordonn�es (lig, col) | |
var voisins = function(lig, col) { | |
var cpt = 0; | |
for (var i = lig - 1; i <= lig + 1; i++) { | |
for (var j = col - 1; j <= col + 1; j++) { | |
if (i == lig && j == col) | |
continue; | |
if (monde[(i + monde.length) % monde.length][(j + monde[0].length) % monde.length] == 1) | |
cpt++; | |
} | |
} | |
return cpt; | |
}; | |
// d�termine l'�tat d'une cellule � la g�n�ration suivante, le premier param�tre vaut 0 ou 1 (�tat de la cellule actuelle et le second correspond au nombre de cellules vivantes l'entourant | |
var evolution = function(vivante, nbVoisins) { | |
if (vivante === 0) { | |
return nbVoisins === 3 ? 1 : 0; | |
} else { | |
return (nbVoisins === 3 || nbVoisins === 2) ? 1 : 0; | |
} | |
} | |
// effectue un pas de simulation, en parcourant monde et initialisant mondeTMP avec les cellules de la g�n�ration suivante, puis recopie mondeTmp dans monde | |
var simule = function() { | |
mondeTMP = mondeVide(8, 8, 0); | |
for (var i = 0; i < monde.length; i++) { | |
for (var j = 0; j < monde[0].length; j++) { | |
mondeTMP[i][j] = evolution(monde[i][j], voisins(i, j)); | |
} | |
} | |
monde = mondeTMP; | |
}; | |
// appelle toutes les secondes la fonction pass�e en premier param�tre | |
for (var i=0; i < 1000; i++) { | |
setTimeout(function() {affiche(monde); simule(); }, 200*i); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment