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
| from tkinter import *
from random import randrange
from math import *
## Declaration des variables
# Dimensions
XMAX, YMAX = 550, 600
# Position et vitesse
X, Y = 265, 550
DX, DY = -10, -10
# Coordonées de la barre
xbar, ybar = 275, 580
# Propriétés de la balle
RAYON = 8
flag = 0
# Mouvement de la balle
def move():
global X, Y, DX, DY, XMAX, YMAX, balle, flag, RAYON
xp = X + DX
yp = Y + DY
for i in range(len(liste_brique_graphique)):
if (yp == coord_y[i]):
if (liste_brique_etat[i] == True):
# la balle repart
DY = -DY
# On supprime la brique i graphiquement
Can1.delete(fenetre, liste_brique_graphique[i])
# On supprime la brique i graphiquement
liste_brique_etat[i] = False
# rebond a droite
if xp > YMAX - 35:
DX = -DX
# rebond a gauche
if xp < 0:
DX = -DX
# rebond en haut
if yp < 0:
DY = -DY
# rebond sur la raquette
if yp >= ybar - 10 and xp < xbar + 50 and xp > xbar - 50:
DY = -DY
X, Y = X + DX, Y + DY
Can1.coords(balle, X - RAYON, Y - RAYON, X + RAYON, Y + RAYON)
if flag > 0:
fenetre.after(45, move)
def start(event):
global flag
flag = flag + 1
if flag == 1:
move()
"démarrer"
def stop(event):
"arret de l'animation"
global flag
flag = 0
# Pour quitter le programme
def Quitter(event):
fenetre.destroy()
def Clavier(event):
global xbar, ybar
touche = event.keysym
if touche == 'Left':
xbar = xbar - 30
if touche == 'Right':
xbar = xbar + 30
if touche == 'Escape':
fenetre.destroy
Can1.coords(raquette, xbar - 50, ybar - 8, xbar + 50, ybar + 8)
# Définition de la fenetre
fenetre = Tk()
fenetre.title('casse briques')
# Indique les normes du Canevas
Can1 = Canvas(fenetre, width=XMAX, height=YMAX, bg='white')
Can1.pack()
# Définition du boutton "Start"
Button(fenetre, text='Démarrer', command=move).pack(side=LEFT, padx=15, pady=10)
Can1.bind("<Return>", start)
# Définition du boutton "Quitter"
Button(fenetre, text='Quitter', command=fenetre.destroy).pack(side=RIGHT, padx=15, pady=10)
Can1.bind("<Escape>", Quitter)
# Cliquer sur p pour mettre en pause
Can1.bind("<p>", stop)
# Création de la raquette et de la balle
raquette = Can1.create_rectangle(xbar - 50, ybar - 8, xbar + 50, ybar + 8, width=2, fill='black')
balle = Can1.create_oval(X - RAYON, Y - RAYON, X + RAYON, Y + RAYON, width=1, fill='red')
# Création de la liste
liste_brique_graphique = []
liste_brique_etat = [True]*len(liste_brique_graphique)
coord_x = []
coord_y = []
for y in range(50, 110, 20):
for x in range (50, 500, 50):
#On crée un objet brique
brick_rect = Can1.create_rectangle(x, y, x+50, y+20, fill='green')
coord_x.append(x);
coord_y.append(y);
# On ajoute la brique graphique dans la liste
liste_brique_graphique.append(brick_rect)
# On ajoute l'état de la brique dans la liste
# True = brique est présente
# False = brique est détruite
liste_brique_etat.append(True)
nb_brique=0
for i in range(len(liste_brique_etat)):
if(liste_brique_etat[i]==True):
nb_brique=nb_brique+1
if (nb_brique==0):
Can1.create_text(250,250,text="PERDU :(",fill='black')
print(nb_brique)
Can1.focus_set()
Can1.bind('<Key>', Clavier)
fenetre.mainloop() |
Partager