Bonjour, en ce moment j'essaie de créer un casse brique et j'aimerais faire rebondir la balle sur les côtés de mon rectangle.
Actuellement j'ai réussi à créer une fenêtre avec un rectangle pouvant bouger grâce aux flèches directionnelles, une balle qui bouge de façon aléatoire et rebondi sur les côtés de ma fenêtre.
Puis-je avoir quelques conseils pour créer cette fameuse "hitbox" sur mon rectangle.

Voici mon code:

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
105
106
107
108
from tkinter import * #Le programme va aller chercher toute les fonctions de la bibliothèque Tkinter
import math,random    #Le programme va aller chercher toute les fonctions de la bibliotèque math
 
fenetre= Tk()
fenetre.title("Casse briques")
 
def Clavier(event):
    """ Gestion de l'événement Appui sur une touche du clavier """
    global x1,x2
    touche = event.keysym
    # déplacement vers la droite
    if touche == 'Right' and x2<=549:
        x1 += 13.5333333333
        x2 += 13.5333333333
    # déplacement vers la gauche
    if touche == 'Left' and x1>=0.4:
        x1 -= 13.5333333333
        x2 -= 13.5333333333
    #On donne les nouvelles coordonnées à la raquette
    Can1.coords(Rectangle1,x1,y1,x2,y2)
    print(x1)
    print(x2)
 
def deplacement():
    """ Déplacement de la balle """
    global X,Y,DX,DY,RAYON,LARGEUR,HAUTEUR,FLAG,x1,x2,y1,y2
    # rebond à droite
    if X+RAYON+DX > LARGEUR:
        X = 2*(LARGEUR-RAYON)-X
        DX = -DX
 
    # rebond à gauche
    if X-RAYON+DX < 0:
        X = 2*RAYON-X
        DX = -DX
 
    # rebond en bas
    if Y+RAYON+DY > HAUTEUR:
        Y = 2*(HAUTEUR-RAYON)-Y
        DY = -DY
 
    # rebond en haut
    if Y-RAYON+DY < 0:
        Y = 2*RAYON-Y
        DY = -DY
 
    X = X+DX
    Y = Y+DY
 
    # affichage
    Can1.coords(Balle,X-RAYON,Y-RAYON,X+RAYON,Y+RAYON)
 
    if FLAG >0:
        FLAG = 1
        fenetre.after(50,deplacement) # mise à jour toutes les 50 ms
 
def start():
 # demarrage de l'animation"
    global FLAG
    if FLAG ==0: # pour ne lancer qu’une seule boucle
        FLAG =1
        deplacement()
 
 
Can1 = Canvas(fenetre, width=550, height=600, highlightthickness=0)#On défini la taille de la fenêtre de jeu grace au canvas
Can1.pack()#Et on n'oublie pas le .pack() pour l'afficher
#highlightthickness=0 Permet d'enlever les bordures dû au "focus" pour
#que le programme reconnaisse les touches
 
LARGEUR =550 #Largeur de la fenêtre
HAUTEUR = 600 #Hauteur de la fenêtre
 
FLAG= 0
x1 = ((1/3)*LARGEUR)+20 #Côté gauche du rectangle
y1 = 590 #Deuxième valeur de la hauteur
x2 = ((2/3)*LARGEUR)-20 #Côté droit du rectangle
y2 = 560 #Première valeur de la hauteur
 
#En définissant la largeur du rectangle de cette façon on obtient une largeur égale à 1/3 de l'écran
#Et au milieu de l'écran.Ensuite on enlève 20 d'abscisse de chaque côté pour
#Raccourcir la barre trop longue à mon goût
 
Rectangle1 = Can1.create_rectangle(x1,y1,x2,y2,fill='blue')
 
#Créer les fonctions pour faire bouger le rectangle:
#Pour que le canvas capture les événement clavier, il faut qu'il soit sélectionner
#(Qu'il est le focus), donc on le sélectionne grâce à cette commande qui lui donne
#Ces contours gris
Can1.focus_set()
Can1.bind('<Key>',Clavier)
 
#Coordonnées de la balles
RAYON = 15 # rayon de la balle
X = LARGEUR/2 #
Y = 545 #Pour la mettre au dessus de la raquette qui est à 560pixels
 
# Création de la balle
Balle = Can1.create_oval(X-RAYON,Y-RAYON,X+RAYON,Y+RAYON,width=1,fill='green')
 
# direction initiale aléatoire de la balle
vitesse = random.uniform(1.8,2)*5
angle = random.uniform(0,2*math.pi)
DX = vitesse*math.cos(angle)
DY = vitesse*math.sin(angle)
 
start()
 
fenetre.mainloop()
Merci d'avance.

Ilan