Bonjour, je suis en train de créer un jeu qui s'appelle casse brique, il n'est pas encore aboutit pour l'instant je n'ai réussi qu'à créer la balle, la raquette, ainsi que les rebonds sur les parois de la fenêtre et quelques autres fonctions pour l'ergonomie du jeu.
Je fais un poste car je voudrais des conseils sur les quelconques points que je pourrais optimiser avant de pouvoir continuer le développement du jeu.

Merci d'avance

Ilan

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
 
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
from math import cos,pi,sin
 
fenetre= Tk()
fenetre.title("Casse briques")
 
def Clavier(event):
    """ Gestion de l'événement Appui sur une touche du clavier """
    global x1,x2,raquette,vitesse
    touche = event.keysym
    # déplacement vers la droite
    Can1.delete(raquette)
    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)
    raquette=Can1.create_image(x1+72,y1-15,image=RAQUETTE)
 
def quitter (event):#Pour quitter le programme
    fenetre.destroy()
def pleinecran (event):        
        w, h = fenetre.winfo_screenwidth(), fenetre.winfo_screenheight()
        fenetre.overrideredirect(1)
        fenetre.geometry("%dx%d+0+0" % (w, h))
        fenetre.mainloop()
 
def deplacement():
    """ Déplacement de la balle """
    global X,Y,DX,DY,RAYON,LARGEUR,HAUTEUR,FLAG,x1,x2,y1,y2,vitesse,cible2
 
    Can1.delete(cible2)
    # 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
 
    #Si la balle tape la barre
    if Y+RAYON >= y2 and x1 <= X <= x2 :
        DY = -DY
        #x1 le côté gauche de la raquette et x2 le côté droit
        #Angle que prend la balle sur le côté gauche de la raquette
        if x1-1 < X < x1+20: # "X" est la coordonnées de la balle
            DX = vitesse*math.cos(5*pi/6)
        if x1+20 < X < x1+42: 
            DX = vitesse*math.cos(3*pi/4)
        if x1+42 < X < x1+63: 
            DX = vitesse*math.cos(2*pi/3)
        if x1+63 < X < x1+68:
            DX = vitesse*math.cos(7*pi/12)
 
        #Angle que prend la balle sur le côté droit de la raquette
        if x2-68 < X < x2-63:
            DX = vitesse*math.cos(5*pi/12)
        if x2-63 < X < x2-42: 
            DX = vitesse*math.cos(pi/3)
        if x2-42 < X < x2-20:
            DX = vitesse*math.cos(pi/4)
        if x2-20 < X < x2+1:
            DX = vitesse*math.cos(pi/6)
 
        #Ici l'angle prend un angle droit à cause de cos de pi/2
        if x1+68 < X < x1+88:
            DX = vitesse*math.cos(pi/2)
 
    #Faire le rebond si les côtés de la raquette
    #Sur le côté gauche
    if Y >= y2 and x1+RAYON >= X+RAYON >= x1:
        X = 2*(LARGEUR-RAYON)-X
 
    if Y >= y2 and x2-RAYON <= X-RAYON <= x2:
        X = 2*(LARGEUR-RAYON)-X
 
    # affichage
    Can1.coords(Balle,X-RAYON,Y-RAYON,X+RAYON,Y+RAYON)
 
    if FLAG >0:
        fenetre.after(10,deplacement) # mise à jour toutes les 50 ms
    cible2=Can1.create_image(X,Y,image=dbz)
 
def stop():
    "arret de l'animation"
    global FLAG   
    FLAG =0
 
def start(event): #On met event pour pouvoir executer la fonction grâce à la toucher entrer
 # demarrage de l'animation
 global FLAG,instructions
 del instructions #On enlève l'image instructions en optimisant la mémoire
 if FLAG ==0:  #pour ne lancer qu’une seule boucle
     FLAG =1
     deplacement()
def effacer(event):
    del instructions
 
#DEBUT DU PROGRAMME###########################
 
Can1 = Canvas(fenetre, width=550, height=600, highlightthickness=0)#On définit 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 = 700 #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
 
RAQUETTE= PhotoImage(file='RAQUETTE.gif')
raquette=Can1.create_image(x1+72,y1-15,image=RAQUETTE)
Can1.focus_set()
Can1.bind('<Key>',Clavier)
 
#Coordonnées de la balles
RAYON = 10 # rayon de la balle
X = LARGEUR/2 #
Y = 535 #Pour la mettre au dessus de la raquette qui est à 560pixels
 
# direction initiale aléatoire de la balle
angle = random.uniform(0,2*math.pi)
vitesse = random.uniform(1.8,2)*5 #Vitesse de la balle
DX = vitesse*math.cos(2/pi) #Vitesse et angle de la balle en abscisse
DY = vitesse*math.sin(angle) #Vitesse et angle de la balle en ordonnée
dbz= PhotoImage (file='BALLE.gif')
 
# Création de la balle
Balle = Can1.create_oval(X-RAYON,Y-RAYON,X+RAYON,Y+RAYON,width=1,fill='green')
cible2=Can1.create_image(X,Y,image=dbz)
 
# Instructions
instructions= PhotoImage(file='instructions.gif')
cible=Can1.create_image(275,250,image=instructions)
 
Can1.bind("<Return>",start)
Can1.bind("<Escape>",quitter)
Can1.bind("<f>",pleinecran)
Can1.bind("<F>",pleinecran)
 
Can1.pack()
 
fenetre.mainloop()