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
| ######### Les tests #####################
#on teste si la balle va toucher un obstacle vertical
#xb et yb sont les coordonnees de la balle
#xmax,ymax,xmin,ymin sont les extrémités du flipper
######### Les tests #####################
#on teste si la balle va toucher un obstacle vertical
#xb et yb sont les coordonnees de la balle
#xmax,ymax,xmin,ymin sont les extrémités du flipper
def touche_obstacle_v(xb,yb,xmax,ymax,xmin,ymin):
if xb==xmax or xb==xmin:#si touche les bords verticaux du flipper
alpha=pi-alpha #si la balle touche un bord, elle repart symétriquement donc l'angle change
xb=xb+cos(alpha)
yb=yb+sin(alpha)
return 1
#on teste si la balle touche un coin du flipper
elif xb==xmax and yb==ymin or xb==xmax and yb==ymax or xb==xmin and yb==ymin or xb==xmin and yb==ymax:
alpha=pi+alpha #si elle touche, elle repart en sens inverse avec le même angle
xb=xb+cos(alpha)
yb=yb+sin(alpha)
return -1
else:
return 0
#on teste si la balle touche des obstacles horizontaux (bords horizontaux du flipper ou les plots(segments)
def touche_obstacle_h(xb,yb,listeplot,ymin,ymax):
if yb==ymin or yb==ymax:#si ca touche les bords horizontaux du flipper
alpha=-alpha
xb=xb+cos(alpha)
yb=yb+cos(alpha)
return 1
else:
for i in listeplot: #on teste si ca touche les plots
a,b,c=i
if a<=xb<=b and yb==c:
alpha=-alpha
xb=xb+cos(alpha)
yb=yb+cos(alpha)
return 1
else:
return 0
def mouvement_balle():
global xb,yb,alpha,flag
while touche_obstacle_h(xb,yb,listeplot,ymin,ymax)==0 and touche_obstacle_v(xb,yb,xmax,ymax,xmin,ymin)==0:
#on voudrait que la balle avance tant qu'elle ne touche ni le flipper, ni les plots
xb, yb = xb+cos(alpha), yb+sin(alpha)
interfacejeu.coords(balle,xb,yb,xb+30,yb+30)
if flag >0:
root.after(50,mouvement_balle) # => boucler après 50 millisecondes
def demarrer():
"démarrage de l'animation"
global flag
if flag ==0: # pour ne lancer qu'une seule boucle
flag =1
mouvement_balle()
def pause():
"arret de l'animation"
global flag
flag =0
########Programme principal#############
listeplot=[(x1,xa1,y1),(x2,xa2,y2),(x3,xa3,y3)] #les x sont les abscisses de début des plots, les xa sont leurs abscisses de fin et les y leurs ordonnées
xb, yb = 10, 10 #position initiale de la balle
alpha=pi/4
flag=0
balle = interfacejeu.create_oval(xb, yb, xb+30, yb+30, width=2, fill='red') |
Partager