Tout est prétexte à se mettre à programmer ! Surtout en Linotte ...

Suite à un Atelier sur le site du zero ( http://www.siteduzero.com/forum/sujet/a ... -de-conway ), je me suis amusé à implémenter l'algorithme du jeu de la vie en horloge...

ça donne un truc étrange mais je me suis bien amusé !

[php]
/* http://www.siteduzero.com/forum/sujet/a ... -de-conway */
/* Les cellules sont activées par les chiffres de l'horloge */
/* Titre : L'horloge de la vie */
/* Auteur : MetalM Août 2013 */
/* Licence : GPL v3 */

espèces
santé est un drapeau valant faux
état est un nombre valant 0
espèce cellule hérite de rectangle et contient santé, état

globale
// Pour l'algo du jeu de la vie
faire vivre est un nombre valant 1
tuer est un nombre valant -1
rien faire est un nombre valant 0
population est un casier de cellule
// Pour l'horloge
chiffres est un casier de casier valant {1,1,1,1,1,1,1,1,1,1},
{0,1,1,1,0,1,0,1,0,1},
{1,1,0,1,1,1,1,0,1,1},
{1,1,0,1,1,1,0,1,1,1},
{1,0,1,0,1,1,0,1,0,1},
{1,1,1,0,1,1,0,1,1,1},
{1,0,1,0,1,1,1,1,1,1},
{1,1,0,1,0,1,0,1,0,1},
{1,1,1,1,0,0,1,1,1,1},
{1,1,1,1,0,1,0,1,0,1}
allumée est un texte valant "menthe à l'eau"
éteint est un texte valant "vert de hooker"

algorithme :
sol est un toile, largeur vaut 500, hauteur vaut 500, couleur vaut "noir"
position est un nombre
position x est un nombre
position y est un nombre
eve est une cellule, couleur vaut éteint, plein vaut "non", largeur vaut 10, hauteur vaut 10
début
// **********************
// Préparation du monde :
// **********************
pour chaque 50, lis
position x vaut joker
pour chaque 50, lis
position y vaut joker
ajoute clone(eve) dans population
déplace population{position} vers position x * 10 et position y * 10
projette population{position}
incrémente position
ferme
ferme
// *****************************
// Algorithme du jeu de la vie :
// *****************************
appelle horloge
tant que vrai, lis
position vaut 0
pour chaque population, lis
algo est un nombre
si (position-51)>
=0, algo vaut algo + ter((santé de (population{position-51}))=vrai,1,0)
si (position-50)>
=0, algo vaut algo + ter((santé de (population{position-50}))=vrai,1,0)
si (position-49)>
=0, algo vaut algo + ter((santé de (population{position-49}))=vrai,1,0)
si (position-1)>
=0, algo vaut algo + ter((santé de (population{position-1}))=vrai,1,0)
si (position+1)<
2500, algo vaut algo + ter((santé de (population{position+1}))=vrai,1,0)
si (position+49)<
2500, algo vaut algo + ter((santé de (population{position+49}))=vrai,1,0)
si (position+50)<
2500, algo vaut algo + ter((santé de (population{position+50}))=vrai,1,0)
si (position+51)<
2500, algo vaut algo + ter((santé de (population{position+51}))=vrai,1,0)
si algo = 3, état de joker vaut faire vivre
sinon si algo = 2, état de joker vaut rien faire
sinon si (algo <
2) ou (algo >
3), état de joker vaut tuer
incrémente position
ferme
pour chaque population, lis
// Mis à jour des états des cellules :
si (état de joker) = tuer, santé de joker vaut faux
sinon si (état de joker) = faire vivre, santé de joker vaut vrai
plein de joker vaut ter((santé de joker) = vrai, "oui", "non")
ferme
attends 10 millisecondes
ferme

horloge :
/*
Pour chaque chiffre dans l'heure, affiche le nombre sur la grille
*/
début
tant que vrai, lis
h <
- heure
m <
- minute
s <
- seconde
// Heures
parcours analyse avec chiffres{entier(h/10)}, 1, 18
parcours analyse avec chiffres{décimal(h/10)*10}, 9, 18
// Minutes
parcours analyse avec chiffres{entier(m/10)}, 19, 18
parcours analyse avec chiffres{décimal(m/10)*10}, 27, 18
// Secondes
parcours analyse avec chiffres{entier(s/10)}, 37, 18
parcours analyse avec chiffres{décimal(s/10)*10}, 45, 18
attends 1 seconde
ferme

analyse :
/*
Affiche un nombre sur la grille suivant son patron
*/
* chiffre est un casier de nombres
* sx est un nombre
* sy est un nombre
i & ii est un nombre
début
pour i de 0 à 9 suivant i+2, lis
parcours dessine avec chiffre{i}, sx, sy + ii
parcours dessine avec chiffre{i+1}, sx + 3, sy + ii
ii vaut ii + 3
ferme
reviens

dessine :
/*
Active ou pas une cellule
*/
*valide est un nombre
*x est un nombre
*y est un nombre
valeur est un drapeau
couleur est un texte
début
si valide = 1, lis
valeur vaut vrai
couleur vaut allumée
ferme
sinon lis
valeur vaut faux
couleur vaut éteint
ferme
pour chaque {0,-51,-50,-49,-1,1,49,50,51}, lis
santé de (population{y+(x*50+joker)}) vaut valeur
couleur de (population{y+(x*50+joker)}) vaut couleur
ferme
reviens
[/php]