Plateforme de jeux d'arcade en C++ avec chargement dynamique de bibliothèques graphiques et de jeux via des .so.
Telecharger & tester
make && ./arcade ./lib/arcade_ncurses.so (menu de jeux avec chargement dynamique de bibliotheques graphiques SFML/SDL/ncurses/Allegro/libcaca)
Arcade est un projet Epitech (Tek2, B-OOP-400, groupe) qui consiste a ecrire en C++ une plateforme de jeu retro capable de charger dynamiquement, au moment de l'execution, differentes bibliotheques graphiques et differents jeux. Le programme central (core) ne connait explicitement aucune bibliotheque graphique ni aucun jeu : il ne fait que charger et orchestrer des plug-ins via dlopen, dlclose, dlsym et dlerror, encapsules car libdl est une bibliotheque C.
L'architecture impose une separation stricte entre le noyau, les bibliotheques graphiques (.so) et les bibliotheques de jeu (.so), toutes placees dans ./lib/ : il est formellement interdit de referencer une bibliotheque graphique explicitement dans le programme principal ou dans un jeu, et un jeu ne doit contenir aucune information de rendu ecran ou d'evenements bas niveau. Le Makefile doit fournir des cibles core, games et graphicals qui construisent independamment chaque composant, avec au moins trois bibliotheques graphiques et deux bibliotheques de jeu generees par un simple make.
Deux bibliotheques graphiques sont obligatoires, nCurses (arcade_ncurses.so) et SDL2 (arcade_sdl2.so), completees par au moins une autre au choix parmi une liste incluant SFML, OpenGL, Vulkan, Qt5 ou Allegro5. Cote jeux, au moins deux titres doivent etre implementes parmi Nibbler, Pacman, Qix, Centipede et Solarfox, chacun avec ses regles precises : par exemple Pacman gere des pacgums qui inversent temporairement les roles avec les fantomes, Qix demande de fermer une zone contenant un monstre en tracant une trainee inflammable, et Centipede scinde en deux le monstre touche par un tir.
Au lancement, le programme prend en argument la bibliotheque graphique initiale et affiche les jeux disponibles, les bibliotheques graphiques disponibles, les scores et un champ de saisie du nom du joueur ; des touches permettent ensuite de changer de bibliotheque graphique ou de jeu, de relancer une partie, de revenir au menu ou de quitter, sans jamais interrompre le programme.
Le projet impose egalement une documentation (schema de classes UML et manuel explicatif au format PDF dans ./doc/) et un partage d'interface avec un autre groupe en fin de projet, afin que leurs jeux et bibliotheques graphiques respectifs soient interchangeables — validant ainsi concretement la genericite de l'architecture a plug-ins.
Projet suivant
