PROJET FAIT EN GROUPE AVEC https://github.com/AyoubOurimi
[](https://classroom.github.com/a/Bc3prpbW) = Jeu Asteroids Stéphane Lopes <stephane.lopes@uvsq.fr>, Pablo de Oliveira Castro <pablo.oliveira@uvsq.fr>, Benjamin Cohen-Boulakia <benjamin.cohen-boulakia@uvsq.fr> v2024-2025 :stem: :icons: font :experimental: :source-highlighter: highlightjs :imagesdir: figs/
L’objectif de ce mini-projet est de créer une application pour jouer à Asteroids. L’application utilisera la bibliothèque Macroquad pour gérer les aspects graphiques du programme.
Ce sujet est volontairement peu contraignant afin de vous laisser proposer vos propres évolutions. Vous n’êtes pas limités à l’utilisation de la bibliothèque standard et vous êtes libres d’utiliser d’autres crates.
|
Caution
|
|
Les objets à l’écran (vaisseau, astéroïdes, missiles) sont considérés de forme ronde, afin de faciliter la gestion des collision.
Les astéroïdes se déplacent selon une vitesse constante, déterminée aléatoirement.
Le vaisseau a un déplacement déterminé par l’inertie, c’est-à-dire que, sans action du joueur, il se déplace en ligne droite, sans perte de vitesse. Le joueur peut utiliser le clavier pour modifier l’orientation du vaisseau, ou pour activer la poussée, ce qui fera dévier et accélérer/ralentir le vaisseau dans le sens de son orientation. Lorsque le vaisseau touche un astéroïde, son niveau de bouclier baisse. Si le bouclier était déjà à 0, le vaisseau est détruit.
Lorsque le vaisseau ou un astéroïde sort de l’écran, il réentre par le côté opposé.
Le vaisseau tire de petits projectiles, se déplaçant à vitesse constante et dans la direction correspondant à l’orientation du vaisseau.
Lorsque le projectile touche un astéroïde de grande taille celui-ci explose en deux astéroïdes plus petits. Si l’astéroïde est trop petit, il est totalement détruit. Lorsqu’un projectile touche un astéroïde, ou qu’il sort de l’écran, il disparaît.
Le jeu se termine lorsque le vaisseau est détruit (défaite), tous les astéroïdes sont détruits (victoire), ou lorsque le joueur appuie sur la touche kbd:[Échap] (abandon).
Le module asteroid et la structure Asteroid permettent de gérer les astéroïdes du jeux (déjà présent dans le projet).
-
Ajoutez la gestion de plusieurs astéroïdes.
-
Ajoutez la prise en compte de la taille des astéroïdes. Trois tailles sont possibles (grande, moyenne, petite). À chaque collision, un astéroïde se scinde en deux morceaux de taille inférieure ou disparaît s’il était déjà petit.
Le module spaceship et la structure Spaceship permettront de gérer le vaisseau.
Par rapport à un astéroïde, le vaisseau dispose en plus d’une orientation.
Quand l’utilisateur activera la poussée, la vitesse du vaisseau sera modifiée en fonction de l’orientation.
-
Créez le module
spaceshipet ajoutez-y la structureSpaceship. -
Ajoutez l’affichage du vaisseau.
-
Ajoutez la possibilité de contrôler le vaisseau avec les touches du clavier (kbd:[🠕] : poussée, kbd:[🠗] : rétro-poussée, kbd:[➞] : rotation à droite, kbd:[🠔] : rotation à gauche).
-
Gérer la collision entre le vaisseau et un astéroïde en tenant compte du bouclier du vaisseau.
Le module missile et la structure Missile permettront de gérer les projectiles tirés par le vaisseau.
-
Créez le module
missileet ajoutez-y la structureMissile. -
Ajoutez l’affichage du missile. On rappelle que le missile disparaît lorsqu’il sort de l’écran.
-
Ajoutez le tir du missile par la touche kbd:[Espace].
-
Gérer la collision entre un missile et un astéroïde.
Plusieurs points communs existent entre les divers éléments du jeu.
Dans cette partie, vous allez factoriser ces comportements dans un type StellarObject.
-
Créez le module
stellarobjectet ajoutez-y le traitStellarObject. -
Ajoutez des méthodes pour gérer le déplacement et l’effet d’une collision.
-
Implémentez ce trait au niveau des structures représentant un astéroïde, un missile et le vaisseau.
Ce projet peut être amélioré de nombreuses façons. Cette section vous en suggère quelques unes.
-
Le fond d’écran du jeu est un peu triste en l’état. Une possibilité serait d’y ajouter quelques astres voire d’y afficher une image. Attention toutefois à ce que le jeu ne perde pas en lisibilité.
-
Il est de même possible de remplacer les formes géométriques par des images (sprites).
-
Vous pouvez également envisager d’associer des sons au différents événements.
-
La physique du jeu peut aussi être améliorée. Le vaisseau pourrait ralentir lentement, les astéroïdes attirer leur environnement et entrer en collision entre eux, un trou noir pourrait apparaître, …
-
Le jeu peut proposer de calculer un score et des niveaux avec plus d’astéroïdes et/ou des astéroïdes plus rapides.
-
Sur le plan technique, un modèle MVC peut être implémenté pour séparer la logique d’affichage, du contrôle et du modèle. Ce modèle est particulièrement délicat à implémenter en Rust (Cross referencing in Rust - implementing MVC, The Hardest Pattern in Rust: Mediator, Mediator Pattern in Rust).
-
La description du jeu Asteroids sur Wikipedia
-
La bibliothèque Macroquad, aide en ligne
-
Un exemple de jeu Asteroids avec Macroquad
-
Un tutoriel en Python pour implémenter un jeu Asteroids