Arcade
Arcade est une plateforme de jeux rétro conçue pour démontrer la puissance des architectures modulaires en C++. Grâce au chargement dynamique de bibliothèques partagées, les utilisateurs peuvent basculer entre différents jeux (Snake, Centipede) et moteurs graphiques (nCurses, SFML) en temps réel, sans quitter l'application.

Construire une plateforme où jeux et graphismes sont des plugins interchangeables, chargés à la volée.
Arcade repose sur une architecture plugin où le binaire principal, dépourvu de toute dépendance graphique, charge dynamiquement des bibliothèques partagées (.so) pour les jeux et les moteurs de rendu. Cette séparation permet de basculer entre nCurses (mode terminal) et SFML (2D accélérée) sans recompiler, tout en offrant une interface commune pour gérer les scores, les entrées utilisateur et le menu de sélection. Le projet inclut deux jeux complets (Snake et Centipede) et un système de persistance des scores par utilisateur.
- +Conception d'une architecture modulaire basée sur des interfaces C++ (`IDisplayModule`, `IGameModule`)
- +Implémentation du chargement dynamique de plugins via `dlopen`/`dlsym`
- +Développement de deux moteurs graphiques (nCurses et SFML) interchangeables à chaud
- +Création de deux jeux complets (Snake et Centipede) avec logique de simulation et gestion des collisions
- +Système de menu et de persistance des scores (fichiers JSON)
- +Build system CMake pour générer le binaire principal et les plugins
- +Documentation technique détaillée (interfaces, build, structure du projet)
Une architecture sans dépendances statiques
Le binaire principal (`arcade`) ne contient aucune logique graphique ou de jeu. Toutes les fonctionnalités sont déléguées à des bibliothèques partagées (.so) découvertes et chargées à l'exécution. Cette approche élimine les dépendances statiques et permet d'ajouter ou de remplacer des modules sans recompiler le cœur.

Plugins interchangeables à chaud
Grâce à `dlopen` et `dlsym`, l'application peut basculer entre les moteurs graphiques (nCurses, SFML) ou les jeux (Snake, Centipede) en cours d'exécution. Les touches F2 et F3 permettent de naviguer entre les plugins disponibles, offrant une expérience utilisateur fluide et instantanée.

Des interfaces pour l'extensibilité
Les interfaces `IDisplayModule` (rendu, événements) et `IGameModule` (logique de jeu) définissent des contrats clairs pour les plugins. Tout nouveau jeu ou moteur graphique peut être ajouté en implémentant ces interfaces, sans modifier le code existant. La documentation technique détaille les méthodes requises et les types attendus.

Persistance et expérience utilisateur
Un système de menu intégré permet de sélectionner un jeu, un moteur graphique et d'entrer un nom d'utilisateur. Les scores sont enregistrés dans des fichiers JSON et persistent entre les sessions, offrant une expérience cohérente même après un redémarrage.


Image 1 / 1
Une plateforme de jeux rétro où modularité rime avec simplicité : ajouter un jeu ou un moteur graphique se résume à déposer un fichier .so dans le dossier lib/.