Jump to content
ninju

Projet ISN Labyrinthe en python sur Tkinter

Recommended Posts

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

Share this post


Link to post
Share on other sites

Bien le bonsoir très cher ninju,

Les amateurs de python ne se bousculent pas ici :huh: !

Bonne soirée à vous.

Share this post


Link to post
Share on other sites

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 :huh: !

Bonne soirée à vous.

 

 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Posted (edited)

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)

Edited by pehache

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Bien le bonjour très cher ninju,

Ils ne vous apprennent pas les fonctions que vous devez utiliser dans vos cours :huh: !?!
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×