Modification d'un casse brique en python 2.7

Description

Modification du code de deederx dans le cadre de notre cours de correction de programmes.
Voici le programme original: http://www.pythonfrance.com/codes/CASSE-BRIQUE_54379.aspx
Appuyer sur flèche en haut pour tirer des missiles. Briser des blocs de cette façon ne donne pas de point.
J'ai seulement aujouter la fonctionalité des missiles.

Source / Exemple :


# -*- coding: cp1252 -*-
################################################################################
#
#                  Copyright (c) 2012 Valery Gouegni
#                          mgvalery@yahoo.fr
#                  Actualy Valery Gouegni on facebook
################################################################################
from Tkinter import*
from classes import*

class Application(Tk):
    def __init__(self,larg=490,haut=500,coul1='navy',coul2='blue'):
        Tk.__init__(self)
        self.larg,self.haut,self.coul1,self.coul2 = larg,haut,coul1,coul2
        self.pal = ['red','yellow','green','pink','orange','forest green',
                    'dark grey','light blue','light yellow','red']
        self.configure(bg=self.coul1)
        self.title('Casse Brique v 1.0.0')
        self.resizable(width=False,height=False)
        self.iconbitmap('Crazy.ico')
        #Canevas où se déroule le jeu
        self.can = Canvas(self,width=self.larg,height=self.haut,bg='black')
        self.can.grid(row=1,column=1,rowspan=25,columnspan=3)
        #Interface utilisateur/programme
        Button(self,text='Meilleur Score',bg=self.coul2,bd=5,width=10,
               command=self.score).grid(row=1,column=5,padx=5)
        Button(self,text='Aide',bg=self.coul2,bd=5,width=10,
               command=self.aide).grid(row=2,column=5,padx=5)
        aproposMenu=Menubutton(self,text='À propos',bg=self.coul2,bd=5,width=10,
               relief=RAISED)
        aproposMenu.grid(row=3,column=5,padx=5)
        me1 = Menu(aproposMenu)
        me1.add_command(label='Auteur',underline=0,command=self.auteur)
        me1.add_command(label='License',underline=0,command=self.licens)
        aproposMenu.configure(menu = me1)
        Button(self,text='Quitter',bg=self.coul2,bd=5,width=10,
               command=self.destroy).grid(row=24,column=5,padx=5)
        self.mes = Label(self,text='***Bienvenue dans casse brique***\n'+
                         'Appuyez N pour une nouvelle partie...',bg=self.coul2,
                         font=(2),width=54)
        self.mes.grid(row=0,column=2)
        self.score_aff = Label(self,text='Score :\n'+'0',width=9,bg=self.coul2,
                               font=(2))
        self.score_aff.grid(row =1,column=0)
        self.niveau_aff = Label(self,text='Niveau :\n'+'Débutant',width=9,
                                bg=self.coul2,font=(2))
        self.niveau_aff.grid(row = 2,column=0)
        self.vies_aff = Label(self,text='Vies :\n'+'5',width=9,
                              bg=self.coul2,font=(2))
        self.vies_aff.grid(row=3,column=0)
        #Initialisation du jeu
        self.initialisation()
        #Controlles
        self.bind('<Motion>',self.souris)
        self.bind('<Left>',self.left)
        self.bind('<Right>',self.right)
        self.bind('<n>',self.nouvelle_partie)
        self.bind('<p>',self.pause)
        self.bind('<Return>',self.relancer)
        self.bind('<Up>',self.tirer)

    def initialisation(self):
        self.can.delete(ALL)
        #Objets intervenat dans le jeu:
        self.vies = 5
        self.flag = 0
        self.niveau = ['Débutant','Facile','Moyen','Difficile','Expert']
        self.i = 0
        self.j = 0
        #Les briques
        x,y,i = 12,40,0
        self.briques = []
        self.coordonnees = []
        while x<470:
            brique = Brique(self.can,x,y,coul=self.pal[i])
            self.briques.append(brique)
            self.coordonnees.append((x,y))
            y = y + 12
            i = i + 1
            if y == 160:
                y = 40
                i = 0
                x = x + 43
        #L'océan
        self.can.create_rectangle(0,self.haut-30,self.larg,self.haut,fill='blue')
        #La rackette
        self.rackette = Rackette(self.can,self.larg/2-30,self.haut-70-self.j)
        self.rackette.xmin=0
        self.rackette.xmax=self.larg-self.rackette.l
        #La balle
        self.balle = Balle(self.can,self.larg/2-5,self.haut-80-self.j,
                           briques=self.briques,coords=self.coordonnees,
                           rackette = self.rackette)
        self.balle.xmin = 12
        self.balle.xmax = self.larg-10
        self.balle.ymax = self.haut
        self.mes.configure(text='Appuyez N pour une nouvelle partie...'+'\n')
        self.score_aff.configure(text='Score :\n'+str(self.balle.score))
        self.niveau_aff.configure(text='Niveau :\n'+str(self.niveau[self.i]))
        self.vies_aff.configure(text='Vies :\n'+str(self.vies))
        
        
    def nouvelle_partie(self,event):
        if self.flag == 0:
            self.balle.stop()
            self.rackette.stop()
            self.initialisation()
            self.balle.lance()
            self.rackette.lance()
            self.flag = 1
            self.partie()

    def partie(self):
        if self.flag == 1:
            self.mes.configure(text='*  Partie en cours...*'+'\n')
            self.score_aff.configure(text='Score :\n'+str(self.balle.score))
            self.niveau_aff.configure(text='Niveau :\n'+str(self.niveau[self.i]))
            self.vies_aff.configure(text='Vies :\n'+str(self.vies))
            if self.balle.y>self.balle.ymax-40:
                self.flag = 2
                self.arret_partie()
            if self.briques == []:
                self.flag = 2
                self.niveau_suivant()
            self.after(10,self.partie)

    def arret_partie(self):
        if self.flag == 2:
            self.balle.stop()
            self.rackette.stop()
            self.balle.x,self.balle.y = self.larg/2-5,self.haut-80-self.j
            self.rackette.x,self.rackette.y = self.larg/2-30,self.haut-70-self.j
            self.can.coords(self.balle.dessin,self.balle.x,self.balle.y,
                            self.balle.x+self.balle.d,self.balle.y+self.balle.d)
            self.can.coords(self.rackette.dessin,self.rackette.x,self.rackette.y,
                            self.rackette.x+self.rackette.l,self.rackette.y+5)
            self.vies = self.vies - 1
            self.vies_aff.configure(text='Vies :\n'+str(self.vies))
            self.mes.configure(text='Appuyez Entrée pour continuer...'+'\n')
            if self.vies == 0:
                self.mes.configure(text='*  Vous avez perdu! Votre score: '+
                                   str(self.balle.score)+'\n'+
                                   'Appuyez N pour une nouvelle partie')
                try:
                    fichier = open('score.txt','r')
                    score = int(fichier.readline())
                    fichier.close()
                    if self.balle.score>score:
                        self.record()
                    else:
                        self.flag = 0
                except:
                    self.record()
                        

    def relancer(self,event):
        if self.flag == 2:
            self.flag = 1
            self.balle.lance()
            self.rackette.lance()
            self.partie()
        
            
    def pause(self,event):
        if self.flag == 1:
            self.balle.stop()
            self.rackette.stop()
            self.flag = 2
            self.mes.configure(text='*  Partie en pause   *\n'+\
                               'Appuyez Entrée pour continuer...')

    def niveau_suivant(self):
        if self.flag == 2:
            self.balle.stop()
            self.rackette.stop()
            self.i = self.i + 1
            self.j = self.j + 50
            if self.i == 5:
                self.victoire()
            else:
                self.balle.x,self.balle.y = self.larg/2-5,self.haut-80-self.j
                self.rackette.x,self.rackette.y = self.larg/2-30,self.haut-70-self.j
                self.can.coords(self.balle.dessin,self.balle.x,self.balle.y,
                                self.balle.x+self.balle.d,self.balle.y+self.balle.d)
                self.can.coords(self.rackette.dessin,self.rackette.x,self.rackette.y,
                                self.rackette.x+self.rackette.l,self.rackette.y+5)
                self.mes.configure(text='*   Félicitations vous etes au niveau'+
                                   str(self.niveau[self.i])+'  *\n'
                                   +'Appuyez Entrée pour continuer...')
                self.niveau_aff.configure(text='Niveau :\n'+str(self.niveau[self.i]))
                x,y,i = 12,40,0
                self.briques = []
                self.coordonnees = []
                while x<470:
                    brique = Brique(self.can,x,y,coul=self.pal[i])
                    self.briques.append(brique)
                    self.coordonnees.append((x,y))
                    y = y + 12
                    i = i + 1
                    if y == 160:
                        y = 40
                        i = 0
                        x = x + 43
                self.balle.briques = self.briques
                self.balle.coords = self.coordonnees

    def victoire(self):
        self.balle.stop()
        self.rackette.stop()
        self.balle.x,self.balle.y = self.larg/2-5,self.haut-80
        self.rackette.x,self.rackette.y = self.larg/2-30,self.haut-70
        self.can.coords(self.balle.dessin,self.balle.x,self.balle.y,
                        self.balle.x+self.balle.d,self.balle.y+self.balle.d)
        self.can.coords(self.rackette.dessin,self.rackette.x,self.rackette.y,
                        self.rackette.x+self.rackette.l,self.rackette.y+5)
        self.can.create_text(245,250,text='Bravo!!! Vous avez gagné!!!\n'
                                          "    Réinitialisation du jeu...",fill='white')
        self.after(15000,self.initialisation)
        
            
    def souris(self,event):
        self.rackette.mouvement(event.x)

    def left(self,event):
        self.rackette.gauche()

    def right(self,event):
        self.rackette.droite()

    def tirer(self,event):
        if self.flag==1:
            self.missile = Missile(self.can,self.rackette.x+self.rackette.l/2,self.rackette.y, briques=self.briques,coords=self.coordonnees)
            self.missile.lancer()

    
    def record(self):
        self.fen = Tk()
        self.fen.configure(bg=self.coul1)
        self.fen.title('Nouveau record')
        self.fen.resizable(width=False,height=False)
        self.fen.iconbitmap('Crazy.ico')
        Label(self.fen,text='Nouveau record. Entrez votre pseudo\n',
              bg=self.coul2,width=50,font=(2)).pack()
        self.entree = Entry(self.fen,width=20)
        self.entree.pack(padx = 5,pady = 5)
        Button(self.fen,text='Annuler',width=10,bg=self.coul2,bd=5,
               command=self.annuler).pack(padx=5,pady=5)
        self.fen.bind('<Return>',self.enreg)
        self.fen.mainloop()

    def enreg(self,event):
        pseudo = self.entree.get()
        fichier = open('score.txt','w')
        fichier.write(str(self.balle.score)+'\n')
        fichier.write(str(self.entree.get()))
        fichier.close()
        self.fen.destroy()
        self.initialisation()

    def annuler(self):
        self.entree.delete(0,END)
        

    def score(self):
        try:
            fichier = open('score.txt','r')
            fichier.close()
        except:
            fichier = open('score.txt','w')
            fichier.write('0\n')
            fichier.write('Personne')
            fichier.close()
        fichier = open('score.txt','r')
        score = fichier.readline()
        pseudo = fichier.readline()
        fichier.close()
        if pseudo == '':
            pseudo = 'Personne'
        fen = Tk()
        fen.configure(bg=self.coul1)
        fen.title('Meilleur score')
        fen.resizable(width=False,height=False)
        fen.iconbitmap('Crazy.ico')
        Label(fen,text='Le meilleur score est : '+str(score)+'\n'
              'et est détenu par '+pseudo,bg=self.coul2,width=30,font=(2)).pack()
        Button(fen,text='Quitter',width=10,bg=self.coul2,bd=5,
               command=fen.destroy).pack(padx=5,pady=5)
        fen.mainloop()

    def aide(self):
        fen = Tk()
        fen.configure(bg=self.coul1)
        fen.title('Aide')
        fen.resizable(width=False,height=False)
        fen.iconbitmap('Crazy.ico')
        Label(fen,text='Cassez toutes les briques avec la balle en évitant que\n'
              "celle-ci ne tombe dans l'eau. Utilisez le curseur de\n"
              "la souris pour déplacer la rackette sous la balle.\n"
              "<N> :Nouvelle partie ou lancer une partie arretée\n"
              "<P> :                  Pause à la partie en cours\n"
              "<Entrée>:Relancer une partie arrêtée ou en pause\n"
              "Vous pouvez aussi utiliser les touches <= et => pour\n"
              "déplacer la rackette Bonne chance!!!\n",bg=self.coul2,width=50,font=(2)).pack()
        Button(fen,text='Quitter',width=10,bg=self.coul2,bd=5,
               command=fen.destroy).pack(padx=5,pady=5)
        fen.mainloop()

    def auteur(self):
        fen = Tk()
        fen.configure(bg=self.coul1)
        fen.title('Auteur')
        fen.resizable(width=False,height=False)
        fen.iconbitmap('Crazy.ico')
        Label(fen,text='Valery Gouegni\n'
              "mgvalery@yaoo.fr\n"
              "Cette application est la deuxième que j'ai écrite avec \n"
              "le language de progrmmation Python(2.6). Je suis ouvert\n"
              "à toutes les critiques. En cas de bug me contacter à   \n"
              "              l'adresse ci-dessus            \n"
              "Copyright (c) 2012 Valery Gouegni",bg=self.coul2,width=50,font=(2)).pack()
        Button(fen,text='Quitter',width=10,bg=self.coul2,bd=5,
               command=fen.destroy).pack(padx=5,pady=5)
        fen.mainloop()

    def licens(self):
        fen = Tk()
        fen.configure(bg=self.coul1)
        fen.title('Auteur')
        fen.resizable(width=False,height=False)
        fen.iconbitmap('Crazy.ico')
        try:
            fichier = open('license.txt','r')
            lic = fichier.read()
            fichier.close()
            Label(fen,text=lic,bg=self.coul2,font=(2)).pack()
        except:
            Label(fen,text="You should have received a copy of the\n"
                  "GNU General Public License along with this\n"
                  "program. If not, see <http://www.gnu.org/licenses/>.\n"
                  "Copyright (c) 2012 Valery Gouegni",bg=self.coul2,font=(2)).pack()
        Button(fen,text='Quitter',width=10,bg=self.coul2,bd=5,
               command=fen.destroy).pack(padx=5,pady=5)
        fen.mainloop()
        
Application().mainloop()

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.