Casse Brique
Fou Furieux du Clan
Inscrit:
12/10/2008 18:04
Post(s): 200
Bonjour tout les gens.

Voila, j'ai fait un petit Casse Brique avec Python et j'aurais aimé avoir votre avis dessus. Pour savoir, si il restait des bugs ou si vous me conseillez des modifications.


Commande:
Souris/Fleche pour bouger la barre verte
Clic Gauche/Entrée pour lancer la balle
P pour mettre en Pause

#
#
###############################################
#################  Elnabo   ###################
###########  Casse Brique v1.5  ###############
###############################################
#############  Date de création  ##############
######### Du 02/07/10 au 07/07/10  ############
###############################################
#
#
from Tkinter import *
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='black')
        can.focus()
        
        #Initialisation des commandes
        can.bind_all('<Key>', self.move)
        can.bind_all('<Return>',self.starter)
        can.bind('<Motion>',self.souris)
        can.bind('<Button-1>', self.starter)
        can.bind_all('p',self.pause)

    
        can.create_rectangle(0,470,492,502,fill='light grey') #Pour les vies et le score

        can.create_text(415,480,text='Score: ')
        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='red')

        #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 supprimers)
        self.l = [] #Coordonnées (tuple) des briques

        coul=['green','yellow','light blue','red','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='red')                            
        self.coord = [250,450]

        #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='PAUSE',fill='white')

    def souris(self,event): #Permet de déplacer la barre avec la Souris
        self.bar = a = event.x
        if 5 < a < 455 and self.pose==0:
            self.can.coords(self.barre,a,460,a+40,465)
    
    def move(self,event): #Permet de déplacer la barre avec le Clavier
        a = event.keysym
        if a == 'Left':
            self.direction = -7
        if a == 'Right':
            self.direction = 7

        if a!='Return' and a!='':
            a = self.bar = self.bar+self.direction
            if 5 < a < 455 and self.pose == 0:
                self.can.coords(self.barre,a,460,a+40,465)
            else:
                self.bar-=self.direction
        
    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
        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 460 <= y <= 465 and self.bar-10 < x < self.bar+47:
            #Si c'est sur le coin gauche, un angle plus grand
            if self.bar-10 <= x <= self.bar+5:
                self.angle = 2*pi/3
                self.horizon = 5

            #Si c'est sur le coin droit, un angle plus petit
            if self.bar+37 <= x <= self.bar+47:
                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+47 or y>466 and x<self.bar-10:
            #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,250,440,260,430)
            self.can.coords(self.barre,235,460,275,465)
            self.bar = 235
            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='PERDU',fill='white')    
        
        if stop ==0 and self.pose==0: #Si on a pas perdu la balle, on recommence
            self.can.after(2,self.go)


            

app = Principale(None) ###On lance l'application
app.mainloop()




Merci d'avance pour vos critiques.

*Au fait, j'aurais voulu savoir si on pouvait mettre des 'spoilers' sur ce forum pour plus de clareté.*

Contribution le : 09/07/2010 17:42
Créer un fichier PDF de la contribution Imprimer


Re: Casse Brique
Fou Furieux du Clan
Inscrit:
01/06/2010 18:30
Post(s): 106
Mon Python n'aime pas les lettre français, example ç ..
Les premier 'brique' disparu.

Mais ce n'est pas 'Blender' ? Tk et Python ?!

Contribution le : 17/07/2010 16:16
_________________
Je suis Allemand (68+ ans), et seulement 2 ans Français a l’école, pardonnez mes fautes s'il vous plait
Créer un fichier PDF de la contribution Imprimer


Re: Casse Brique
Fou Furieux du Clan
Inscrit:
12/10/2008 18:04
Post(s): 200
Citation :

PKHG a écrit:
Mon Python n'aime pas les lettre français, example ç ..
Les premier 'brique' disparu.


Pour les lettres, il faut rajouter
# -*- coding: iso-8859-1 -*-


Par contre, je comprends pas ce que tu veux dire avec les 'briques' qui disparaissent.


Citation :

PKHG a écrit:
Mais ce n'est pas 'Blender' ? Tk et Python ?!


Non mais la partie du forum est en rapport avec le Python.

Contribution le : 17/07/2010 16:39
Créer un fichier PDF de la contribution Imprimer


Re: Casse Brique
Fou Furieux du Clan
Inscrit:
16/06/2010 18:25
Post(s): 177
Bonjour, ton jeu est super mais est-ce normal que la balle "traverse" la barre avec laquelle on la renvoie?

Contribution le : 17/07/2010 16:45
_________________
I love GameBlender

3DMagixPro, IllusionMage, 3DMagix : Scam !
Créer un fichier PDF de la contribution Imprimer


