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
[WIP] et travaux terminés [terminé] Court métrage ICE - Short film - 1 165 28/03 06:34:51
kitsu 
Moteur de jeu GameBlender et alternatives Remake Zillion sur blender...2.76!!!    [1][2][3] 23 5223 27/03 17:53:37
Redstar 
Questions & Réponses Curseur souris disparaît en plein écran 2 831 22/03 13:59:54
meltingman 
Questions & Réponses [résolu] Probleme de rendu qui ne correspond pas a la scene 2 140 17/03 11:48:03
moonboots 
Questions & Réponses [non résolu] animation d'un toiurniquet, Comment faire? 4 230 13/03 18:55:07
yawdpwal 
Questions & Réponses miniatures 3 684 12/03 03:49:02
meltingman 
Questions & Réponses Importer plusieurs objets avec un alignement 0 132 11/03 14:11:06
Warels 
Python & Plugins Ouverture de fichier pov dans Blender 1 160 07/03 18:45:18
KaHuZak 
Mes premières images sous Blender (débutants) wip- personnage semi lowpoly pour anim/jeux 1 164 06/03 21:03:35
meltingman 
[WIP] et travaux terminés Merci a tous pour votre aide 2 230 06/03 20:57:49
meltingman 
Questions & Réponses Plusieurs mesh mélangés, les séparés proprement un par un 6 402 01/03 11:42:43
Warels 
Questions & Réponses Weight painting bug ? 6 565 21/02 15:37:55
meltingman 
Questions & Réponses texture paint perdu 1 239 10/02 15:55:18
moonboots 
Questions & Réponses texture paint perdu 0 194 10/02 14:34:46
ALK-chimiste 
The Blender Clan 'tchat Buy (5 Pcs) New Samsung Galaxy S23 Ultra 256GB $4,495 Website: www.cutebitelectronics.com 0 250 06/02 10:37:12
emailychang01 
Questions & Réponses [non résolu] Blender et OBJ 0 259 01/02 11:09:31
stigmamax 
Mes premières images sous Blender (débutants) 2.80 ---> 3.00 ? 2 392 31/01 15:27:50
HarDrive 
The Blender Clan 'tchat Buy (50 Pieces) New Samsung Galaxy Z Flip4 128GB Unlocked $17,450 0 258 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 195 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 8154 24/01 09:21:49
emailychang01 

Qui est en ligne
170 utilisateur(s) en ligne (dont 136 sur Forums)

Membre(s): 0
Invité(s): 170


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
Mai 18
Anniversaire Luneo
Jui 30
Anniv des Jedi :-D
Jui 8
BUG de Lyon
plus 224 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