Noullez Dimitri.
Développement de Jeux·

Abyssal Shmup - Projet Programmation ESIR 1

Shoot'em up vertical sous-marin en Java - système d'oxygène, boss serpent de mer segmenté et boosters cumulables. Projet ESIR 1 en équipe de 5.

Java

Captures d'écran

Capture d'écran 1 du projet Abyssal Shmup - Projet Programmation ESIR 1
Capture d'écran 2 du projet Abyssal Shmup - Projet Programmation ESIR 1
Capture d'écran 3 du projet Abyssal Shmup - Projet Programmation ESIR 1
Capture d'écran 4 du projet Abyssal Shmup - Projet Programmation ESIR 1
Capture d'écran 5 du projet Abyssal Shmup - Projet Programmation ESIR 1
Capture d'écran 6 du projet Abyssal Shmup - Projet Programmation ESIR 1

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 JPanel avec Graphics2D, plein écran exclusif via GraphicsDevice.
  • 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.