ninju Posté(e) 16 avril 2019 Partager Posté(e) 16 avril 2019 bonjour, je rencontre actuellement des problèmes a gérer les collisions entre le personnage et les murs du labyrinthe. Quelqu’un aurait-il une idée pour résoudre ce problème ou alors des idées pour améliorer le labyrinthe, car il est encore assez simple?(le projet serait a rendre pour dans 2 semaines). Je vous laisse ci-contre les documents et codes du labyrinthe?. labyrinthe: from tkinter import* tab_plateau=[ [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], [1,0,0,0,2,0,2,0,2,2,2,0,2,2,2], [2,2,2,0,0,0,2,0,0,0,0,0,0,0,2], [2,0,2,0,2,2,0,0,2,2,0,2,0,2,2], [2,2,0,0,0,0,0,2,2,2,0,2,0,2,2], [2,0,2,2,2,2,0,2,2,0,2,0,0,0,2], [2,0,0,0,2,2,0,0,2,0,2,2,2,0,2], [2,0,2,0,2,2,2,2,0,0,0,0,0,2,2], [2,0,2,0,2,0,0,0,0,2,2,2,0,2,2], [2,0,0,2,2,0,2,2,0,2,0,0,0,2,2], [2,0,2,2,0,0,0,0,0,2,0,2,2,2,2], [2,0,0,0,2,2,2,2,0,2,0,0,0,0,2], [2,2,2,0,2,0,0,0,0,2,2,2,0,0,2], [2,0,0,0,2,0,2,2,2,2,2,2,0,0,2], [2,0,2,2,2,0,2,0,0,0,0,0,0,0,2], [2,0,2,2,2,0,2,0,0,0,0,0,0,0,3], [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2], ] ##Création de la fenêtre fen=Tk() fen.title('Labyrinthe') ## Variables globales et conditions initales LARGEUR_BLOC=30 NB_BLOCS=12 CENTRE=LARGEUR_BLOC/2 x=0 y=30 ##Canevas Height=(17*LARGEUR_BLOC) Width=(15*LARGEUR_BLOC) dessin = Canvas(fen,bg='#414141',height=Height+1,width=Width+1) dessin.grid(row = 1, column=0, columnspan = 3, padx=3,pady=3) ##IMAGE dk =PhotoImage(file="C:/Users/Jalil/Desktop/images labyritnhe/dk_bas.png",master=fen) mur=PhotoImage(file="C:/Users/Jalil/Desktop/images labyritnhe/mur.png",master=fen) fond=PhotoImage(file="C:/Users/Jalil/Desktop/images labyritnhe/fond.png",master=fen) arrivee=PhotoImage(file="C:/Users/Jalil/Desktop/images labyritnhe/arr.png",master=fen) depart=PhotoImage(file="C:/Users/Jalil/Desktop/images labyritnhe/depart.png",master=fen) ##Définition des Fonctions def afficherlabyrinthe(L): for i in range(len(L)): for j in range(len(L)): if L[j]==2: dessin.create_image(CENTRE+j*LARGEUR_BLOC,CENTRE+i*LARGEUR_BLOC, image=mur) if L[j]==0: dessin.create_image(CENTRE+j*LARGEUR_BLOC,CENTRE+i*LARGEUR_BLOC, image=fond) if L[j]==3: dessin.create_image(CENTRE+j*LARGEUR_BLOC,CENTRE+i*LARGEUR_BLOC, image=arrivee) if L[j]==1: dessin.create_image(CENTRE+j*LARGEUR_BLOC,CENTRE+i*LARGEUR_BLOC, image=depart) def bouger(dx,dy): global x,y x+=dx y+=dy dessin.coords(personnage,x,y) def touche(evt): if evt.keysym == "Down": bouger(0,30) if evt.keysym == "Up": bouger(0,-30) if evt.keysym == "Right": bouger(30,0) if evt.keysym == "Left": bouger(-30,0) ##Création et placement des boutons et zone de texte bouton_demarrer = Button(fen,text='Démarrer',width=12, font=("Courrier"), bg='#414141', fg='white') bouton_demarrer.grid(row=2,column=1,padx=3,pady=3) bouton_reload = Button(fen,text='Recommencer',width=12, font=("Courrier"), bg='#414141', fg='white') bouton_reload.grid(row=2,column=0,padx=3,pady=3) bouton_quitter = Button(fen,text='Quitter',width=12, font=("Courrier"), bg='#414141', fg='white',command=fen.destroy) bouton_quitter.grid(row=2,column=2,padx=3,pady=3) #Creation d'un bouton "Quitter": Bouton_Quitter=Button(fen, text ='Quitter', command = fen.destroy) ##Programme principal afficherlabyrinthe(tab_plateau) fen.bind("<Key>",touche) personnage=dessin.create_image(x,y,anchor=NW,image=dk) fen.mainloop() Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Virginie-chan Posté(e) 18 avril 2019 Partager Posté(e) 18 avril 2019 Bien le bonsoir très cher ninju, Les amateurs de python ne se bousculent pas ici ! Bonne soirée à vous. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ninju Posté(e) 18 avril 2019 Auteur Partager Posté(e) 18 avril 2019 Bonsoir Virginie-chan, Oui je vois ça... Bonne soirée à vous. il y a 13 minutes, Virginie-chan a dit : Bien le bonsoir très cher ninju, Les amateurs de python ne se bousculent pas ici ! Bonne soirée à vous. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sethenès Posté(e) 18 avril 2019 Partager Posté(e) 18 avril 2019 Tu n'es effectivement pas au bon endroit. Je ne connais pas python, mais il y a une erreur dans la fonction dessin.coords dans laquelle, l'idéal est de ne pas bouger de 30, mais de 1. Ensuite dans "bouger", tu dois tester selon le mouvement choisi, si la case est libre (si le tableau plateau contient un 0). si non, tu ignores la commande si oui, tu déplaces ton singe en mettant à 0 l'ancienne position et à 1 la nouvelle et puis te redessines ces deux cases. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
pehache Posté(e) 18 avril 2019 Partager Posté(e) 18 avril 2019 (modifié) Perso je n'ai rien compris à cette demande, à part que le posteur cherchait sans doute quelqu'un pour faire son projet à sa place. @Sethenès je vois LARGEUR_BLOC=30 (pixels sans doute), donc je suppose que les déplacement de +/-30 sont cohérents (EDIT : mais oui, définir les positions par des indexs correspondants au tableau serait plus logique) Modifié 18 avril 2019 par pehache Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ninju Posté(e) 18 avril 2019 Auteur Partager Posté(e) 18 avril 2019 Bonsoir, Tout d'abord merci pour votre réponse @Sethenès et @pehache J ai pensé realiser des déplacements de 30 pixels car les images des blocs font en effet 30 pixels ( de large et de hauteur), est-ce selon vous choquant ? (Je débute dans le domaine) . Malheureusement je rencontre des difficultés à comprendre le terme tester que @Sethenès utilise ici, pourriez vous me l'expliquer? Je vous remercie d'avance. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sethenès Posté(e) 18 avril 2019 Partager Posté(e) 18 avril 2019 Bah, je t'ai donné une piste. A toi de faire le travail. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
pehache Posté(e) 18 avril 2019 Partager Posté(e) 18 avril 2019 Il faut que tu traites séparément la représentation "logique" de ton problème d'une part et l'affichage d'autre part. La position du personnage dans le labyrinthe doit être exprimée par des coordonées qui correspondent aux indices du tableau, et tu multiplies les indices par 30 pour avoir des valeurs en pixels pour l'affichage. Il y a 1 heure, ninju a dit : Malheureusement je rencontre des difficultés à comprendre le terme tester Oui, alors là on est quand même sur la base de la base de la programmation. Si tu ne comprends même pas le terme je ne vois pas comment tu vas pouvoir écrire un programme... Commence par suivre un cours de programmation pour acquérir les bases, on en trouve en ligne comme ici : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Virginie-chan Posté(e) 19 avril 2019 Partager Posté(e) 19 avril 2019 Bien le bonjour très cher ninju,Ils ne vous apprennent pas les fonctions que vous devez utiliser dans vos cours !?! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.