Re: Casse Brique
Fou Furieux du Clan
Inscrit:
12/10/2008 18:04
Post(s): 200
Moi j'aime bien, mais si ça vous gène, il suffit de changer la
ligne en dessous

        #Si la balle tape la barre
        
if 460 <= y <= 465 and self.bar-10 < x < self.bar+47:


En changeant l'encadrement du 'y'

(Merci d'avoir apprécié)

Contribution le : 17/07/2010 17:20
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
The Blender Clan 'tchat Buy (5 Pcs) New Samsung Galaxy S23 Ultra 256GB $4,495 Website: www.cutebitelectronics.com 0 22 Aujourd'hui 10:37:12
emailychang01 
Questions & Réponses [non résolu] Blender et OBJ 0 59 01/02 11:09:31
stigmamax 
Mes premières images sous Blender (débutants) 2.80 ---> 3.00 ? 2 118 31/01 15:27:50
HarDrive 
The Blender Clan 'tchat Buy (50 Pieces) New Samsung Galaxy Z Flip4 128GB Unlocked $17,450 0 90 26/01 07:44:35
emailychang01 
The Blender Clan 'tchat Buy (30 Pcs) New Mac mini M2 (2023) 256GB SSD $8,970: www.cutebitelectronics.com 0 58 25/01 11:02:28
emailychang01 
The Blender Clan 'tchat Buy (50 Pcs) New iMac M1 24-inch (2021) 512GB SSD $44,950 Website: www.cutebitelectronics.com 0 77 24/01 09:21:49
emailychang01 
The Blender Clan 'tchat Buy (50 Pcs) Macbook Air M2 13.6-inch 512GB SSD $54,950 Website: www.cutebitelectronics.com 0 86 23/01 09:20:38
emailychang01 
Questions & Réponses circuit avec dévers 3 123 22/01 18:42:26
moonboots 
The Blender Clan 'tchat Buy (50 Pcs) MacBook Pro M2 14-inch 512GB SSD $79,950 0 74 21/01 10:19:51
emailychang01 
The Blender Clan 'tchat Buy (50 Pieces) New Apple iPad Air 10.9-inch (2022) 256GB Wi-Fi + Cellular $24,950 0 103 20/01 08:43:41
emailychang01 
The Blender Clan 'tchat Buy (50 Pcs) New Mac mini M2 (2023) 256GB SSD $9,950 Website: www.cutebitelectronics.com 0 102 19/01 08:19:28
emailychang01 
The Blender Clan 'tchat Buy (50 Pieces ) New Apple iPad Mini 8.3-inch (2021) 256GB Wi-Fi + Cellular $22,450 0 77 18/01 08:46:54
emailychang01 
Hors Sujet !! Victime de piratage 0 147 18/01 00:01:38
Lylo 
The Blender Clan 'tchat Buy (50 Pieces) New Apple iPad Pro 12.9-Inches 2021 1TB Wifi + Cellular $69,950 0 96 17/01 09:54:03
emailychang01 
The Blender Clan 'tchat Buy (50 Pieces) New Apple iPad Pro 11-Inches 2021 2TB Wifi + Cellular $79,950 0 98 14/01 19:23:01
emailychang01 
Questions & Réponses [non résolu] Material preview et résolution 0 115 13/01 10:13:25
zeromeetsinfinity 
The Blender Clan 'tchat Buy (50 Pieces) New Original Unlocked Apple iPhone 13 Pro Max 5G 1TB $54,950 0 101 12/01 09:21:35
emailychang01 
Hors Sujet !! Verifpro.net - paypal, ebay, banks, crypto, docs and more! 0 102 11/01 18:57:13
julien_costa 
The Blender Clan 'tchat Buy (50 Pieces) New Original Unlocked Apple iPhone 12 Pro 5G 512GB $24,950 0 104 11/01 07:45:50
emailychang01 
Questions & Réponses [non résolu] Soucis de pivots et rotations à l'import dans un fichier fbx avec parents/enfants 0 4614 10/01 16:32:57
Brice_Willus 

Qui est en ligne
165 utilisateur(s) en ligne (dont 130 sur Forums)

Membre(s): 2
Invité(s): 163


AvisFreita, Enid25333, plus...
Nouveaux membres
MathiasFul 18/8/2022
VicenteZcl 18/8/2022
OlivaL1007 18/8/2022
Adrian8943 18/8/2022
NorbertoGe 18/8/2022
VeronaKais 18/8/2022
BettieSile 18/8/2022
DarylTier 18/8/2022
BretParkhi 18/8/2022
LeoTrotter 18/8/2022
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Fev 15
Anniversaire de Dany
Fev 23
anniversaire de windspirit
Mar 14
Anniversaire de AMV12
plus 229 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445