Briquitas
Professeur référent : M FAURY (ISN)

Notre projet
Nous avons pour but de créer un casse brique en Python.
Nous planifions de créer 4 niveaux avec des difficultés croissantes et des bonus.
Présentation de l’équipe
Mathieu, Emilie et Anne, élèves de terminale S au lycée Blaise Pascal (2016-2017)
Tâches à réaliser
| Tâche | Détails |
| Création du menu | Sous-menu « jouer » : lance le jeu
Sous-menu « paramètres » : son (on/off) , explication des bonus Sous-menu « meilleurs scores » : tableau des 5 meilleurs scores et du nom des joueurs |
| Création de l’interface | Raquette (longueur de base et bonus, déplacements)
Balle (diamètre, vitesse, gravité) Brique (simple, disparition quand contact avec balle, briques à plusieurs rebonds avec chiffre inscrit dessus) Bonus (apparition aléatoire à partir du niveau 4) : agrandir la raquette, ralentir la balle, vie supplémentaire, démultiplieur de balles Frontières de l’espace de jeu Infos jeu : Compteur de score, affichage des vies restantes |
| Fin de partie | « Game over »
Affichage du score Rentrer le nom du joueur |
| Commandes/Déplacements | Touches de commandes : Flèches + barre espace pour démarrer le jeu
Déplacement des objets |
| Création de niveaux | niveau 1 : briques à casser 10*3
niveau 2 : 3*10 briques à casser + 1 à casser en 2 rebonds ( au milieu)10*1 niveau 3 : 4*10 briques normales + 2*10 en 2 rebonds (une tout en haut et une au dessous)+ à chaque retour de la balle à la raquette, les briques descendent d’un rang niveau 4 : 2*10 briques normales + 3*10 en deux rebonds (une au milieu et 2 au-dessus) + 1*10 en 4 rebonds (tout en haut) + briques qui descendent |
Répartition des tâches
| Émilie | Mathieu | Anne |
| Élaboration d’une structure pour les données (objets raquette, brique, écran, balle,Affichage des niveaux,Compteur de score,Affichage des vies, prémenu …) | ||
| Gestion des briques | Mouvements de la balle | Raquette |
|
Créer 5 lignes de 10 briques, et il faut qu’elles disparaissent suite au contact avec la balle |
La balle doit se déplacer avec une vitesse rectiligne uniforme et rebondir sur les parois de la zone de jeu |
Déplacer la raquette à l’aide du clavier à partir du moment où on a cliqué sur espace |
Code Python
[reveal heading= »%image% Voir le code »]import pygame
from pygame.locals import *
import random
from random import randint
pygame.init()
pas_rkt = 20
#score
#def score (score):
# textscore = font.render("Score:" +str(score))
#Ouvrir la fenêtre
wf, hf = 1000, 550 #on définit sa taille
fenetre = pygame.display.set_mode((wf,hf)) #on l'affiche
#insérer une musique
pygame.mixer.music.load('Bag Raiders - Shooting Stars.mp3')
pygame.mixer.music.play(-1,0.0)
#Création et collage du fond
fond = pygame.image.load("Background.jpg").convert() #on définit le fond
fenetre.blit(fond, (0,0)) #on l'affiche dans la fenêtre
#Création et collage du menu
menu = pygame.image.load("BackgroundMenu.png").convert_alpha() #on définit le menu
menu_x, menu_y = 830 , 0 #on définit sa position
fenetre.blit(menu, (menu_x, menu_y)) #on l'affiche dans la fenêtre
font=pygame.font.Font(None, 24)
text = font.render("Casse Brique",1,(255,255,255))
instruction = font.render ( "Cliquez espace", 1 , (100,100,100))
instruction2 = font.render ( "pour commencer", 1 , (100,100,100))
instruction3 = font.render ( "ou mettre en pause" ,1,(100,100,100)) #on définit le texte et sa position
#Création et collage de la raquette
rkt = pygame.image.load("RKT.png").convert_alpha() #on définit la raquette
rkt_x, rkt_y = 330, 525 #on définit sa position
position_rkt = rkt.get_rect() #on crée une variable pour sa position
fenetre.blit(rkt, (rkt_x, rkt_y)) #on l'affiche dans la fenêtre
#Si on appuie longtemps sur la flèche
pygame.key.set_repeat(400, 30) #argument : temps ou on reste enfoncé, temps entre chaque déplaccment
#Creation et collage des briques
def construire_brique(fenetre, rect, coul, resist):
return {'rect': rect, #dictionnaire
'coul': coul,
'resist': resist}
#fabrication de l'objet
briques = []
couleurs = [0x00BFFF,0xFF0000,0xFFD700,0x32CD32,0xDA70D6] #liste de couleurs possibles
#chargement et collage de la brique
for ligne in range(5): #5 lignes
c = couleurs[randint(0,4)] #choix d'une couleur de la liste "couleurs" entre les indices 0 et 4
for col in range(8): #8 colonnes
briques.append(construire_brique(fenetre,
(col*105,ligne*40, 93, 35),
c,
1))
def dessiner_briques(fenetre):
for brique in briques:
pygame.draw.rect(fenetre, brique['coul'], brique['rect'])
#Rafraichir l'écran
pygame.display.flip()
marche = False
#rejouer = Button(fenetre, text="rejouer")
#rejouer_x, rejouer_y = 0 , 0
#Boucle infinie jeu
continuer=1
while continuer :
for event in pygame.event.get(): #Attente des événements
if event.type == QUIT:
continuer=0 #sortir de la boule quand on ferme la fenetre
if event.type == KEYDOWN:
if event.key == K_SPACE : #si on appuie sur espace
marche = not marche #marche devient "true"
elif marche == True:
if event.key == K_LEFT: #Si "flèche gauche"
if rkt_x > pas_rkt: #si on est pas au bord gauche
rkt_x -= pas_rkt #deplacement
else: # si on est au bord gauche
rkt_x = 0 #on ne bouge pas
elif event.key == K_RIGHT: #si “fleche droite”
if rkt_x + 380 < wf : #si on est pas au bord droit
rkt_x += pas_rkt #deplacement
else : #si on est au bord droit
rkt_x= wf-380 #on ne bouge pas
#if score == 150 :
#fond = pygame.image.load("You win.png").convert()
#if PAS DE BALLE :
#fond = pygame.image.load("Game Over.png").convert()
#score (#nb de briques totales-nb de briques actuel)
#Actualisation
fenetre.blit(fond, (0,0))
fenetre.blit(rkt, (rkt_x, rkt_y))
fenetre.blit(menu, (menu_x, menu_y))
fenetre.blit(text, (860, 50))
fenetre.blit (instruction, (835,100))
fenetre.blit (instruction2, (835,115))
fenetre.blit (instruction3, (835,130))
#fenetre.blit (rejouer, (0,0))
dessiner_briques(fenetre)
#fenetre.blit (score, (835, 140))
#Rafraichissement
pygame.display.flip()
pygame.quit()
exit(0)
[/reveal]
Ressources
- https://openclassrooms.com/courses/interface-graphique-pygame-pour-python
- https://docs.python.org/2/library/index.html
- https://openclassrooms.com/courses/interface-graphique-pygame-pour-python/premieres-fenetres
- https://openclassrooms.com/forum/sujet/gerer-les-collisions-avec-pygame-1
- http://info.blaisepascal.fr
- Google images
