Aide programme
Sh3perd
Messages postés
74
Date d'inscription
Statut
Membre
Dernière intervention
-
jee pee Messages postés 41517 Date d'inscription Statut Modérateur Dernière intervention -
jee pee Messages postés 41517 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Alors je suis en terminale et j'ai un code à rendre pour lundi, et il est quasiment terminé mais un problème me gène.
Je dois coder le 'flood it!' un jeu que vous connaissez sûrement. Alors en réalité il ne me manque que le principe du jeu c'est à dire la répartition des couleurs sur la grille en fonction de la couleur choisie. Le problème vient de ma fonction jeu(grillejeu) qui ne fonctionne que sur les couleurs en périphéries dans un petit rayon. Et moi, ce qu'il me faut, c'est que toutes les couleurs adjacentes à celle en haut à gauche changent en fonction du choix utilisateur. Le principe du flood it, en gros.
Je vous met mon code à disposition et j'espère que vous pourrez m'aider.
Je vous remercie par avance !!!!
Alors je suis en terminale et j'ai un code à rendre pour lundi, et il est quasiment terminé mais un problème me gène.
Je dois coder le 'flood it!' un jeu que vous connaissez sûrement. Alors en réalité il ne me manque que le principe du jeu c'est à dire la répartition des couleurs sur la grille en fonction de la couleur choisie. Le problème vient de ma fonction jeu(grillejeu) qui ne fonctionne que sur les couleurs en périphéries dans un petit rayon. Et moi, ce qu'il me faut, c'est que toutes les couleurs adjacentes à celle en haut à gauche changent en fonction du choix utilisateur. Le principe du flood it, en gros.
Je vous met mon code à disposition et j'espère que vous pourrez m'aider.
Je vous remercie par avance !!!!
import random import sys def grille(x): x=int(x) grillejeu=[] grille2=[] if x==2: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>2: del grille2[-1] if x==6: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>6: del grille2[-1] if x==10: while len(grille2)!=10: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>10: del grille2[-1] if x==14: while len(grille2)!=14: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>14: del grille2[-1] if x==18: while len(grille2)!=18: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>18: del grille2[-1] if x==22: while len(grille2)!=22: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>22: del grille2[-1] if x==26: while len(grille2)!=26: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>26: del grille2[-1] for i in range(x): grillejeu.append([]) for n in range(len(grillejeu)): for p in grille2: random.shuffle(grille2) grillejeu[n].append(p) for k in range(len(grillejeu)): print(grillejeu[k]) jeu(grillejeu) for k in range(len(grillejeu)): print(grillejeu[k]) print('test') def jeu(grillejeu): grille=['r','j','b','v','o'] print('jeu') p=input("Choisissez une couleur : ") while p not in grille: p=input("Veuillez choisir entre r, j, b, v ou o : ") if p=='v': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='v' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='v' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='v' grillejeu[0][0]='v' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='r': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='r' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='r' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='r' grillejeu[0][0]='r' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='b': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='b' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='b' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='b' grillejeu[0][0]='b' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='j': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='j' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='j' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='j' grillejeu[0][0]='j' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='o': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='o' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='o' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='o' grillejeu[0][0]='o' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) def interface(x): return x def possibilite(grillejeu,p): liste_r=[] liste.append(1) for index in grillejeu[0]: liste_r.append(index) try: if liste_r[0]==liste_r[1]==liste_r[2]==liste_r[3]==liste_r[4]==liste_r[5]==liste_r[6]==liste_r[7]==liste_r[8]==liste_r[9]==liste_r[10]==liste_r[11]==liste_r[12]==liste_r[13]==liste_r[14]==liste_r[15]==liste_r[16]==liste_r[17]==liste_r[18]==liste_r[19]==liste_r[20]==liste_r[21]: print('\n*****FIN DU JEU*****\n') print('Vous avez terminé le jeu en',sum(liste)/2,'coups') sys.exit() except IndexError: print('\n*****FIN DU JEU*****\n') x=sum(liste)/2 x=int(x) print('Vous avez terminé le jeu en',x,'coups') sys.exit() if __name__=='__main__': liste=[] print('\n\t **************************************************') print('\t **************************************************') print('\n\t->\t************ FLOOD IT! ************* <-\n') print('\t **************************************************') print('\t **************************************************') print('\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n') print('\n\t De quelle dimension souhaitez vous votre grille ? ') q=''' 2x2 : 2 6x6 : 6 10x10 : 10 14x14 : 14 18x18 : 18 22x22 : 22 26x26 : 26 ''' print(q) x=interface(input('-------> ')) grille(x) print('') grille(x)
Configuration: Windows / Chrome 88.0.4324.190
A voir également:
- Aide programme
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
beaucoup de lignes de code pour ne pas faire grand chose!
en réalité il te manque presque tout, je ne vois pas grand chose d'utile dans ton code.
je suggère que tu fasses ceci:
réfléchir à ce que le programme doit faire, et nous expliquer cela.
beaucoup de lignes de code pour ne pas faire grand chose!
en réalité il te manque presque tout, je ne vois pas grand chose d'utile dans ton code.
je suggère que tu fasses ceci:
réfléchir à ce que le programme doit faire, et nous expliquer cela.
Bonjour,
Tu en es où de ta stratégie pour solutionner le problème ?
En lisant la question je me suis laissé tenté à essayer d'y répondre. Ne connaissant pas ce jeu, je n'ai trouvé que des versions online plus opérationnelles puisqu'utilisant Adobe Flash Player disparu il y a un mois. Il y avait au moins les règles.
J'ai imaginé, avant de me lancer dans le code, plusieurs solutions, traiter les lignes une par une, traiter en démarrant par les 4 coins, ... mais le soucis c'est comment traiter une suite de cases en escargot, ici le o :
J'ai une solution qui me plait bien, mais sur un grand tableau le temps d'exécution est asymptotique sur l'infini. Il faut que je debug pour trouver pourquoi.
J'ai une remarque de fond sur le code que tu as posté, remplir le tableau et l'afficher cela reste indispensable, autant commencer par ça. Mais tu n'utilises pas la puissance du code informatique pour le faire, tu dupliques les lignes à l'infini pour traiter les tableaux suivant leur taille, et tu traites les couleurs une par une à la main suivant la réponse de l'utilisateur.
Remplir et afficher le tableau devrait prendre 10/15 lignes, il t'en faut une centaine.
Une boucle sur la taille du tableau pour le remplir, une boucle sur la taille du tableau pour l'afficher. Traiter une variable avec la réponse de l'utilisateur pour la nouvelle couleur à comparer avec la couleur en grille[0][0].
Un code informatique est terminé quand on ne peut plus enlever de lignes, pas quand on ne peut plus en ajouter ;-)
A te lire.
Tu en es où de ta stratégie pour solutionner le problème ?
En lisant la question je me suis laissé tenté à essayer d'y répondre. Ne connaissant pas ce jeu, je n'ai trouvé que des versions online plus opérationnelles puisqu'utilisant Adobe Flash Player disparu il y a un mois. Il y avait au moins les règles.
J'ai imaginé, avant de me lancer dans le code, plusieurs solutions, traiter les lignes une par une, traiter en démarrant par les 4 coins, ... mais le soucis c'est comment traiter une suite de cases en escargot, ici le o :
o r v j j j b j j j j b b r j r r
o v j r b j v b v v b b v v b j j
o b o o o o o o o o o o o o o o o
o v o v v j r b j r b v r b r r o
o j o r o o o o o o o o o o o b o
o j o v o r v v b r v b j j o v o
o r o v o v o o o o o o o v o b o
o r o j o j o j v v r b o b o v o
o r o r o j o b o o o r o r o r o
o b o r o j o j r j o b o r o b o
o b o v o b o o o o o v o j o v o
o j o b o r b r j b r j o r o j o
o b o b o o o o o o o o o b o b o
o r o j v b v v v j b v j r o j o
o r o o o o o o o o o o o o o v o
o r j b j j j j b b b j j v b j o
o o o o o o o o o o o o o o o o o
J'ai une solution qui me plait bien, mais sur un grand tableau le temps d'exécution est asymptotique sur l'infini. Il faut que je debug pour trouver pourquoi.
J'ai une remarque de fond sur le code que tu as posté, remplir le tableau et l'afficher cela reste indispensable, autant commencer par ça. Mais tu n'utilises pas la puissance du code informatique pour le faire, tu dupliques les lignes à l'infini pour traiter les tableaux suivant leur taille, et tu traites les couleurs une par une à la main suivant la réponse de l'utilisateur.
Remplir et afficher le tableau devrait prendre 10/15 lignes, il t'en faut une centaine.
Une boucle sur la taille du tableau pour le remplir, une boucle sur la taille du tableau pour l'afficher. Traiter une variable avec la réponse de l'utilisateur pour la nouvelle couleur à comparer avec la couleur en grille[0][0].
Un code informatique est terminé quand on ne peut plus enlever de lignes, pas quand on ne peut plus en ajouter ;-)
A te lire.
J'ai récupéré une fonction qui me permet de parer à mon problème, mais je ne parviens pas totalement à l'implémenter, j'ai généré une grille plus informatiquement parlant mais moins esthétique (car print au lieu d'un return) , pouvez vous m'aider ? le code :
import random import sys def grille(x): x=int(x) grillejeu=[] grille2=[] if x==2: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>2: del grille2[-1] if x==6: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>6: del grille2[-1] if x==10: while len(grille2)!=10: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>10: del grille2[-1] if x==14: while len(grille2)!=14: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>14: del grille2[-1] if x==18: while len(grille2)!=18: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>18: del grille2[-1] if x==22: while len(grille2)!=22: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>22: del grille2[-1] if x==26: while len(grille2)!=26: # grille2=['r','j','b','v','o','r','j','b','v','o'] grille2.append('r') grille2.append('j') grille2.append('b') grille2.append('v') grille2.append('o') while len(grille2)>26: del grille2[-1] for i in range(x): grillejeu.append([]) for n in range(len(grillejeu)): for p in grille2: random.shuffle(grille2) grillejeu[n].append(p) listevrai=[] for k in range(len(grillejeu)): listevrai.append(grillejeu[k]) print(listevrai) jeu(grillejeu) for k in range(len(grillejeu)): print(grillejeu[k]) print('test') def jeu(grillejeu): grille=['r','j','b','v','o'] print('jeu') p=input("Choisissez une couleur : ") while p not in grille: p=input("Veuillez choisir entre r, j, b, v ou o : ") if p=='v': possibilite(grillejeu,p) floodfill(grille,0,0) # if grillejeu[0][1]==grillejeu[0][0]: # grillejeu[0][1]='v' # # if grillejeu[1][0]==grillejeu[0][0]: # grillejeu[1][0]='v' # if grillejeu[1][1]==grillejeu[0][0]: # grillejeu[1][1]='v' # grillejeu[0][0]='v' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='r': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='r' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='r' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='r' grillejeu[0][0]='r' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='b': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='b' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='b' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='b' grillejeu[0][0]='b' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='j': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='j' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='j' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='j' grillejeu[0][0]='j' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) if p=='o': possibilite(grillejeu,p) if grillejeu[0][1]==grillejeu[0][0]: grillejeu[0][1]='o' if grillejeu[1][0]==grillejeu[0][0]: grillejeu[1][0]='o' if grillejeu[1][1]==grillejeu[0][0]: grillejeu[1][1]='o' grillejeu[0][0]='o' for k in range(len(grillejeu)): print(grillejeu[k]) possibilite(grillejeu,p) return jeu(grillejeu) def interface(x): return x def possibilite(grillejeu,p): liste_r=[] liste.append(1) for index in grillejeu[0]: liste_r.append(index) try: if liste_r[0]==liste_r[1]==liste_r[2]==liste_r[3]==liste_r[4]==liste_r[5]==liste_r[6]==liste_r[7]==liste_r[8]==liste_r[9]==liste_r[10]==liste_r[11]==liste_r[12]==liste_r[13]==liste_r[14]==liste_r[15]==liste_r[16]==liste_r[17]==liste_r[18]==liste_r[19]==liste_r[20]==liste_r[21]: print('\n*****FIN DU JEU*****\n') print('Vous avez terminé le jeu en',sum(liste)/2,'coups') sys.exit() except IndexError: print('\n*****FIN DU JEU*****\n') x=sum(liste)/2 x=int(x) print('Vous avez terminé le jeu en',x,'coups') sys.exit() def floodfill(grille, x, y): #"hidden" stop clause - not reinvoking for "c" or "b", only for "a". if grille[x][y] == 'r': grille[x][y] = 'v' #recursively invoke flood fill on all surrounding cells: if x > 0: floodfill(grille,x-1,y) if x < len(grille[y]) - 1: floodfill(grille,x+1,y) if y > 0: floodfill(grille,x,y-1) if y < len(grille) - 1: floodfill(grille,x,y+1) if __name__=='__main__': liste=[] print('\n\t **************************************************') print('\t **************************************************') print('\n\t->\t************ FLOOD IT! ************* <-\n') print('\t **************************************************') print('\t **************************************************') print('\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n') print('\n\t De quelle dimension souhaitez vous votre grille ? ') q=''' 2x2 : 2 6x6 : 6 10x10 : 10 14x14 : 14 18x18 : 18 22x22 : 22 26x26 : 26 ''' print(q) x=interface(input('-------> ')) grille(x) print('') grille(x)
excellente idée d'utiliser ainsi une fonction récursive!
peux-tu, cependant, préciser "python" quand tu utilises les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
peux-tu, cependant, préciser "python" quand tu utilises les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
le floodfill() c'est une bonne idée, mais attention, il faudrait mémoriser les positions déjà traitées car si tu passes de (0,0) à (0,1), tu vas revenir avec y-1 à (0,0)
Après il faudrait que globalement tu changes ton programme pour ne pas traiter "à la main" les couleurs une par une.
Si dans p tu as la prochaine couleur, tu devrais récupérer par exemple dans a l'ancienne couleur de position (0,0) et après tu ne traites que 2 variables p et a, sans te soucier de leur contenu.
Après il faudrait que globalement tu changes ton programme pour ne pas traiter "à la main" les couleurs une par une.
Si dans p tu as la prochaine couleur, tu devrais récupérer par exemple dans a l'ancienne couleur de position (0,0) et après tu ne traites que 2 variables p et a, sans te soucier de leur contenu.
dans ce que j'ai imaginé, j'ai les positions traitées, afin de ne pas revenir en arrière, car en (0,1) il ne sert à rien de revenir à (0,0) et ses subséquents, et je traite effectivement, les positions futures à traiter, pour avancer pas à pas (mon escargot)
j'ai trouvé un site online du jeu : https://unixpapa.com/floodit/?sz=6&nc=4
il faut que je révise mon programme car à partir d'une position, je traitais les 8 cases autour, avec les positions en diagonale, alors qu'il semble que l'on ne traite que les 4 cases touchantes sur les cotés.
le site est un bon exemple de ce que l'on pourrait développer en solution graphique, une fois la solution trouvée en mode caractère
j'ai trouvé un site online du jeu : https://unixpapa.com/floodit/?sz=6&nc=4
il faut que je révise mon programme car à partir d'une position, je traitais les 8 cases autour, avec les positions en diagonale, alors qu'il semble que l'on ne traite que les 4 cases touchantes sur les cotés.
le site est un bon exemple de ce que l'on pourrait développer en solution graphique, une fois la solution trouvée en mode caractère
Mais je ne sais pas sinon je n'aurai pas posé de questions ici...
L'objectif est lorsqu'une couleur est rentrée, exemple : v (vert) toute les couleurs adjacentes à la première couleur en haut à gauche , changent pour vert dans la mesure où elles sont identiques à la case d'en haut à gauche . Exemple si la grille est telle :
v v v j b r
v v r o b b
v b r o j j
Si j'entre 'r' pour rouge, alors tout les v adjacents changent pour r. Mais je n'y parvient pas c'est pour ça que mon dernier recours est ici.
En espérant d'avoir été plus clair.
Merci.
c'est bien la spécialité que tu as choisie?
montre nous la situation avant/après.
réfléchis à comment tu ferais, à la main, pour changer les couleurs.
comment vas-tu apprendre et progresser, en faisant chaque fois appel à d'autres?