class:center, middle # TP1 : le jeu de la vie tp de Romain Belmonte --- # Histoire > Le jeu de la vie est un **automate cellulaire** dont les règles ont été définies par J. Conway en 1970. > Ce jeu met en scène des cellules susceptibles de se reproduire, de disparaître ou de survivre lorsqu'elles obéissent à des règles quelquefois appelées 'génétiques'. > Ces cellules sont représentées ici par des cases sur un quadrillage. ![Jeu de la vie](./images/exemple_jdv.png) --- # Les règles - Une cellule a deux états possibles : vivant ou mort - La survie : chaque cellule ayant deux ou trois cellules adjacentes survit jusqu'à la génération suivante. - La mort : Si une cellule a autour d'elle (gauche, droite, haut, bas et diagonales) 4 cellules vivante ou plus, elle meure dans la génération suivante par surpopulation. - La mort : Chaque cellule n'ayant qu'une ou aucune cellule adjacente vivante, cellule adjacente meurt d'isolement. - La naissance : Si une cellule a exactement trois cellules adjacentes vivantes, fait naître une nouvelle cellule pour la génération suivante. - Toutes les naissances et toutes les morts ont lieu en même temps au cours d'une génération. --- # Un peu d'aide : Une grille peut se représenter comme un tableau à 2 dimension. Pour cela il faut faire "un tableau de tableaux". Il faut vous imaginer que les clefs du premier tableau représente les numéros des lignes. Les clefs du second les colonnes. --- ```php ``` Représente le tableau a | b | c --|---|-- d|e|f g|h|i --- ```php ``` --- # Le petit guide de survie - Séparez votre code en 3 fichiers. - Dans `game.php`: écrire les fonctions nécessaires au fonctionnement du jeu (uniquement du PHP). - Dans `grid_template.html` écrivez le template d'affichage du jeu et des controles - Dans `index.php` appeler les fonctions pour implémenter le jeu et inclure le template. - Écrire une fonction qui initialise le plateau avec un nombre aléatoire de cellules ainsi qu’une fonction pour afficher ce plateau (utiliser le caractère ‘O’ pour une cellule vivante et un espace pour une cellule morte). - Conseil : écrire une fonction par règle du jeu - Utiliser `$_SESSION` pour stocker la génération que vous venez de calculer. --- # Une petite amélioration: ajouter la possibilité de contrôler le jeu en fonction de deux paramètres de *query_string* : - si le paramètre `'auto'` est présent et est un entier alors recharger la page au bout du nombre de secondes dans le paramètre "auto". - si le paramètre `'generation'` est présent, calculer autant de génération qu'indiquer. Pour actualiser votre page index.php automatiquement, ajouter cette ligne dans le header de votre code HTML : ```html
``` --- # Bonus pour ceux qui veulent aller plus loin (et s'améliorer) - Ajouter des paramètres d'url permettant à l’utilisateur de définir la taille du plateau et le nombre de cellules de départ; - Implémenter un voisinage cyclique (dernière ligne adjacente à la première, dernière colonne adjacente à la première); - Ajouter un attribut “âge” à chaque cellule vivante, une cellule ne pouvant vivre que 10 générations; - Améliorer l’aspect visuel du jeu.