Skip to content

Instantly share code, notes, and snippets.

@seysn
Last active February 5, 2016 22:15
Show Gist options
  • Save seysn/1fa7c15cb88ede897ded to your computer and use it in GitHub Desktop.
Save seysn/1fa7c15cb88ede897ded to your computer and use it in GitHub Desktop.
// 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