Un article de Mmmm!!!

Jeu de la vie en PHP.


Nous allons voir l'implementation d'un jeux de la vie en PHP. Idees bien sogrenu me direz vous, he bien je doit avouer que Oui, il faut que j'arrete la moquette , que je fasse du sport, que je fonde une famille tel charles ingales dans la petit maison dans la prairie.

Le jeu de la vie.

Pour les gens ne connaissant pas ce que c'est qu'un jeu de la vie allez voir a cette adresse
Voici quelques liens sur les jeux de la vie.
Les automates cellulaires c'est quand meme assez serieux:i

Donc nous allons lire un fichier contenant des carateres "#" pour les cellules vivantes et "_" pour les cases vides , par exemple
____________________
____________________
____________________
____________________
____________________
____________________
____________________
________#___________
_______###__________
______###_#_________
_______#___#________
________#___#_______
_________#_###______
__________###_______
___________#________
____________________
____________________
____________________
____________________
____________________
Et on allons le mettre dans une matrice a deux dimensions..

Les tableaux a plusieurs dimensions en PHP

Php a une particularité par rapport aux autres langages comme le C,C++, Java, voir même Tcl. Pour faire un tableau a plusieurs dimensions il faut imbriquer les tableaux les un dans les autres.
Je m'en suis rendu compte en m'acharnnant a faire marcher des commandes du style $tab[$i,$j], ou $tab[$i][$j] etc...
En fait il faut faire comme c'est bien marquer dans le manuel php quelque chose comme $tabbidim=array ("toto" => array ( "1"=>"toto premier ", "2"=> "toto second " ) );
Bref, je me suis appercu de la chose lorque j'ecris ces lignes. Cependant j'ai fait autrement, car je voulait un tableau a deux dimensions avec la possibilité de récuperer l'elements en X,Y. Je suis passé par une HASHTABLE contenant des cles "X_Y".

Revenons a nos cellules

Voici une description des fonctions utilisées:
  1. function getidxfromxy($x,$y) : fonction retournant
  2. function setworldfromxy($x,$y,$data) : position le contenu de la cellule en x , y avec la valeur data.
  3. function getworld($x,$y) : fonction donnant le contenu de la cellule en x , y
  4. function checkcell ( $col,$row ) : passe a la generation suivante.

  1. On loque le fichier avec la fonction flock , j'ai ete surpris de voir qu'il n'y a pas de unflock , en fin de compte le fichier n'est plus locker lorsqu'on le ferme.
  2. On lit le fichier contenant l'etat du monde de la vie
  3. on l'affiche
  4. on passe a la generation suivante
  5. puis on sauve le resultat en loquant le fichier.( il faut que nobody est la permission d'ecrire ).

Dans le header HTML on a bien pris le soin de mettre le fait que la page doit se rafraichir toutes les 2 secondes par les arguments: http-equiv="refresh" Content="2;
Testez le jeu de la vie
Testez le jeu de la vie avec un blinquer
Testez le jeu de la vie avec un Pump
Testez le jeu de la vie avec un 10 cells row
Les sources

Pour tout commentaire, suggestion, et autre recette de cuisine voir bon resto , ecrivez moi.


L'equipe de Mmmm!!! copyright 2000