Bonjour,
Je suis en train de créer un jeu de tir avec des tanks.
Voilà plusieurs heures que je bloque sur un problème avec les coordonnées de ma balle dans les fonctions tirJ1, animTirJ1 et tirJ2 et animTirJ2, lignes 28 à 43 et 47 à 64, j'aimerai que la canon ne tire que si on appuie sur le bouton feu, cela marche pour le premier tir, mais tous les tirs suivants, le bouton "feu" ne fait rien, et le canon tire lorsque je change la puissance du tir (scale powerA ou powerB).
Je ne trouve vraiment pas de solution à ce problème.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 
from tkinter import *
from math import pi, sin, cos
 
#----------------------------------------------
#--             Classes                      --
#----------------------------------------------
class Tank:
	def __init__(self, oudessiner, x, y, sens):
		self.canev = oudessiner
		self.direc = sens
		self.x1 = x #x1 pour calculer la formule du tir
		self.y1 = y #y1 pour calculer la formule du tir
		self.Lcanon = 25 * self.direc #longueur du canon pour formule du tir
		self.x2 = x + self.Lcanon #x2 pour calculer la formule du tir
		self.y2 = y  #y2 pour calculer la formule du tir
		self.balle = self.canev.create_oval(self.x2, self.y2, self.x2, self.y2, fill = "green", width = 2)
		self.maxX = int(self.canev.cget('width'))
		self.maxY = int(self.canev.cget('height'))
		self.canon = self.canev.create_line(self.x1, self.y1, self.x2 , self.y2, fill = "black", width = 5)
		self.tour = self.canev.create_oval(self.x1-10, self.y1-10, self.x1 + 10, self.y1 + 10, fill = "red")
		self.corps = self.canev.create_rectangle(self.x1 - 20, self.y1, self.x1 + 20, self.y1 + 15, fill = "grey")
		self.roue1 = self.canev.create_oval(self.x1 - 17.5, self.y1 + 12.5, self.x1 - 10, self.y1 + 20, fill = "black")
		self.roue2 = self.canev.create_oval(self.x1 + 10, self.y1 + 12.5, self.x1 + 17.5, self.y1 + 20, fill = "black")
 
#----------Joueur 1 (gauche)--------------------
 
	def angleJ1(self, angleA): #angle du canon	
		self.angle1 = float(angleA)*2*pi/360
		self.x2 = self.x1 + self.Lcanon*cos(self.angle1)
		self.y2 = self.y1 - self.Lcanon*sin(self.angle1)
		self.canev.coords(self.canon, self.x1, self.y1, self.x2, self.y2) #change les coord du canon
 
	def tirJ1(self, powerA): #ordre de tir
		self.power1 = float(powerA) / 4 #vitesse de la balle
		self.canev.coords(self.balle, self.x2 - 2.5, self.y2 -2.5, self.x2 + 2.5, self.y2 + 2.5) #change les coord de la balle
		self.powerX1 = self.power1 * cos(self.angle1)
		self.powerY1 = -self.power1 * sin(self.angle1) # - en Y = tir vers la droite	
 
	def animTirJ1(self): #animation de la balle
		self.canev.move(self.balle, self.powerX1, self.powerY1) 
		self.powerY1 += 0.5
		self.canev.after(30, self.animTirJ1)
 
#----------Joueur 2 (droite)--------------------
 
	def angleJ2(self, angleB): #angle du canon	
		self.angle2 = (float(angleB)*2*pi/360) * -1
		self.x2 = self.x1 + self.Lcanon*cos(self.angle2)
		self.y2 = self.y1 - self.Lcanon*sin(self.angle2)
		self.canev.coords(self.canon, self.x1, self.y1, self.x2, self.y2) #change les coord du canon
 
 
 
	def tirJ2(self, powerB): #ordre de tir
		self.power2 = float(powerB) / 4 #vitesse de la balle	
		self.canev.coords(self.balle, self.x2 - 2.5, self.y2 -2.5, self.x2 + 2.5, self.y2 + 2.5) #change les coord de la balle
		self.powerX2 = -self.power2 * cos(self.angle2) # - en X = tir vers la gauche
		self.powerY2 = self.power2 * sin(self.angle2)
 
	def animTirJ2(self): #animation de la balle
		self.canev.move(self.balle, self.powerX2, self.powerY2)
		self.powerY2 += 0.5
		self.canev.after(30, self.animTirJ2)
 
 
#---------------Fenetre----------------------------------
 
fen = Tk()
fen.title("Bomb it")
 
can = Canvas(fen, width = 1000, height = 600)
can.pack()
 
aireJeu = can.create_rectangle(5, 500, 995 , 5, fill = "white")
 
#--------------Joueur à gauche---------------------------
 
jou1 = Tank(can, 200, 400, 1)
 
angleA = Scale(fen, label = "Angle de tir", from_ = 180, to = 0, command = jou1.angleJ1)
angleA.pack(side = LEFT)
 
powerA = Scale(fen, label = "Puissance du tir", from_= 0, to= 100, orient=HORIZONTAL, command = jou1.tirJ1)
powerA.pack(side = LEFT)
 
buttA = Button(fen, text = "Feu", command = jou1.animTirJ1)
buttA.pack(side = LEFT)
 
#--------------Joueur à droite---------------------------
 
jou2 = Tank(can, 800, 400, -1)
 
angleB = Scale(fen, label = "Angle de tir", from_ = 180, to = 0, command = jou2.angleJ2)
angleB.pack(side = RIGHT)
 
powerB = Scale(fen, label = "Puissance du tir", from_= 0, to= 100, orient=HORIZONTAL, command = jou2.tirJ2)
powerB.pack(side = RIGHT)
 
buttB = Button(fen, text = "Feu", command = jou2.animTirJ2)
buttB.pack(side = RIGHT)
 
 
fen.mainloop()