Aller au contenu

Projet ISN Labyrinthe en python sur Tkinter


ninju

Messages recommandés

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()

arr.png

depart.png

dk_bas.png

fond.png

mur.png

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par pehache
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...