Omega Race
1.1. Présentation
Omega Race est un vieux jeu vidéo développé pour le Commodore 64 en 1982.
On peut trouver quelques vidéos afin de comprendre le principe assez
simple du jeu : dégommer les ennemis.
Le joueur, symbolisé par un triangle doit tirer des missiles afin d'éliminer les ennemis ainsi que les mines. Il rebondit sur
les bords de l'écran ainsi que sur une zone au centre de l'écran. Il peut se déplacer en accélérant (curseur haut) ou en
modifiant son angle de rotation (curseur droit ou gauche).
Le but du projet n'est pas de reproduire à l'identique le jeu mais d'en utiliser les principes afin de développer en
python une nouvelle version du jeu.
On désire garder les éléments suivants du jeu initial :
- le joueur rebondit sur les bords ainsi que sur le cadre central
- les vaisseaux ont le même comportement mais peuvent se chevaucher et chevaucher des mines sans exploser
- si le joueur entre en contact avec un vaisseau ou une mine, il explose ; on sauvegarde alors le score et
on met à jour le meilleur
1.2. La bibliothèque PyGame
La bibliothèque PyGame permet de réaliser des jeux simples en dessinant dans une fenêtre graphique.
Vous pouvez vous familiariser avec les notions de PyGame en suivant la construction du jeu Pong.
1.3. Travail
Pour la période de 17 au 21 avril 2023 :
- se familiariser avec les règles d'Oméga Race
- reprendre et construire le jeu de Pong : ajouter une musique d'ambiance et une musique de fin de jeu
- commencer à réfléchir au déplacement des objets et notamment des ennemis
1.3.1. Présentation des librairies geometry et canvas
1.3.1.a paquet geometry
La librairie (paquet) geometry permet de définir différents éléments géométriques 2D comme le point (Point), la ligne (Line), le triangle (Triangle), le rectangle (Rectangle), le cercle (Circle) et le polygone (Polygon). Tous ces objets héritent de la classe Form qui définit les méthodes suivantes pour chaque objet :
- rotate( angle ) : qui permet d'appliquer une rotation à la forme d'un angle en radians
- translate( point ) : qui permet d'appliquer une translation à la forme donnée par un vecteur défini par un point
- get_bouding_box() : qui retourne la boîte englobante de l'objet
- point_is_inside( point ) : détermine si un point donné par ses coordonnées est situé à l'intérieur de la forme ou non
Les deux premières méthodes permettent de déplacer les objets alors que les deux dernières permettent de gérer les collisions entre objets.
On utilise notamment la notion de boîte englobante (bounding box en anglais) qui définit un rectangle qui contient la forme.
On dispose donc d'une classe BoundingBox qui est en fait un rectangle, mais distincte de la classe Rectangle issue de Form. Cette classe dispose de plusieurs méthodes associées :
- contains( bb ) : qui indique si la boîte englobante bb passée en paramètre est contenue dans la boîte courante
- point_is_inside( point ) : qui indique si un point passé en paramètre est à l'intérieur de la boîte englobante
- contact( bb ) : qui indique si la boîte englobante bb passée en paramètre est en contact avec la boîte courante. on retourne deux valeurs :
- la première est True ou False est indique s'il y a contact
- dans le cas ou il n'y pas contact, la deuxième valeur est 0, sinon, en cas de contact la deuxième valeur indique où il y a contact : CONTACT_LEFT, CONTACT_RIGHT, CONTACT_TOP, CONTACT_BOTTOM, ou une combinaison de ces valeurs
1.3.1.b paquet canvas
Canvas est une classe qui permet de dessiner des objets dans la fenêtre courante de PyGame en définissant les coordonnées de dessin comme pour une feuille de papier en fixant le point origine (x=0,y=0) au centre de la fenêtre.
On peut également donner la couleur de dessin ou des transformations (rotation et/ou translation) à appliquer à la forme passée en paramètre avant de la dessiner.
1.3.1.c téléchargement
Vous pouvez télécharger ces paquets et les programmes de test associés ici.
Exercice 1.1
A titre d'exercice et afin de vous familiariser avec ces paquets, créez un rectangle et déplacez le de la gauche vers la droite, puis vers le bas et faite le revenir à sa position initiale en diagonale.