Contexte
Projet de programmation ESIR 1 en équipe de 5.
Contrainte :
- Java
- Thème shmup
- 1 journée de developpement
Résultat : un shmup vertical sous-marin avec progression par vagues, système d'oxygène remplaçant les HP classiques, et un boss final serpent de mer à 5 segments articulés.
Fonctionnalités
- Système d'oxygène : Remplace la barre de vie traditionnelle. L'oxygène baisse passivement (1 unité toutes les 3 secondes), les collisions en retirent massivement, et les bulles collectées le rechargent. Alerte sonore sous 30%.
- 3 boosters cumulables : Triple tir divergent, rafale double, et grosse boule (3× dégâts). Stockés dans un inventaire 3 slots (FIFO), activables simultanément, chacun dure 15 secondes.
- Spawn adaptatif : L'intervalle d'apparition diminue avec le score. Trois phases progressives : ennemis passifs seuls → mêlée (pathfinding) → distance.
- Zones de danger latérales : Les bords de l'écran (corail) infligent des dégâts et repoussent le joueur : pas de sortie possible.
- Système XP/Level : XP exponentiel (100 × 1.5^niveau). Chaque level-up augmente la vitesse et l'oxygène maximum.
Boss final
Un serpent de mer articulé composé de 5 parties chaînées : tête, 3 segments et queue, chacune avec 125 PV. La tête se déplace en trajectoire sinusoïdale (amplitude 450 px) et charge périodiquement le joueur. Les segments suivent avec un délai via un historique de positions : créant un mouvement ondulant naturel.
Architecture
- Game loop : Boucle à 60 FPS sur un
JPanelavecGraphics2D, plein écran exclusif viaGraphicsDevice. - Hiérarchie d'ennemis : Classe abstraite
Enemy→ 4 sous-types (passif, mêlée, distance, boss) avec comportements distincts. - Projectiles : Rotation dynamique, deux tailles, trajectoire sinusoïdale pour les tirs ennemis (
waveOffset = sin(Y × 0.03) × 5). - Background : Défilement vertical infini avec deux copies de la texture pour un scrolling seamless.
- Audio : Système de buffer avec
HashMap<String, Clip>, chargement batch de tous les.wav.





