Skip to content

emna599/space-invaders-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Space Invaders - Architecture avec Design Patterns

Java JavaFX Design Patterns


Description

Implémentation moderne du jeu classique Space Invaders démontrant l'application de 7 Design Patterns du Gang of Four dans le développement de jeux vidéo.

Développé dans le cadre du module Design Patterns à Polytech INTL, ce projet illustre comment les patrons de conception permettent de créer une architecture logicielle maintenable, extensible et testable.


Fonctionnalités Principales

Gameplay

  • Combat spatial avec vagues d'aliens
  • Système de power-ups (Shield, Double Shot, Speed Boost, Rapid Fire, etc.)
  • Boss épiques tous les 5 niveaux avec 3 types différents
  • Progression dynamique avec patterns d'aliens variés
  • Système de combos et multiplicateurs de score

Technique

  • Architecture basée sur 7 design patterns
  • Système audio complet (effets sonores + musique)
  • Gestion d'états avec transitions fluides
  • Logging détaillé pour debug et analyse
  • Performance stable à 60 FPS

Architecture - 7 Design Patterns

1. Singleton Pattern

Responsabilité : Gestion globale avec instance unique

Classes :

  • GameManager - Orchestration du jeu
  • LevelManager - Gestion des niveaux et progression
  • ScoreManager - Système de score et combos
  • SoundManager - Gestion audio
  • Logger - Logging centralisé

Justification : Évite la duplication et fournit un point d'accès unique aux gestionnaires critiques.


2. State Pattern

Responsabilité : Gestion des états du jeu

États :

  • MenuState - Navigation et options
  • PlayingState - Gameplay principal
  • PausedState - Pause avec overlay
  • GameOverState - Écran de fin
  • VictoryState - Écran de victoire

Transitions :

MenuState → PlayingState ↔ PausedState
              ↓
     GameOverState / VictoryState

Justification : Sépare la logique de chaque état, facilite l'ajout de nouveaux états.


3. Composite Pattern

Responsabilité : Structure hiérarchique pour groupes d'objets

Structure :

AlienFormation (Composite)
    ├── Alien (Leaf)
    ├── Alien (Leaf)
    └── Alien (Leaf)

Classes :

  • GameComponent - Interface commune
  • AlienFormation - Gère un groupe d'aliens
  • Alien - Alien individuel

Justification : Traite un groupe d'aliens comme une seule entité, facilite les opérations en masse.


4. Factory Pattern

Responsabilité : Création centralisée d'objets

Factories :

  • AlienFactory - Création d'aliens (Squid, Crab, Octopus)
  • ProjectileFactory - Création de projectiles
  • PowerUpFactory - Création de power-ups

Justification : Centralise la logique de création, facilite l'ajout de nouveaux types.


5. Strategy Pattern

Responsabilité : Comportements interchangeables pour les boss

Stratégies :

  • MothershipStrategy - Tir en éventail, spawn mini-aliens
  • DestroyerStrategy - Tir rotatif, missiles guidés
  • DreadnoughtStrategy - Barrage massif, onde de choc

Structure :

BossBossStrategy
       ├── MothershipStrategy
       ├── DestroyerStrategy
       └── DreadnoughtStrategy

Justification : Permet de varier le comportement des boss sans modifier leur classe.


6. Observer Pattern

Responsabilité : Notifications automatiques des changements

Flux :

ScoreManager (Subject)
    ↓ notifyObservers()
HUD, UI (Observers)
    ↓ onScoreChanged()
Mise à jour automatique

Justification : Découplage entre la logique métier et l'affichage.


7. Decorator Pattern

Responsabilité : Ajout dynamique de capacités au joueur

Power-ups :

  • Shield - Protection temporaire (5s)
  • Double Shot - Tire 3 projectiles (8s)
  • Speed Boost - Vitesse augmentée (5s)
  • Rapid Fire - Cooldown réduit
  • Nuke - Détruit tous les aliens
  • Time Slow - Ralentit le temps (5s)

Justification : Ajoute des capacités sans modifier la classe Player.


Statistiques du Projet

Métrique Valeur
Lignes de code ~3500+
Classes 57
Interfaces 5
Enums 5
Packages 8
Design Patterns 7
Effets sonores 12
Types d'ennemis 3 aliens + 3 boss
Power-ups 10

Installation

Prérequis

  • Java JDK 21 (LTS)
  • JavaFX 21
  • Maven 3.8+

Compilation et Exécution

# Cloner le dépôt
git clone https://github.com/emna599/space-invaders-java.git
cd space-invaders-patterns

# Compiler et lancer
mvn clean javafx:run

Génération du JAR

# Créer le JAR
mvn clean package

# Exécuter
java --module-path /path/to/javafx-sdk/lib \
     --add-modules javafx.controls,javafx.media \
     -jar target/space-invaders-1.0.0.jar

Contrôles

En Jeu

Touche Action
Flèches gauche/droite Déplacer le vaisseau
Espace Tirer
P Pause

Menu

Touche Action
Espace Démarrer
S Toggle effets sonores
M Toggle musique
Esc Quitter

Pause

Touche Action
P Reprendre
Esc Retour au menu

Structure du Projet

