Un casse-briques
Un exemple de projet
Le casse-briques est un genre de jeu vidéo souvent classé dans la catégorie arcade, apparu en 1975 avec le jeu Breakout. Il est directement inspiré de Pong. Le principe général est de détruire, au moyen d'une ou plusieurs balles, un ensemble de briques se trouvant dans un niveau pour accéder au niveau suivant.
Objectif du projet
Réaliser un casse-briques.
Avec de la POO (programmation orientée objet)
Avec une interface graphique(IHM)
Langage : Python
Environnement de conception : Processing
Le choix de Processing est motivé par le fait que la création d'interfaces graphiques y soit particulièrement aisée.
Les programmes s'implémentent en Python (2.7) et sont interprétés en Java.
Il faut donc (cahier des charges) :
Créer 3 classes (Paddle,Ball et Brick).
Créer le programme principal pour faire fonctionner le casse-briques.
Les bases de Processing
L'espace de travail
Ce programme affiche une fenêtre de dimension 605x400 pixels avec un fond noir.
La fonction setup() permet d'initialiser le programme, comme par exemple la création d'une fenêtre (size(605,400)) de dimensions : 605x400 pixels
La fonction draw() est une boucle infinie, qui permet l'actualisation de la fenêtre 60 fois par seconde (par défaut), on peut néanmoins gérer cette actualisation avec la commande frameRate(fps).
Les références complètes des commandes disponibles sont répertoriées sur le site officiel de Processing.py
Le repérage dans la fenêtre
Par convention, le coin en haut à gauche de la fenêtre correspond aux valeurs x=0 et y=0.
Les valeurs x sont croissantes vers la droite et les valeurs y sont croissantes vers le bas.
Le paddle
Le paddle est un rectangle situé au bas de la fenêtre que l'utilisateur peut déplacer horizontalement de gauche à droite avec deux touches du clavier.
Le paddle ne doit pas sortir de la fenêtre.
On crée la classe dans un nouvel onglet.
On donne un nom à l'onglet : Paddle (ce sera le nom du fichier py créé (Paddle.py))
Dans le programme Principal
La balle
La balle est un cercle qui se déplace dans la fenêtre avec une certaine vitesse.
Elle doit rebondir sur les bords
Elle doit rebondir sur le paddle
On crée la classe dans un nouvel onglet.
On donne un nom à l'onglet : Ball ce sera le nom du fichier py créé (Ball.py))
La collision
La méthode utilisée pour la collision est :
(px,py) coordonnées du Paddle
r : rayon de la balle
Donc la balle(bx,by) est en collision avec le paddle si :
px - r < bx < px+w +r
py - r < by < py
Dans le programme principal
On rajoute dans le setup() :
On rajoute dans le draw() :
Quelques modifications
On fait en sorte que la balle ne se mette en mouvement qu'au clic de souris.
Cette variable permettra de stopper le jeu...
Création d'une variable playingGame (booléen) :
Modification à apporter à la fonction draw :
Création de la fonction mousePressed() pour mettre playingGame à TRUE :
Les briques
Une brique est un rectangle statique avec une certaine couleur.
Dans le programme principal
On crée une liste pour contenir les objets briques.
Création de la liste :
Modification du setup() :
La fonction addbrick(x,y,hits) :
La balle doit casser les briques
Une méthode à rajouter à la classe Ball
Le code à rajouter dans le draw() :
On parcourt la liste des briques à l'envers et si une collision est détectée, on supprime la brique.
Le fait de parcourir la liste à l'envers permet de n'oublier aucune brique à chaque tour de boucle.
Le schéma ci-dessous explique la raison de ce parcours
le code à rajouter dans le draw() :
Pour terminer
Pour ce projet
Le programme proposé est un embryon de casse-briques.
Pour finaliser le projet, on peut :
Faire en sorte que le joueur puisse perdre...
Rajouter un score...
Ajouter des malus..des bonus...
Ajouter des niveaux...
etc.
Un compte rendu de projet peut se faire autour du code lui-même en expliquant, à chaque étape, les solutions retenues pour résoudre les problèmes et les pistes qui n'ont pas abouties.
Un point important
Il faut se préparer pour le grand oral à développer un point en particulier.
Celui-ci se doit être en lien avec le programme de NSI.
Autrement dit :
Le jeu en lui-même n'a que peu d'intérêt, la partie POO par contre y est centrale.