+03 - C++ · SYSTÈMES
← Tous les projets

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.

ANNÉE2026
RÔLEArchitecture · Développement C++
TYPEProjet académique (Epitech)
CONTEXTE2ᵉ année · C++20 · Plugins dynamiques
STACKC++20 · CMake · SFML · nCurses · Linux
Arcade
+LE PROJET

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.

Ce que j'ai fait
  • +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)
C++20CMakeSFMLnCursesLinux
01

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.

Une architecture sans dépendances statiques
02

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.

Plugins interchangeables à chaud
03

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.

Des interfaces pour l'extensibilité
04

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.

Persistance et expérience utilisateur
Gallery image 1

Image 1 / 1

+RÉSULTAT

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/.

0jeux intégrés
0moteurs graphiques
0dépendances statiques
JSONpersistance des scores
Projet suivant

caret-tui

04 - OUTIL / CLI