Bonjour! Dans le code ci-dessous, j'aimerais créer le déplacement d'un pion (cheval) contenu dans un canva, grâce à un imbriquement de If contenant des positions en pixels. Par exemple :
chevalj=Canvas(plateau, height=42, width=42) #Caneva contenant le pion, 42 étant de pas entre chaque case du plateau
chevalj.place(x=Xj-21,y=Yj-21) #Pour placer le caneva du pion au centre de la case, peut-être que placer Xj et Yj dès maintenant pose problème pour plus-tard donc il suffit de changer directement la valeur numérique initiale de Xj et Yj, comme ça on appelle pas Xj/Yj dès le départ...
chevaljaune=PhotoImage(file='chevaljaune.gif')
chevalJ=chevalj.create_image(21,21,image=chevaljaune) #Image du pion
Xj=168
Yj=168 #Positions initiales du pion
(...)
If nb == 3 #Résultat du lancer de dé
If Xj == 168 and Yj == 168
Xj=42
Yj=294 #Le personnage avance de 3 cases (ici, en réalité, il quitte le boxe de départ et va se placer sur la première case du parcours)
plateau.move(chevalj,Xj,Yj) #"Plateau" étant un caneva contenant le caneva chevalj
Ainsi, le déplacement du pion serait réalisé à partir d'un If de résultat de dé, puis d'un If de position avant lancer de dé. Je pense qu'il faut donc utiliser un "global Xj, Yj" car ces variables changeront constamment, mais je n'y arrive pas. Pour l'instant je n'ai codé qu'un seul cas (quand le joueur est dans le boxe et qu'il fait 6, donc il va sur la première case du parcours) mais il faudrait le faire pour chaque résultat du dé et pour chaque position du pion (c'est très long donc j'aurais besoin de votre aide pour que le principe fonctionne...)
Je n'arrive pas à faire fonctionner ce système, pourriez-vous svp corriger mon code?
from tkinter import*
from random import*
ecran=Tk()
ecran.title('Petits Chevaux')
ecran.attributes('-fullscreen',1)
ecran.configure(background='light grey')
titre=Label(ecran,text='JEU DES PETITS CHEVAUX',font='tk.meHelvetica 18 bold underline',background='light grey')
titre.pack(padx=10,pady=10)
hauteur=714
largeur=714
plateau=Canvas(ecran,bg='white', height=hauteur, width=largeur)
plateau.pack()
fichier_img=PhotoImage(file='plateauphoto.gif')
img=plateau.create_image(357,357,image=fichier_img)
Xj=168
Yj=168
Xb=546
Yb=168
Xv=168
Yv=546
Xr=546
Yr=546
chevalj=Canvas(plateau, height=42, width=42)
chevalj.place(x=Xj-21,y=Yj-21)
#chevalj.attributes('-alpha', 0) (je voulais essayer de mettre un fond trasnparent au canva...)
chevaljaune=PhotoImage(file='chevaljaune.gif')
chevalJ=chevalj.create_image(21,21,image=chevaljaune)
chevalbleu=PhotoImage(file='chevalbleu.gif')
chevalb=plateau.create_image(Xb,Yb,image=chevalbleu)
chevalvert=PhotoImage(file='chevalvert.gif')
chevalv=plateau.create_image(Xv,Yv,image=chevalvert)
chevalrouge=PhotoImage(file='chevalrouge.gif')
chevalr=plateau.create_image(Xr,Yr,image=chevalrouge)
def boutonsfin():
FenetreFin=Toplevel(ecran)
FenetreFin.title('Confirmation')
FenetreFin.geometry('142x52')
quitterOrester=Label(FenetreFin,text="CONFIRMER?")
quitterOrester.pack()
BoutonQuitter=Button(FenetreFin,text='CONFIRMER',activebackground='light grey',command=ecran.destroy)
BoutonQuitter.pack(side=LEFT)
BoutonRester=Button(FenetreFin,text='ANNULER',activebackground='light grey',command=FenetreFin.destroy)
BoutonRester.pack(side=RIGHT)
def lancerde():
FenetreDe=Toplevel(ecran)
def alea():
nb=randint(1,3)
if nb==1 :
FenetreDe.destroy()
FenetreDeEffectue=Toplevel(ecran)
res=Label(FenetreDeEffectue,text='Résultat : '+str(nb), fg='red')
res.pack(padx=15,pady=10)
imgde = Canvas(FenetreDeEffectue,bg='white',height=100,width=100)
imgde.pack(side=TOP)
img=PhotoImage(file='face1.gif')
photo=imgde.create_image(50,50,image=img)
FenetreDeEffectue.mainloop()
if nb==2 :
FenetreDe.destroy()
FenetreDeEffectue=Toplevel(ecran)
res=Label(FenetreDeEffectue,text='Résultat : '+str(nb), fg='red')
res.pack(padx=15,pady=10)
imgde = Canvas(FenetreDeEffectue,bg='white',height=100,width=100)
imgde.pack(side=TOP)
img=PhotoImage(file='face2.gif')
photo=imgde.create_image(50,50,image=img)
FenetreDeEffectue.mainloop()
if nb==3 :
rejouertrois=Toplevel(FenetreDe)
texte=Label(rejouertrois,text='Vous avez fait 3, rejouez !', width=20,height=1,fg="black")
texte.pack()
imgde = Canvas(rejouertrois,bg='white',height=100,width=100)
imgde.pack(side=TOP)
img=PhotoImage(file='face3.gif')
photo=imgde.create_image(50,50,image=img)
bououtonquittefentre3=Button(rejouertrois,text='Quitter',command=rejouertrois.destroy)
bououtonquittefentre3.pack(side=BOTTOM)
rejouertrois.mainloop()
global Xj
global Yj
if Xj==168 and Yj==168 :
Xj=42
Yj=294
plateau.move(chevalj,Xj,Yj)
#plateau.update() (je ne sais pas si cela est utile, j'ai juste testé plusieurs choses dans l'espoir que ça fonctionne)
#plateau.mainloop() (même chose)
boutonlancedede=Button(FenetreDe,text='Lancer le dé',command=alea)
boutonlancedede.pack(side=TOP)
FenetreDe.mainloop()
BoutonDe=Button(ecran,text='LANCER LE DÉ',command=lancerde)
BoutonDe.pack()
BoutonDe.place(relx=0.1, rely=.5)
BoutonFin=Button(ecran,text='FIN DU JEU', command=boutonsfin)
BoutonFin.pack()
BoutonFin.place(relx=.5, rely=.95)
plateau.mainloop()
ecran.mainloop()