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