Jeu de la vie
Fermé
castor-python
Messages postés
8
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
10 avril 2014
-
3 janv. 2014 à 17:35
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 - 13 janv. 2014 à 16:55
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 - 13 janv. 2014 à 16:55
A voir également:
- Jeu de la vie
- 94 jeu - Télécharger - Puzzle & Réflexion
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu 94 degrés - Télécharger - Divers Jeux
- Jeux de moto: jeu de course 3d - Télécharger - Course
- Logo jeu - Télécharger - Jeux vidéo
2 réponses
nidhogg-59
Messages postés
102
Date d'inscription
mercredi 20 juin 2012
Statut
Membre
Dernière intervention
5 décembre 2015
27
6 janv. 2014 à 11:10
6 janv. 2014 à 11:10
Bonjour!
Alors pour t'aider, il faudrait déjà que tu expliques comment tu as organisé tes cellules:
-travailles-tu sur un tableau où chaque cellule est représenté par un 0 ou un 1 (vivant/mort)?
- ou bien sur un 'plateau infini' ?
si tu as un plateau fini:
tu peux regarder les cellules qui l'entourent en faisant:
tableau[numero_cellule-1] pour celle de gauche
tableau[numero_cellule+1] pour celle de droite
tableau[numero_cellule+largeur_plateau] pour celle du bas
tableau[numero_cellule+largeur_plateau-1] pour celle du bas gauche
tableau[numero_cellule+largeur_plateau+1] pour celle du bas droit
tableau[numero_cellule-largeur_plateur-1] pour celle en haut gauche
tableau[numero_cellule-largeur_plateur+1] pour celle en haut droite
tableau[numero_cellule-largeur_plateur] pour celle du dessus
sur un plateau infini, ca fonctionne de la même façon:
disons que pos est la position de ta cellule comme suit:
pos[0] == position sur l'axe des x
pos[1] == position sur l'axe des y
et que seuls les cellules vivantes ont leurs position dans ton tableau alive, pour tester l'existance d'une cellule, tu peux faire:
if [pos[0]+1,pos[1]] in alive
pour tester si la cellule à droite est présente ou pas!
ou
if [pos[0],pos[1]-1] in alive
pour tester celle du dessus!
Bon, je ne sais pas si c'est clair, (en tous cas dans ma tête ça l'est ^^ ) mais si tu as des questions plus précises, n'hésite pas !
Alors pour t'aider, il faudrait déjà que tu expliques comment tu as organisé tes cellules:
-travailles-tu sur un tableau où chaque cellule est représenté par un 0 ou un 1 (vivant/mort)?
- ou bien sur un 'plateau infini' ?
si tu as un plateau fini:
tu peux regarder les cellules qui l'entourent en faisant:
tableau[numero_cellule-1] pour celle de gauche
tableau[numero_cellule+1] pour celle de droite
tableau[numero_cellule+largeur_plateau] pour celle du bas
tableau[numero_cellule+largeur_plateau-1] pour celle du bas gauche
tableau[numero_cellule+largeur_plateau+1] pour celle du bas droit
tableau[numero_cellule-largeur_plateur-1] pour celle en haut gauche
tableau[numero_cellule-largeur_plateur+1] pour celle en haut droite
tableau[numero_cellule-largeur_plateur] pour celle du dessus
sur un plateau infini, ca fonctionne de la même façon:
disons que pos est la position de ta cellule comme suit:
pos[0] == position sur l'axe des x
pos[1] == position sur l'axe des y
et que seuls les cellules vivantes ont leurs position dans ton tableau alive, pour tester l'existance d'une cellule, tu peux faire:
if [pos[0]+1,pos[1]] in alive
pour tester si la cellule à droite est présente ou pas!
ou
if [pos[0],pos[1]-1] in alive
pour tester celle du dessus!
Bon, je ne sais pas si c'est clair, (en tous cas dans ma tête ça l'est ^^ ) mais si tu as des questions plus précises, n'hésite pas !
castor-python
Messages postés
8
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
10 avril 2014
12 janv. 2014 à 09:28
12 janv. 2014 à 09:28
Donc la solution la plus simple c'est bien deux tableaux? Pour l'interface graphique, j'ai peu de connaissance du coup, le tableau se résume à O pour les cellules vivantes et . Pour les mortes. Je ne veux pas le code source que je désire vraiment le faire moi même. Cependant, j'accepterai vraiment toute ton aide. Où dois-je placer mes duplications de tableaux?
nidhogg-59
Messages postés
102
Date d'inscription
mercredi 20 juin 2012
Statut
Membre
Dernière intervention
5 décembre 2015
27
Modifié par nidhogg-59 le 13/01/2014 à 00:55
Modifié par nidhogg-59 le 13/01/2014 à 00:55
Waow... Là j'avoue n'avoir pas bien compris ta question... Tu as écris quoi pour le moment?
Tu veux que je te donnes le déroulement du prog sans code source? En tous cas, je ne duplique pas de tableau, je fais:
'fin, c'est un peu plus compliqué que ça, et ce sera différent de toi, vu qu'on travaille de deux manière différentes. (interface/console)
Ps: je viens de remarquer qu'en travaillant avec des set, ça va beaucoup plus vite qu'avec des list.
Tu veux que je te donnes le déroulement du prog sans code source? En tous cas, je ne duplique pas de tableau, je fais:
tableau=[[x,y],[x,y]...] while 1: new_gen=[calcul de la new génération] for i in new gen: affichage(i) tableau=[]+new_gen
'fin, c'est un peu plus compliqué que ça, et ce sera différent de toi, vu qu'on travaille de deux manière différentes. (interface/console)
Ps: je viens de remarquer qu'en travaillant avec des set, ça va beaucoup plus vite qu'avec des list.
castor-python
Messages postés
8
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
10 avril 2014
13 janv. 2014 à 09:44
13 janv. 2014 à 09:44
Je suis désolé, je ne me suis pas bien exprimé. Pour le moment, j'ai :
-une fonction qui crée un tableau.
-une fonction qui compte le voisinage (count = nombre de cellules vivantes)
-une fonction qui modifie (si count == (2), la cellule reste reste vivante,...)
-et un cellule qui balaye, appliquant le comptage et la modification à toutes les cellules.
Ma question est la suivante : à quel moment mon tableau 1 doit-il intervenir et à quel moment le tableau 2 doit intervenir?
Je ne connais pas encore les set...
-une fonction qui crée un tableau.
-une fonction qui compte le voisinage (count = nombre de cellules vivantes)
-une fonction qui modifie (si count == (2), la cellule reste reste vivante,...)
-et un cellule qui balaye, appliquant le comptage et la modification à toutes les cellules.
Ma question est la suivante : à quel moment mon tableau 1 doit-il intervenir et à quel moment le tableau 2 doit intervenir?
Je ne connais pas encore les set...
nidhogg-59
Messages postés
102
Date d'inscription
mercredi 20 juin 2012
Statut
Membre
Dernière intervention
5 décembre 2015
27
Modifié par nidhogg-59 le 13/01/2014 à 16:56
Modifié par nidhogg-59 le 13/01/2014 à 16:56
Le second tableau dans ton cas, interviendrais où tu applique les modifications:
il faudrait créer un second tableau qui va contenir le génération suivante, car toutes les cellules doivent "mourir" et "naître" en même temps, or si tu modifie ton tableau au fur et à mesure que tu le parcours, ça créera des problèmes (je suppose).
Là, je ne vois pas ce qu'il y a à écrire de plus:
tu as la fonction qui calcule la génération suivante, il ne te reste que l'affichage et la copie du nouveau tableau dans l'ancien...
Pour ce qui est des set, j'ai demandé autre part, et apparemment, les set sont plus rapides pour ce qui est des test de présence ou d'absence d'objet en leur sein, les listes sont plus rapides avec les itérations, donc dans ton cas, je dirais que les listes sont plus avantageuses.
Lien vers la discussion https://openclassrooms.com/forum/sujet/set-plus-rapide-que-list
Attention, si tu ne tiens vraiment à ne pas voir mon code source, il y est écrit au début...
il faudrait créer un second tableau qui va contenir le génération suivante, car toutes les cellules doivent "mourir" et "naître" en même temps, or si tu modifie ton tableau au fur et à mesure que tu le parcours, ça créera des problèmes (je suppose).
Là, je ne vois pas ce qu'il y a à écrire de plus:
tu as la fonction qui calcule la génération suivante, il ne te reste que l'affichage et la copie du nouveau tableau dans l'ancien...
Pour ce qui est des set, j'ai demandé autre part, et apparemment, les set sont plus rapides pour ce qui est des test de présence ou d'absence d'objet en leur sein, les listes sont plus rapides avec les itérations, donc dans ton cas, je dirais que les listes sont plus avantageuses.
Lien vers la discussion https://openclassrooms.com/forum/sujet/set-plus-rapide-que-list
Attention, si tu ne tiens vraiment à ne pas voir mon code source, il y est écrit au début...
8 janv. 2014 à 14:20
Je travaille sur un plateau fini (j'ai un contour de cellules mortes qui le restent quoi qu'il arrive) et mes cellules vivantes sont symbolisées par un "O" et les mortes par un point "."
j'ai "en gros" compris ton raisonnement mais je n'arrive pas à l'appliquer... si j'appelle x la ligne de mon tableau et y la colonne, et que ma cellule de depart est de coordonnées (x,y) et que je souhaite compter le nombre de cellule autour? Qu'est ce que cela donnerait?
Modifié par nidhogg-59 le 8/01/2014 à 18:17
Pour compter les cellules entourant la cellule (x,y), on peut faire:
à la fin, count contiens le nombre de cellules vivantes.
La condition " if not (i == 0 and j == 0): " est là pour ne pas compter la cellule pour laquelle tu cherche le nombre de cellules vivantes voisines.
Pour quelque chose de plus concis, tu peux utiliser les listes sous cette forme:
'fin, après, c'est juste une question de goût...
8 janv. 2014 à 20:20
9 janv. 2014 à 13:42
9 janv. 2014 à 21:33
Mais si ce que tu fais fonctionne, tu devrais le voir:
teste avec commes cellules (O = vivant; . = mort):
O.O
O.O
OOO
au bout d'un moment tu devrais avoir une forme comme celle sur https://fr.wikipedia.org/wiki/Jeu_de_la_vie chapitre "Dimension et complexité".
Personnellement je prenais toujours comme référence cette figure( le 'u' qui devient un clown) pour savoir si mes jeux fonctionnaient.