Mon programme

Litisme Messages postés 9 Date d'inscription dimanche 15 mars 2015 Statut Membre Dernière intervention 16 mai 2015 - Modifié par NHenry le 16/05/2015 à 13:28
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 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()

2 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
16 mai 2015 à 13:28
Quelle est la question ?
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
16 mai 2015 à 14:07
.
0
Rejoignez-nous