Projet ISN Pac-man
Lily1611
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
critou -
critou -
Bonjour !
Voilà j'aurais besoin d'aide pour mon projet en ISN pour le bac. Avec mon groupe, nous avons décidé de créer un pac-man simplifié mais nous bloquons quand au déplacement du Pac-Man dans le labyrinthe. Ce dernier est censé se déplacer grâce aux touches directionnelles, mais lorsqu'on les utilise, c'est comme si le Pac-Man parcourait tout le labyrinthe. De plus, je ne comprends pas pourquoi les billes jaunes sont décalées. Si quelqu'un pouvait nous aider, ça serait vraiment gentil. Nous aimerions bien terminer ce jeu ! Merci d'avance ! Je joins les captures d'écran prise juste après l'exécution du programme et la seconde lorsque l'on appuie sur une des touches directionnelles.


Voici notre code : ( bien entendu il manque les fonctions des fantômes)
Voilà j'aurais besoin d'aide pour mon projet en ISN pour le bac. Avec mon groupe, nous avons décidé de créer un pac-man simplifié mais nous bloquons quand au déplacement du Pac-Man dans le labyrinthe. Ce dernier est censé se déplacer grâce aux touches directionnelles, mais lorsqu'on les utilise, c'est comme si le Pac-Man parcourait tout le labyrinthe. De plus, je ne comprends pas pourquoi les billes jaunes sont décalées. Si quelqu'un pouvait nous aider, ça serait vraiment gentil. Nous aimerions bien terminer ce jeu ! Merci d'avance ! Je joins les captures d'écran prise juste après l'exécution du programme et la seconde lorsque l'on appuie sur une des touches directionnelles.


