Jeu de la vie

SAB0606 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
 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

A voir également:

4 réponses

Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 

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 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 

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   Statut Membre Dernière intervention  
 

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

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

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

0
PierrotLeFou
 

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