Litisme
Messages postés9Date d'inscriptiondimanche 15 mars 2015StatutMembreDernière intervention16 mai 2015
-
Modifié par NHenry le 16/05/2015 à 13:28
Whismeril
Messages postés18992Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mars 2024
-
16 mai 2015 à 14:07
# Créé par Eleve, le 27/03/2015 en Python 3.2
from tkinter import * # le programme va aller chercher toutes les fonctions de la bibliothèque Tkinter
from random import randrange
from math import cos,pi,sin
class Principale(Tk):
def __init__(self,parent,vie=5):
Tk.__init__(self,parent)
#Initialisation des paramètres
self.parent = parent
self.flag = 0 #Variable permettant d'empêcher/autoriser, la lancement de la balle
self.vie = []
self.score = 0
#On crée une liste contenant autant d'élement que de vie
for i in range(0,vie):
self.vie.append('')
#On crée un canevas
can = self.can = Canvas(width=490, height = 500,bg='dark red')
can.focus()
#Initialisation des commandes
can.bind_all('<Return>',self.starter)#Pression sur la touche entrée
can.bind('<Motion>',self.souris)#S'adapter au mouvement de la souris
can.bind('<Button-1>', self.starter)#Le clic gauche pour débuter
can.bind_all('p',self.pause) #Définir la lettre p comme Bouton Pause
can.create_rectangle(0,470,492,502,fill='light grey') # On crée la bande pour les vies et le score
can.create_text(415,480,text='Score: ',font="Century 12")
self.tscore = can.create_text(460,480,text='0')
#On crée les balles représentatives des vies
for i in range(0,vie):
self.vie[i] = can.create_oval((25*vie)-(25*i),493,(25*vie)-10-(25*i),483,fill='purple')
#On initialise d'autres paramètres
self.pose = 0 #Pause On/Off
self.angle = pi/3 #Angle de rebond de la balle
self.sens = -1 #Sens Haut/Bas de la balle
self.horizon = 1 #Sens Gauche/Droite de la balle
a = self.lbrique=[] #Liste comportant les briques (pour les supprimer)
self.l = [] #Coordonnées (tuple) des briques
coul=['green', 'yellow','light blue','light pink','orange'] #Différentes couleurs des briques
i = 1 #Permet de définir: Résistance des briques/Couleur des briques
x = 12 #Coordonnées en Abscisses
y = 40 #Coordonnées en Ordonnées
#On crée les 110 briques du jeu
while x<470:
a.append([can.create_rectangle(x,y,x+40,y+10,fill=coul[i]),(i%4)+1])
self.l.append((x,y))
y+=12
i+=1
i = i%5
# i est la résistance de la brique. Si ((i%4)+1) = 3, il faudra taper 3fois la brique
if y==160:
x+=43
y = 40
#Creation de la balle
self.boule = self.can.create_oval(250,450,260,460,fill='purple')
self.coord = [250,450] #coordonnées de l'emplacement initial de la balle
#Creation de la barre(pour les rebonds)
self.barre = can.create_rectangle(235,460,275,465,fill='light green')
self.bar = 235
can.pack()
def starter(self,event): #Fonction qui démarre les balles
if self.flag == 0 and len(self.vie)!=0:
self.go()
self.flag = 1
def pause(self,event): #Fonction qui met en pause le jeu
self.pose+=1
self.pose = self.pose%2
if self.pose==0:
self.go()
self.can.delete(self.text)
else:
self.text = self.can.create_text(250,250,text='Take your Time',font="chiller 32", fill='white')
def souris(self,event): #Permet de déplacer la barre avec la Souris
self.bar = a = event.x
if 20 < a < 475 and self.pose==0:
self.can.coords(self.barre,a-20,460,a+20,465)
def go(self): #Fonction principale, déplace la balle
stop = 0
#On modifie les coordonnées de la balle en fonction des précedentes
x = self.coord[0]
y = self.coord[1]
y += sin(self.angle)*self.sens*5
x += (cos(self.angle))*self.horizon
self.coord[1]=y #On prend les valeurs actuelles du point
self.coord[0]=x
self.can.coords(self.boule,x,y,x+10,y+10)
#
i = 0
while i<len(self.l): #Pour chaque brique
#On vérifie si elles sont en contact avec la balle
if self.l[i][1]-2 <= y <= self.l[i][1]+12 and self.l[i][0]-2 <= x <= self.l[i][0]+42:
#Si oui on change de direction
self.sens = (-1)*self.sens
self.lbrique[i][1] += -1
if self.lbrique[i][1] == 0: #Si la brique ne peut plus tenir
#On la détruit et on augmente le score
self.can.delete(self.lbrique[i][0])
self.score+= 20*(len(self.vie))
texte = str(self.score)
self.can.delete(self.tscore)
self.tscore = self.can.create_text(460,480,text=texte)
del self.lbrique[i]
del self.l[i]
if len(self.l)==0:
#Si il n'y a plus de brique on arrête la balle
stop = 1
break
i+=1
#Si la balle tape la barre
if 450 <= y <= 455 and self.bar-30 < x < self.bar+27:
#Si c'est sur le coin gauche, un angle plus grand
if self.bar-30 <= x <= self.bar-25:
self.angle = 2*pi/3
self.horizon = 5
#Si c'est sur le coin droit, un angle plus petit
if self.bar+17 <= x <= self.bar+27:
self.angle = pi/5
self.horizon = 5
#Sinon l'angle sera dans l'autre sens
if self.bar+5 < x < self.bar+40:
self.angle = pi/3
self.sens = (-1)*self.sens
if x<10 or x>478: #Si on tape sur le bord gauche/droit
self.horizon = (-1)*self.horizon
if y<10: #Si on tape le plafond
self.sens = (-1)*self.sens
if y>466 and x>self.bar+27 or y>466 and x<self.bar-30:
#Si on tombe à coté de la barre, on perd une vie
self.can.delete(self.vie[0])
del self.vie[0]
stop = 1
if stop == 1: #Si on a perdu une balle,ou gagné, on remet la balle à sa place
self.flag=0
self.sens = (-1)*self.sens
self.can.coords(self.boule,self.bar-5,460,self.bar+5,450)
self.coord=[250,440]
if len(self.vie)==0: #Si on a plus de vie, on écrit 'perdu'#
self.can.create_text(250,250,text='Looser! Try Again',font="magneto 16 italic",fill='white')
if self.score == 8920: #Lorsque le score maximal a été atteint
self.can.create_text(250,250,text='Congratulations',font="magneto 16 italic",fill='white')
if stop ==0 and self.pose==0: #Si on a pas perdu la balle, on recommence
self.can.after(2,self.go)
fen1 = Tk() # création de la fenêtre
fen1.title("Breakout!")
tex1 = Label(fen1, text='Projet Présenté par Amazonie Laffont et Lionel Poullet !', font="Boopee 18 bold ", fg='dark red',width=60, height =5, bg="ivory", ) # Création du texte
tex1.pack()# Insère le texte dans la fenêtre
bouton = Checkbutton(fen1, text="Prêt?")#Crée un message à cocher
bouton.pack()
bou1 = Button(fen1, text='Lancer le jeu', command = fen1.destroy, font="Meiryo", relief='groove')# Bouton qui détruit la fenêtre
bou1.pack() # insère le bouton dans la fenêtre
fen1.mainloop()
app = Principale(None) #Le jeu Casse Brique est lancé!
app.mainloop()