space-invaders/
├── src/main/java/com/spaceinvaders/
│   ├── Main.java
│   ├── core/                        # Singleton Pattern
│   │   ├── GameManager.java
│   │   ├── LevelManager.java
│   │   ├── ScoreManager.java
│   │   ├── GameLoop.java
│   │   ├── Constants.java
│   │   ├── LevelConfig.java
│   │   ├── AlienPattern.java
│   │   └── ScoreObserver.java       # Observer Pattern
│   ├── states/                      # State Pattern
│   │   ├── GameState.java
│   │   ├── MenuState.java
│   │   ├── PlayingState.java
│   │   ├── PausedState.java
│   │   ├── GameOverState.java
│   │   └── VictoryState.java
│   ├── entities/
│   │   ├── GameObject.java
│   │   ├── Player.java              # Decorator Pattern
│   │   ├── Alien.java               # Composite Pattern
│   │   ├── Boss.java                # Strategy Pattern
│   │   ├── BossStrategy.java
│   │   ├── MothershipStrategy.java
│   │   ├── DestroyerStrategy.java
│   │   ├── DreadnoughtStrategy.java
│   │   ├── Projectile.java
│   │   ├── PowerUp.java
│   │   └── AdvancedPowerUp.java
│   ├── composite/                   # Composite Pattern
│   │   ├── GameComponent.java
│   │   └── AlienFormation.java
│   ├── factories/                   # Factory Pattern
│   │   ├── AlienFactory.java
│   │   ├── ProjectileFactory.java
│   │   └── PowerUpFactory.java
│   ├── effects/
│   │   ├── ParticleSystem.java
│   │   └── ParticleEmitter.java
│   ├── ui/
│   │   ├── GameScene.java
│   │   ├── SoundManager.java        # Singleton Pattern
│   │   ├── SimpleSoundGenerator.java
│   │   ├── HUD.java
│   │   ├── MenuRenderer.java
│   │   ├── GameRenderer.java
│   │   └── ParticleEffect.java
│   └── utils/
│       └── Logger.java              # Singleton Pattern
└── src/main/resources/
    ├── sounds/                      # 12 effets sonores
    └── music/                       # Musiques de fond

Diagrammes UML

Le projet inclut plusieurs diagrammes UML documentant l'architecture :

  • Vue d'ensemble : docs/class-diagram-complete.png
  • Par pattern : docs/patterns/
    • Singleton Pattern
    • State Pattern
    • Composite Pattern
    • Factory Pattern
    • Strategy Pattern
    • Observer Pattern
    • Decorator Pattern

Système de Logging

Tous les événements sont tracés dans game.log :

[2025-01-15 14:23:45] [INFO] GameManager initialized
[2025-01-15 14:23:45] [STATE] Game: -> MENU
[2025-01-15 14:23:47] [AUDIO] SoundManager initialized
[2025-01-15 14:23:50] [STATE] Game: MENU -> PLAYING
[2025-01-15 14:23:50] [LEVEL] Loading level 1
[2025-01-15 14:23:52] [FACTORY] Created SQUID alien at (100.0,80.0)
[2025-01-15 14:23:56] [SCORE] Kill! +30 points (x1.0) - Combo: 1
[2025-01-15 14:24:00] [DECORATOR] ShieldDecorator applied to Player
[2025-01-15 14:24:10] [LEVEL] All aliens destroyed! Level 1 complete!

Équipe de Développement

Membre Contributions
Emna Belkahla Architecture globale, State Pattern, Singleton Pattern
Dorra Belkahla Factory Pattern, Composite Pattern, Système de boss
Houssem Messaoud Decorator Pattern, Gameplay, Système de power-ups
Inès Fehri Interface graphique, Effets visuels, Système audio

Contexte Académique

Module : Design Patterns
Enseignant : Haythem Ghazouani
Année : 2024-2025
Institution : Polytech INTL

Objectifs Pédagogiques

  • Comprendre et implémenter 7 design patterns du Gang of Four
  • Créer une architecture logicielle maintenable et extensible
  • Appliquer les principes SOLID
  • Gérer un projet en équipe avec Git
  • Documenter le code et l'architecture

Références

Design Patterns

Développement de Jeux

Outils

  • Maven - Gestion de dépendances

Problèmes Connus

JavaFX non trouvé

Erreur : JavaFX runtime components are missing

Solution : Ajoutez le module-path JavaFX

java --module-path /path/to/javafx-sdk/lib \
     --add-modules javafx.controls,javafx.media \
     -jar space-invaders.jar

Pas d'effets sonores

Solution : Exécutez le générateur de sons

java com.spaceinvaders.ui.SimpleSoundGenerator

Améliorations Futures

Court Terme

  • Sauvegarde du high score
  • Plus de types d'aliens
  • Niveaux bonus
  • Mode plein écran

Moyen Terme

  • Builder Pattern pour création de niveaux personnalisés
  • Command Pattern pour système de replay
  • Memento Pattern pour save/load
  • Multijoueur local

Long Terme

  • Mode en ligne multijoueur
  • Éditeur de niveaux
  • Support manette
  • Modes de jeu alternatifs

Licence

Projet développé dans un cadre éducatif. Non destiné à un usage commercial.


Remerciements

  • Haythem Ghazouani - Enseignant Design Patterns
  • Polytech INTL - Cadre académique
  • Gang of Four - Fondations des design patterns
  • Communauté JavaFX - Documentation et exemples

Développé par Emna Belkahla, Dorra Belkahla, Houssem Messaoud et Inès Fehri

2025-2026 - Polytech INTL

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages