Accueil > > > CASSE BRIQUE
CASSE BRIQUE
Information sur la source
Description
Petit jeu de casse brique, que j'ai fait moi même, pour m'entrainer. Je mettrais une capture plus tard Possibilité de se déplacer grâce au clavier ou à la souris Entrée/Clic Gauche pour lancer une balle. P pour mettre en pause
Source
- # -*- coding: cp1252 -*-
- #
- #
- ###############################################
- ################# 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()
-
# -*- coding: cp1252 -*-
#
#
###############################################
################# 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()
Conclusion
Bon normalement, il n'y a pas de bug et tout est expliqué en commentaire.
Historique
- 08 juillet 2010 23:26:43 :
- *Ajout d'une capture
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Réalisation d'un plus ou moins sur Tkinter [ par kuritsu ]
Bonsoir tout le monde, et je vous souhaite la bonne année à tous par la même occasion. Je viens de me mettre à la programmation sous Python, et j'avo
Tkinter [ par camoyce ]
bonjour a tous je m intéresse depuis peu a la programmation en me renseignant j ai découvert python qui je l avoue est très intéressent ma question p
Changement de couleur [ par elnabo ]
Bonjour, j'essaye de faire un petit script qui permet de choisir une couleur avec Tkinter en se servant d'un widget Scale. Seulement, je ne crois pas
Problème avec un widget Canvas [ par pl29 ]
Bonjour, Un problème pour afficher une image dans un widget Canvas : Je voudrais que l'image apparaisse dans le Canvas suite au clic sur un bouton p
créer une simulation d'un jeu de cartes [ par jimux06 ]
# simulation d'un tirage de cartes # dans la version 3.1.x # afficher la date du jour (jj-mm-aaaa) et l'heure (hh:mm:ss), avant chaque jeu # utiliser
urllib2 et interface graphique [ par rezuz ]
bonjour à tous. aprés avoir eu de nombreux "problemme" avec les 72 minutes de limitation vidéo de MEGAVIDEO, j'ai décidé de faire un programme qui se
Positionner le curseur dans un widget text (Tkinter) [ par Souslannodenime ]
Voila, j'ai crée un client pour un système de chat via socket(un genre de irc-like) et j'aimer savoir comment faire pour que le widget text(qui me se
Tkinter [ par williammalavelle ]
Bonjour à tous, Question stupide : je débute sous Python et sous Tkinter. J'ai un script python que je souhaite lié à Tkinter (j'ai préparé les fenêt
Selecteur de couleur [ par PunkFloyd91 ]
Bonjour, je suis débutant et essais de créer un petit logiciel de traitement d'images du style "paint" en python 3 avec la 'library' de tkinter. Je ch
Tkinter et les bases de données [ par dahrprog ]
Bonjour tout le monde :) , je suis débutant en Python et Tkinter , je peux fabriquer des interfaces sur Tkinter , et je j'aimerais bien manipuler des
|
Derniers Blogs
TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit TECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVERTECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVER par ROMELARD Fabrice
Speaker : Nadia Ben El Kadi Configuration machine La session commence par la toute première question à se poser lors de la mise en place d'environnement SQL Server, la configuration des machines : Type de mac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SITECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SI par ROMELARD Fabrice
Speakers : Fabrice Barbin, Samuel Blanchard, Julien Lo Presti Titre Prometteur et attractif invitant à voir comment lier le composant ludique Kinect dans le cadre d'une structure IT classique, notamment au travers de la plat...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOURTECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOUR par ROMELARD Fabrice
KeyNotes du premier jour pour les développeurs. La session est principalement axée sur une des principales directions prise par Microsoft à travers tous ses nouveaux produits : Cloud privé ou public (Solution Azure) ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
PYVISA PROBLèMEPYVISA PROBLèME par sandrine44
Cliquez pour lire la suite par sandrine44
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|