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.
- 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
- 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
Responsabilité : Gestion globale avec instance unique
Classes :
GameManager- Orchestration du jeuLevelManager- Gestion des niveaux et progressionScoreManager- Système de score et combosSoundManager- Gestion audioLogger- Logging centralisé
Justification : Évite la duplication et fournit un point d'accès unique aux gestionnaires critiques.
Responsabilité : Gestion des états du jeu
États :
MenuState- Navigation et optionsPlayingState- Gameplay principalPausedState- Pause avec overlayGameOverState- Écran de finVictoryState- Écran de victoire
Transitions :
MenuState → PlayingState ↔ PausedState
↓
GameOverState / VictoryState
Justification : Sépare la logique de chaque état, facilite l'ajout de nouveaux états.
Responsabilité : Structure hiérarchique pour groupes d'objets
Structure :
AlienFormation (Composite)
├── Alien (Leaf)
├── Alien (Leaf)
└── Alien (Leaf)
Classes :
GameComponent- Interface communeAlienFormation- Gère un groupe d'aliensAlien- Alien individuel
Justification : Traite un groupe d'aliens comme une seule entité, facilite les opérations en masse.
Responsabilité : Création centralisée d'objets
Factories :
AlienFactory- Création d'aliens (Squid, Crab, Octopus)ProjectileFactory- Création de projectilesPowerUpFactory- Création de power-ups
Justification : Centralise la logique de création, facilite l'ajout de nouveaux types.
Responsabilité : Comportements interchangeables pour les boss
Stratégies :
MothershipStrategy- Tir en éventail, spawn mini-aliensDestroyerStrategy- Tir rotatif, missiles guidésDreadnoughtStrategy- Barrage massif, onde de choc
Structure :
Boss → BossStrategy
├── MothershipStrategy
├── DestroyerStrategy
└── DreadnoughtStrategyJustification : Permet de varier le comportement des boss sans modifier leur classe.
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.
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.
| 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 |
- Java JDK 21 (LTS)
- JavaFX 21
- Maven 3.8+
# 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# 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| Touche | Action |
|---|---|
| Flèches gauche/droite | Déplacer le vaisseau |
| Espace | Tirer |
| P | Pause |
| Touche | Action |
|---|---|
| Espace | Démarrer |
| S | Toggle effets sonores |
| M | Toggle musique |
| Esc | Quitter |
| Touche | Action |
|---|---|
| P | Reprendre |
| Esc | Retour au menu |
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
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
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!
| 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 |
Module : Design Patterns
Enseignant : Haythem Ghazouani
Année : 2024-2025
Institution : Polytech INTL
- 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
- Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four)
- Refactoring Guru - Design Patterns
- Head First Design Patterns
- Maven - Gestion de dépendances
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.jarSolution : Exécutez le générateur de sons
java com.spaceinvaders.ui.SimpleSoundGenerator- Sauvegarde du high score
- Plus de types d'aliens
- Niveaux bonus
- Mode plein écran
- Builder Pattern pour création de niveaux personnalisés
- Command Pattern pour système de replay
- Memento Pattern pour save/load
- Multijoueur local
- Mode en ligne multijoueur
- Éditeur de niveaux
- Support manette
- Modes de jeu alternatifs
Projet développé dans un cadre éducatif. Non destiné à un usage commercial.
- 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