Voici un programme qui crée une balle de rayon 10 et un rectangle de hauteur 10 et de largeur 50 qui
rebondissent d’une façon aléatoire aux bords de l’écran.
Modifier ce programme pour qu’il gère la collision entre la balle et le rectangle.
Résolution de l'exercice "Collision d'une balle et d'un rectangle".
from tkinter import *
import random
fenetre=Tk()
def animation():
global VX, VY, X, Y, x, y, vx, vy
# rectangle rebondit aux bords de la fenêtre
futurx, futury = x + vx, y + vy
if futurx > 250 or futurx < 5 :
vx = - vx
futurx = x + vx
if futury > 295 or futury < 5 :
vy = - vy
futury = y + vy
x, y = futurx, futury
Fond.coords(Bouclier,x, y, x+50, y+10)
futurX, futurY = X + VX, Y + VY
if futurX > 290 or futurX < 10 :
VX = - VX
futurX = X + VX
if futurY > 290 or futurY < 10 :
VY = - VY
futurY = Y + VY
if x-10 <= futurX <= x + 50 and y -10 < futurY < y + 10:
VY = - VY
VX = - VX
futurY = Y + VY
futurX = X + VX
X, Y = futurX, futurY
Fond.coords(Balle1, X - 10, Y -10, X + 10, Y + 10)
fenetre.after(40,animation)
Fond=Canvas(fenetre,width=300,height=300,bg="white")
Fond.grid()
VX = random.randint(5,15)
VY = random.randint(5,10)
X, Y = 50, 100
Balle1 = Fond.create_oval(40, 90, 60, 110, fill = 'red')
x, y = 60, 60
vx = random.randint(-5,5)
vy = random.randint(-5,5)
Bouclier = Fond.create_rectangle(50,50,10,60,fill='green')
animation()
fenetre.mainloop()
Collision de trois balles
Voici un programme qui crée trois balles qui rebondissent. Modifier ce programme pour qu’il gère la collision entre les trois balles.
from tkinter import *
import random
def animation() :
for i in range(3) :
newX = X[i] + VX[i]
if newX > 500-r[i] or newX < r[i] :
VX[i] = - VX[i]
newX = X[i] + VX[i]
newY = Y[i] + VY[i]
if newY > 500-r[i] or newY < r[i] :
VY[i] = - VY[i]
newY = Y[i] + VY[i]
X[i], Y[i] = newX, newY
Fond.coords(balle[i],X[i]-r[i],Y[i]-r[i],X[i]+r[i],Y[i]+r[i])
fenetre.after(50,animation)
fenetre=Tk()
fenetre.geometry("500x500")
Fond=Canvas(fenetre,bg='white',width=500,height=500)
Fond.place(x=0,y=0)
X, Y, VX, VY, r, balle = [], [], [], [], [], []
coul=['red','green','blue','orange']
for i in range(3):
X.append(random.randint(50,450))
Y.append(random.randint(50,450))
r.append(random.randint(10,30))
VX.append(random.randint(-5,5))
VY.append(random.randint(-5,5))
balle.append(Fond.create_oval(X[i]-r[i],Y[i]-r[i],X[i]+r[i],Y[i]+r[i],fill=random.choice(coul)))
animation()
fenetre.mainloop()
Résolution de l'exercice "Collision de trois balles".