Préambule

L'objectif de ce TP est de réaliser un casse brique simpliste en partant du programme "Baballe" présenté en cours. La façon de coder doit suivre les principes MVC, ce qui implique que pour chaque élément du jeu, il doit y avoir une classe de modèle et une classe de vue.

Pour démarrer rapidement et faciliter l'implémentation de ce TP, un canevas de code est téléchargeable : [ ici


1°/ La raquette

La raquette est représentée par les classes :

  • RacketModel : pour la partie modèle,
  • RacketLook : pour la partie vue.

La partie modèle ne contient au moins comme attributs  :

  • x,y : la position du coin haut-gauche de la raquette dans l'espace.
  • speedX : la vitesse horizontale.
  • width : la largeur de la raquette (NB : pour les briques qui influent sur la taille de la raquette).

Le look de la raquette est laissé libre, à partie du moment où la largeur à l'écran correspond bien à width.

Les "fonctionnalités" de la raquette :

  • au début de la partie, elle est positionnée à quelques pixels du bas de la fenêtre et centrée.
  • elle peut se déplacer horizontalement en appuyant les les flèches gauche/droite.
  • elle est bloquée par les côtés gauche/droit de la fenêtre.
  • sa vitesse est constante ou nulle. La vitesse de base est à déterminer pour rendre le jeu jouable mais pas trop facile.
  • quand une brique "vitesse" est cassée, la vitesse est doublée pendant 5 secondes (soit 500 frames de 1/100s)
  • quand une brique "longueur" est cassé, la largeur de la raquette est augmentée de 150% pendant 5 secondes.
  • quand la balle touche la raquette, l'angle de réflexion de la balle dépend de la vitesse de la raquette :
    • si immobile : la balle repart avec l'angle symétrique (= comme en cas de choc avec les murs/briques). Par exemple, si la balle arrive à 225°, elle repart à 135°.
    • si la raquette et la balle vont vers la gauche : l'angle de réflexion est augmenté de 2° * vitesse, sans pouvoir dépasser 170°. Par exemple, si la balle arrive à 255° et que la vitesse de la raquette est 4, alors elle repart à 135+2*4 = 143°.
    • si la raquette va vers la gauche et la balle vers la droite : l'angle de réflexion est augmenté de 2° * vitesse, sans pouvoir dépasser 80°. Par exemple, si la balle arrive à 315° et que la vitesse de la raquette est 4, alors elle repart à 45°+2*4 = 53°.
    • si la raquette et la balle vont vers la droite : l'angle de réflexion est diminué de 2° * vitesse, sans pouvoir être sous 10°. Par exemple, si la balle arrive à 315° et que la vitesse de la raquette est 4, alors elle repart à 45° - 2*4 = 37°.
    • si la raquette va vers la droite et la balle vers la gauche : l'angle de réflexion est diminué de 2° * vitesse, sans pouvoir être sous 100°. Par exemple, si la balle arrive à 225° et que la vitesse de la raquette est 4, alors elle repart à 135° - 2*4 = 127°.

2°/ La balle

La balle utilise les mêmes classes que dans le cours.

Les fonctionnalités de la balle :

  • en cas de collision avec le mur du bas, la partie s'arrête,
  • en cas de collision avec les murs gauche, droit, haut, ou les briques, les rebonds se font comme dans le cours : à l'angle symétrique.
  • en cas de collision avec la raquette, le rebond se fait comme indiqué dans la partie précédente.

 

3°/ Les briques

Les briques sont représentées par les classes BrickModel et BrickLook.

A vous de déterminer quels sont les attributs nécessaires dans la partie modèle sachant que :

  • une brique qui a été heurtée par la balle est dite "cassée" et doit devenir invisible et ne plus intervenir dans le calcul des collisions.
  • certaines briques peuvent être "à bonus", c'est-à-dire qu'elles octroient un bonus temporaire au joueur.
  • les 2 types de bonus sont :
    • raquette plus large,
    • raquette plus rapide.

Le look des briques est laissé libre.

 

4°/ Le modèle général

Le modèle général correspond à la classe Model du cours et contient tous les éléments du jeu, dont la balle, la raquette et les briques. 

Les seules contraintes sur les briques sont :

  • il doit y avoir 10% de briques à bonus vitesse,
  • il doit y avoir 5% de briques à bonus largeur.

Pour leur disposition et leur nombre, vous êtes libres. Cela dit, pour tester, vous pouvez déjà commencer par créer une disposition de M lignes et N colonnes de briques, toutes jointives.

 

5°/ La vue générale

La vue générale correspond à la classe View du cours et contient tous les visuels du jeu, dont la balle, la raquette et les briques.

 

6°/ Le contrôle

Les classes de la partie contrôle sont les mêmes que celles du cours, qu'il faut modifier pour prendre en compte les besoins applicatifs.

Il faut notamment arrêter le jeu lorsque la balle touche le mur du bas. Dans ce cas, vous devez arrêter le timer et afficher "PERDU" au centre de la fenêtre.

Il faut également arrêter le jeu lorsqu'il n'y a plus de briques. Dans ce cas, vous devez arrêter le timer et afficher "GAGNÉ" au centre de la fenêtre.