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