Jeu de la vie

Fermé
SAB0606 Messages postés 2 Date d'inscription mercredi 26 octobre 2022 Statut Membre Dernière intervention 26 octobre 2022 - Modifié le 27 oct. 2022 à 11:33
 PierrotLeFou - 27 oct. 2022 à 17:51

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

A voir également:

4 réponses

Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
27 oct. 2022 à 10:58

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

1
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 7 827
27 oct. 2022 à 11:41

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

1
SAB0606 Messages postés 2 Date d'inscription mercredi 26 octobre 2022 Statut Membre Dernière intervention 26 octobre 2022
26 oct. 2022 à 12:18

j'imagine bien que pour les autres qui ont des parents ingé, c'est plus facile..... bref

0
yg_be Messages postés 23466 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 février 2025 1 568
26 oct. 2022 à 15:12

Sortir de l'école sans rien connaitre parce que les parents ont fait les DM, est-ce très utile?

0

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 ...

0