Voici notre code : ( bien entendu il manque les fonctions des fantômes)
#création de la grille qui servira comme support au jeux G=[[7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7], [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7], [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1], [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1], [1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1], [7, 7, 7, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 7, 7, 7], [1, 1, 1, 1, 0, 1, 0, 1, 7, 7, 7, 7, 1, 0, 1, 0, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 1, 6, 4, 3, 5, 1, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1], [7, 7, 7, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 1, 7, 7, 7], [1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1], [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], [1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1], [1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1], [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] def dessine_pacman(p): r=10 zf.draw_fill_circle(p,r,jaune) a= Point(p.x-1, p.y+3) b= Point(p.x+12,p.y+2) c= Point(p.x+20, p.y+12) zf.draw_fill_triangle(a,b,c,noir) e=Point(p.x-4,p.y-5) zf.draw_fill_circle(e,4,blanc) g=Point(p.x-4,p.y-4) zf.draw_fill_circle(g,2,noir) h=Point(p.x+4,p.y-5) zf.draw_fill_circle(h,4,blanc) i=Point(p.x+4,p.y-4) zf.draw_fill_circle(i,2,noir) def deplacement (event): global i,j global l for i in range (20): for j in range (25): p=Point(39*i,29*j) if event.keysym=='Right' and G[j][i]==2 and G[j][i+1]==0: G[j][i+1]==2 G[j][i]==0 elif event.keysym=='Left' and G[j][i]==2 and G[j][i-1]==0: G[j][i-1]==2 G[j][i]==0 elif event.keysym=='Up' and G[j][i]==2 and G[j-1][i]==0: G[j-1][i]==2 G[j][i]==0 elif event.keysym=='Down' and G[j][i]==2 and G[j+1][i]==0: G[j+1][i]==2 G[j][i]==0 elif event.keysym=='Right' and G[j][i]==2 and G[j][i+1]==1: G[j+1][i]==1 G[j][i]==2 elif event.keysym=='Left' and G[j][i]==2 and G[j][i-1]==1: G[j+1][i]==1 G[j][i]==2 elif event.keysym=='Up' and G[j][i]==2 and G[j-1][i]==1: G[j+1][i]==1 G[j][i]==2 elif event.keysym=='Down' and G[j][i]==2 and G[j+1][i]==1: G[j+1][i]==1 G[j][i]==2 dessine_pacman(p) def dessine_grille(G): global p global w global u global t for i in range (20): for j in range (25): if G[j][i]==1: #correspond à un mur zf.draw_rectangle(Point(35*i,28*j), Point(35*i+35, 28*j+28), blue) elif G[j][i]==2: #correspond au pacman p=Point(39*i,29*j) dessine_pacman(p) elif G[j][i]==3: #correspond aux fantômes w=Point(37*i,29*j) fantome_vert(w) #fantome_vert(i, j) elif G[j][i]==4: u=Point(37*i,29*j) fantome_rouge(u) #fantome_rouge(i, j) elif G[j][i]==5: t=Point(37*i,29*j) fantome_bleu(t) #fantome_bleu(i, j) elif G[j][i]==6: s=Point(37*i,29*j) fantome_rose(s) #fantome_rose(i, j) elif G[j][i]==0: zf.draw_fill_circle(Point(37*i,29*j),2, yellow) elif G[j][i]==7: zf.draw_fill_circle(Point(37*i,29*j),1, black) #correspond pièces #tests dessine_grille(G) zf.activer_clavier( ) zf.bind('<Key>',deplacement) f.mainloop()
A voir également:
- Programme python jeu pacman
- Filigrane projet - Guide
- Slender man jeu - Télécharger - Tir FPS
- Gant projet - Télécharger - Gestion de projets
- She's the man streaming vf ✓ - Forum Cinéma / Télé
- Musique projet x ✓ - Forum Musique / Radio / Clip
1 réponse
Bonjour.
Il manque trop d'informations dans ton code (Point, zf, etc.) pour que l'on puisse en déterminer les problèmes rencontrés.
Si ton projet est hébergé sur github ou autres hébergeurs de projets, tu pourrais en donner le lien, ça sera plus facile de te donner une solution en testant ton jeu et visualisant ton code en entier que d'essayer de deviner où tes erreurs se situent.
Il manque trop d'informations dans ton code (Point, zf, etc.) pour que l'on puisse en déterminer les problèmes rencontrés.
Si ton projet est hébergé sur github ou autres hébergeurs de projets, tu pourrais en donner le lien, ça sera plus facile de te donner une solution en testant ton jeu et visualisant ton code en entier que d'essayer de deviner où tes erreurs se situent.
Déjà je voulais vous remercier de prendre la peine d'essayer de m'aider. Quant au site hébergeur, je suis une grande débutante et nous disposons de peu de moyens et de compétences. Nous utilisons uniquement le logiciel python et je ne sais pas comment héberger mon projet. Du coup, je vais mettre le code dans son entièreté ou si vous préférez que je l'héberge, pouvez vous m'indiquez comment faire ? Il y a un générique du début du code : la création de la nouvelle fenêtre est permise avec la fonction début_du_jeu.
Pour le déplacement de ton pacman, la 1ère chose que je ne comprends pas est pourquoi n'importe quelle touche du clavier peut le faire se déplacer alors qu'à la base pacman doit se déplacer dans 4 directions, donc il faut revoir cela en utilisant les flèches directionnelles du clavier reliée chacune à une fonction de déplacement (gauche, droit, haut, bas).
Tu t'étonnes que ton pacman parcours tout ton labyrinthe, mais c'est un peu ce que fait ton code puisque dans ta fonction déplacement tu parcours (je suppose) ton labyrinthe dans tes boucles range.
Pour le positionnement des billes, je ne sais pas ce que fait ta fonction draw_fill_circle, alors je vais partir dans une supposition, je pense que c'est en rapport avec la bordure par défaut des items canvas qui sont à 1, si tu veux des dimensions strictes, il faut définir le paramètre width à 0, et qu'ensuite tu ne centres pas ta bille correctement dans l'espace lui étant imparti, 37 et 29 correspondent au coin supérieur gauche de cet espace, à toi de calculer comment centre un élément de dimension x, y, x2, y2 dans un autre élément de dimension x, y, x2, y2.
Il y a également beaucoup de choses à revoir dans ton code.
Je ne comprends pas pourquoi vous dites que n'importe quelle touche peut le faire se déplacer. Quand j'utilise elif event.system=="Up" par exemple, c'est si on actionne la flèche du haut. C'est la même chose pour les autres flèches.
Pour les boucles, il faudrait simplement les retirer ?
Merci beaucoup
Oui, tu as raison, je n'ai pas bien fait attention à ton code, n'en reste pas moins qu'il y a des choses qui ne vont pas du tout.
Ce qui m'a induit en erreur était ton dessine_pacman1(p), ce qui m'a semblé sur le coup logique que tu créais un pacman chaque fois et j'ai pas cherché plus que ça.
Mais c'est pire en fait, cette fonction sert juste à le cacher au cas où le pacman serait sur cette case du jeu, t'imagines bien que ce n'est pas possible de faire ça, pour un déplacement, tu crées 500 pacman noir, au bout de 100 déplacements tu en auras 5 000...
tkinter est gentil, mais là, il ne va pas apprécier.
Et je ne compte pas non plus les fois où tu crées également un nouveau pacman, j'imagine que pour les fantômes ça doit être à peu près la même chose ?
Ce n'est pas comme ça que l'on procède.
1 - Création de ton pacman à telle position de ta grille G, position que l'on garde en mémoire au chaud dans un coin.
2 - Lors de la demande d'un déplacement par un appui sur une touche directionnelle, on regarde selon la direction désirée, si le déplacement est possible, et pas besoin de faire des boucles pour ça, on utilise la position actuelle du pacman (que l'an a gardée au chaud) pour effectuer cette vérification.
3 - Si le déplacement est possible, on déplace (et non en crée un à nouveau) le pacman à la nouvelle position dans le jeu (avec Canvas.move ou Canvas.coords) , on met à jour sa nouvelle position, et on fait tout ce qu'il y a à faire d'autres.
Inutile de parcourir toute ta grille pour faire ça.
Et mets-toi à la place de ceux qui vont lire ton code, des variables abrégées comme u7, t5, G, p, w, u, t, zf, zg rend ton code totalement incompréhensible et ça donne pas envie d'essayer de le comprendre, nomme tes variables explicitement par ce qu'elles représentent, des fonctions comme "dessine_pacman1" ne représentent pas ce qu'elles font, de plus une fonction effectuant une action se met à l'infinif, au lieu de "deplacement" un nom correct de fonction qui effectue cette action serait plus du genre "deplacer_pacman".
Tout d'abord, je suis désolée, j'ai oublié de préciser que nous n'utilisons pas tkinter. Nous sommes très limités quant au matériel et aux logiciels. Notre professeur ne nous guide que très peu, et la plupart du temps, il nous induit en erreurs. La plupart des fonctions créées, comme la fonction qui crée un pac-man noir par dessus le précédent nous a été conseillé par notre professeur.
A plusieurs reprises, nous lui avons demandé comment mémoriser la position du Pac-Man et comment nous pouvions nous en servir, mais il se met en colère et nous rabaisse. C'est de plus en plus dur de travailler avec lui et nous sommes complètement bloqués. Je comprends les conseils que tu donnes, mais je ne sais absolument pas comment les appliquer...