Jeu de la vie
PierrotLeFou -
Bonjour,
Rappel des règles
Pour savoir si une cellule est vivante à l'instant n, on compte le nb de cellules vivantes parmi les 8 voisines à l'instant n-1.
À chaque étape n, l'état de chaque cellule ne dépend que de son état et de celui des cellules voisines à l étape n-1.
- Si le nombre de cellules vivantes voisines est inférieur ou égal à 1 ou supérieur ou égal à 4 alors la cellule est morte à l'instant n.
- Si le nombre est égal à 3, alors la cellule est vivante à l'instant n.
- Si le nombre est égal à 2, alors la cellule ne change pas d'état par rapport à n-1.
On doit travailler sur un plateau N x N avec N = 10. Le plateau est codé par une listes d'entiers à 2 dimensions appelés grille. Les cellules vivantes ont pour valeur 1 et les mortes 0.
Il n'a pas de grille type, juste un exemple.
Ce que j'ai commencé à faire
1) On nous demande d'abord de coder une fonction creer_grille_vide qui retourne une grille contenant des zéros. J'ai fait ça
def creation_grille_vide(nombreLignes, nombreColonnes): grille = [[]] * nombreLignes for ligne in range(nombreLignes): grille[ligne] = [0] * nombreColonnes return grille
2) Ensuite on demande une fonction affiche grille(grille : list) avec en paramètres une grille, qui affiche v pour les cellules vivantes et - pour les cellules morte. J'ai essayé ça (je sais c'est nul mais je débute):
def affiche_grille(grille): morte = 'v' vivante = '-' print(grille)
3) Puis il faut créer une fonction initialisation_aleatoire(grille: list) qui affecte initialise chaque cellule de la grille avec un tirage aléatoire équiprobable dans {0, 1}.
J'ai beaucoup cherché mais je sèche
Merci encore de votre aide précieuse
SBO
- Jeu de la vie
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Jeu zuma - Télécharger - Jeux vidéo
- Logo jeu - Télécharger - Jeux vidéo
- Jeux de moto: jeu de course 3d - Télécharger - Course
4 réponses
Bonjour,
Ce qui est sûr, c'est qu'il faut 2 grilles, pour mettre à jour une configuration donnée n vers la
configuration n+1, car si tu modifie les cases une par une au fur et à mesure, tu n'en sortira jamais
Je veux dire, par exemple, que si tu rempli une case avec une nouvelle cellule, mais que tu utilises
cette cellule pour calculer une autre case, ça n'en fini jamais
Il faut mettre à jour tout le tableau d'un seul coup d'un seul
Bonjour
1) Ta proposition est correcte. Tu peux aussi écrire plus simplement :
def creation_grille_vide(nombreLignes, nombreColonnes): return [[0] * nombreColonnes] * nombreLignes
2) Tu te doutes que ce que tu as écris n'affiche rien.
- Afficher une grille revient à afficher successivement chacune de ces lignes.
- Afficher une ligne revient à afficher successivement chacune de ses cellules (v si elle est vivante, - sinon).
Normalement cela doit te rappeler des choses vues dans ton cours de python.
Si tu as besoin de plus d'inspiration, regarde par exemple ce lien.
3) C'est presque le même principe que la question précédente, en remplaçant afficher une cellule par l'initialiser aléatoirement. La fonction random.randint te sera utile.
Bonne chance
Il faut en effet avoir 2 grilles. On met à jour la grille de niveau N à partir de la grille de niveau N-1. À partir du nombre de voisins, on peut facilement calculer la nouvelle valeur de la cellule avec un dictionnaire. Et on met dans un tuple les déplacements pour les voisins.
On m'a dit de ne pas en dire trop. Alors je m'arrête ici ...