Ben
-
17 mai 2020 à 18:24
Phil_1857
Messages postés1872Date d'inscriptionlundi 23 mars 2020StatutMembreDernière intervention28 février 2024
-
20 mai 2020 à 12:04
Bonjour,
Je prépare actuellement un jeu sur python tkinter.
Cependant, parmi mes principaux problèmes, je n'arrive pas à faire déplacer les joueurs (qui sont des pions) grâce aux boutons qui s'affichent sur le canvas. J'utilise les widget button pour cela.
Pour que vous compreniez mon problème, voici le programme :
print("Création du cercle (item" , item , ")")
# affichage de tous les items de Canvas
print(Canvas.find_all())
def Undo():
""" Efface le dernier cercle"""
if len(Canvas.find_all()) > 1:
item = Canvas.find_all()[-1]
# on efface le cercle
can.delete(item)
print("Suppression du Pion (item" , item ,")")
# affichage de tous les items de Canvas
print(Canvas.find_all())
def EffacerTout():
""" Efface tous les cercles"""
while len(Canvas.find_all()) > 1:
Undo()
def flecheDroite(event):
print("Déplace vers la droite")
can.move(pion,PAS,0)
can.pack()
def flecheGauche(event):
print("Déplace vers la gauche")
can.move(pion,PAS,0)
can.pack()
def flecheUp(event):
print("Déplace vers le haut")
can.move(pion,PAS,0)
can.pack()
def flecheDown(event):
print("Déplace vers le bas")
can.move(pion,PAS,0)
can.pack()
def plateau() :
""" Commencer la partie"""
can.create_image(0, 0, anchor = 'nw', image = image_de_fond)
Pion = can.create_oval(PosX-10,PosY-10,PosX+10,PosY+10,width = 3,outline = 'black',fill = 'red')
can.focus_set()
can.bind('<Key>',Clavier)
can.pack(padx = 5, pady = 5)
Pions_rouges = []
x0r, y0r = 50, 50
for i in range(4):
for j in range(2):
x, y = x0r + 50*i, y0r + 50*j
## x, y = (0, 0) (0, 50), (50, 0), (50, 50)
item = can.create_oval(x-a,y-a,x+a,y+a,width = 1 ,fill = ['red'])
Pions_rouges.append(item)
## Pions_rouges[0] correspond au pion initialement en (0, 0)
Pions_bleus = []
x0b, y0b = 549, 400
for i in range(4):
for j in range(2):
x, y = x0b + 50*i, y0b + 50*j
## x, y = (250, 250) (0, 250), (250, 0), (250, 250)
item = can.create_oval(x-a,y-a,x+a,y+a,width = 1 ,fill = ['blue'])
Pions_bleus.append(item)
## Pions_rouges[0] correspond au pion initialement en (0, 0)
def Clic(event):
""" Gestion de l'événement Clic gauche """
global DETECTION_CLIC_SUR_OBJET, NO_ITEM_DEPLACE
# position du pointeur de la souris
X = event.x
Y = event.y
print("Position du clic -> ",X,Y)
## Trouver le pion le plus proche
##http://tkinter.fdex.eu/doc/caw.html#Canvas.find_closest
# coordonnées de l'objet
##[xmin,ymin,xmax,ymax] = Canvas.coords(Carre)
t = can.find_closest(X, Y)
print(type(t))
print(t)
no_item = t[0]
print(no_item)
can.itemconfigure(no_item, fill = 'grey')
NO_ITEM_DEPLACE = no_item
"""
print("Position objet -> ",xmin,ymin,xmax,ymax)
if xmin<=X<=xmax and ymin<=Y<=ymax: DETECTION_CLIC_SUR_OBJET = True
else: DETECTION_CLIC_SUR_OBJET = False
print("DETECTION CLIC SUR OBJET -> ",DETECTION_CLIC_SUR_OBJET)
"""
def Drag(event):
global NO_ITEM_DEPLACE
""" Gestion de l'événement bouton gauche enfoncé """
X = event.x
Y = event.y
print("Position du pointeur -> ",X,Y)
x0, y0, x1, y1 = can.coords(NO_ITEM_DEPLACE)
can.coords(NO_ITEM_DEPLACE, X-a, Y-a, X+a, Y+a)
can.itemconfigure(NO_ITEM_DEPLACE, fill = 'orange')
##
## if DETECTION_CLIC_SUR_OBJET == True:
## #limite de l'objet dans la zone graphique
## if X<0: X=0
## if X>Largeur: X=Largeur
## if Y<0: Y=0
## if Y>Hauteur: Y=Hauteur
## #mise à jour de la position de l'objet (drag)
## Canvas.coords(Carre,X-TailleCarre,Y-TailleCarre,X+TailleCarre,Y+TailleCarre)
def Clavier(event):
""" Gestion de l'événement Appui sur une touche du clavier """
global PosX,PosY
touche = event.keysym
print(touche)
# déplacement vers le haut
if touche == 'Up':
PosY -= 20
# déplacement vers le bas
if touche == 'Down':
PosY += 20
# déplacement vers la droite
if touche == 'Right':
PosX += 20
# déplacement vers la gauche
if touche == 'Left':
PosX -= 20
# on dessine le pion à sa nouvelle position
Canvas.coords(Pion,PosX -10, PosY -10, PosX +10, PosY +10)
def delete(): # Arrêter le jeu
for i in can.find_all():
can.delete(i)
# position initiale du pion
PosX = 230
PosY = 150
# Création d'un widget Canvas (zone graphique)
# Création de la fenêtre
Mafenetre = Tk()
Mafenetre.title('Jeu de pions')
Largeur = 480
Hauteur = 320
# Mafenetre.attributes('-fullscreen',1)
Mafenetre.configure(background = 'darkgreen')
titre = Label(Mafenetre, text = 'JEU DE PIONS',font = 'Castellar 50 bold underline',background = 'darkgreen')
titre.pack(padx = 10,pady = 10)
can = Canvas(Mafenetre,height = 500,width = 750)
can.pack()
# La méthode bind() permet de lier un événement avec une fonction
can.bind('<Button-1>',Clic) # évévement clic gauche (press)
can.bind('<B1-Motion>',Drag) # événement bouton gauche enfoncé (hold down)
# labels
# affichage_compteur = Label(Mafenetre, text = '0', font = ("Helvetica", 12))
# affichage_compteur.grid(row = 1, column = 1)