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
| from tkinter import *
class Balle(object):
def __init__(self,boss,x,y,r,coul):
self.boss = boss
self.x,self.y,self.r = x,y,r
self.balle = boss.create_oval(x-r,y-r,x+r,y+r, width=2,fill=coul)
self.xMax =int(boss.cget('width'))
self.yMax =int(boss.cget('height'))
self.sensV = 1
self.sensH = 1
self.dx,self.dy = 5,5
def deplacement(self):
"deplacement uniforme de la balle"
self.boss.move(self.balle,self.dx* self.sensH,self.dy*self.sensV)
self.x += self.dx
self.y += self.dy
# => appel de la methode collision
self.orienter()
self.boss.after(20,self.deplacement)
def orienter(self):
"test si il y a un choc, l'orientation de la balle change"
#choc contre un mur vertical
if self.x <= self.r or self.x >= self.xMax- self.r:
self.dx = -1 * self.sensH * self.dx
#choc contre un mur horizontal
if self.y <= self.r or self.y >= self.yMax- self.r:
self.dy = -1 * self.sensV * self.dy
class Application(Frame):
"fenetre principale de l'application"
def __init__(self):
Frame.__init__(self)
self.master.title('gestion des collisions')
self.pack()
self.jeu = Canvas(self,width=300,height=300,bg='ivory')
self.jeu.pack(padx=10, pady=10)
self.b1=Balle(self.jeu,20,150,5,coul ='red')
self.b2=Balle(self.jeu,165,180,5,coul ='blue')
self.b3=Balle(self.jeu,180,120,5,coul ='yellow')
#liste parcouru pour les tests de collisions
self.listBalle = [self.b1,self.b2,self.b3]
self.b1.deplacement()
self.b2.deplacement()
self.b3.deplacement()
def collision(self):
"gestion des collisions entre les balles"
#test de collision
i,j = 0,1
while i <(len(self.listBalle)):
while j <(len(self.listBalle)):
if (self.b[i].x -self.b[j].x)**2+(self.b[i].y /
-self.b[j].y)**2==(2*self.b[i].r)**2:
print('collision')
j=j+1
i=i+1
j=i+1
if __name__ == '__main__':
Application().mainloop() |
Partager