Installation¶
Cette page décrit comment compiler les trois composants de Zappy à partir du dépôt. Pour les lancer ensuite, voir Lancement.
Prérequis¶
| Composant | Outils requis |
|---|---|
Serveur (zappy_server) |
g++ compatible C++17, GNU make |
GUI (zappy_gui) |
g++ C++17, GNU make et Raylib installé sur le système |
IA (zappy_ai) |
Python 3.11+ (uniquement la bibliothèque standard) |
| Launcher (optionnel) | clang++ C++17 et SFML (graphics, window, system, audio) |
Raylib n'est pas fourni avec le dépôt
Le GUI suppose que Raylib est déjà installé sur la machine (paquet de la
distribution ou compilation depuis les sources) : il est lié dynamiquement
(-lraylib -lGL -lm -lpthread -ldl -lrt -lX11) et n'est ni vendored ni
téléchargé automatiquement. La procédure détaillée se trouve sur la page
Installation de Raylib.
L'IA ne nécessite aucune dépendance externe
zappy_ai est écrit en Python pur, sans dépendance tierce
(pyproject.toml, dependencies = []). Il suffit d'un interpréteur
Python 3.11 ou supérieur. Aucune compilation n'est nécessaire pour l'IA.
Compilation avec le Makefile racine¶
Le Makefile situé à la racine du dépôt orchestre la construction des trois
composants et produit les binaires aux noms imposés par Epitech :
zappy_server, zappy_gui, zappy_ai.
| Cible | Effet |
|---|---|
make (= make all) |
Construit le GUI puis l'IA puis le serveur, et écrit les scripts wrapper zappy_gui, zappy_ai, zappy_server à la racine |
make re |
fclean puis reconstruction complète (all) |
make clean |
Nettoie les objets du GUI et du serveur (pas l'IA) |
make fclean |
clean puis supprime les trois scripts wrapper à la racine |
Concrètement, la cible all lance :
make -C gui— compile le binairegui/build/zappy_gui(g++ C++17, lié à Raylib) ;- la cible
ai— n'effectue aucune compilation (Python interprété), elle se contente d'écrire le script wrapper ; make -C server— compile la bibliothèque réseauserver/build/libnetwork.apuis le binaireserver/build/zappy_server(g++ C++17).
make clean ne touche pas l'IA
Comme l'IA n'a pas d'artefacts de compilation, make clean n'agit que sur
gui/ et server/. Seul make fclean supprime aussi le wrapper
zappy_ai.
Le mécanisme des scripts wrapper¶
Les vrais exécutables sont produits dans les sous-dossiers (gui/build/,
server/build/) et l'IA s'exécute depuis ai/. Pour respecter la convention
Epitech qui exige des binaires nommés zappy_server, zappy_gui et zappy_ai
à la racine du dépôt, le Makefile génère trois petits scripts shell qui se
placent dans le bon répertoire avant d'exécuter le programme réel :
Ces wrappers (rendus exécutables via chmod +x) transmettent tous leurs
arguments ("$@") au programme sous-jacent. Le cd est important : il permet
au GUI de retrouver ses assets (chemins relatifs) et à l'IA de retrouver son
module src/.
graph LR
A["./zappy_server -p 4242 ..."] --> B["cd server/build/"]
B --> C["exec ./zappy_server -p 4242 ..."]
D["./zappy_ai -p 4242 ..."] --> E["cd ai"]
E --> F["exec python3 zappy_ai -p 4242 ..."]
Compilation manuelle d'un seul composant¶
Chaque composant possède son propre Makefile, utile pour ne reconstruire qu'une partie :
make -C server # serveur seul -> server/build/zappy_server
make -C gui # GUI seul -> gui/build/zappy_gui
Sans wrapper
Compiler avec make -C server produit bien le binaire mais n'écrit pas
le script wrapper à la racine ; pour obtenir les wrappers, passez par
make (ou la cible dédiée make server / make gui) depuis la racine.
Le launcher SFML (optionnel)¶
Un orchestrateur graphique facultatif, écrit en C++17 avec SFML, permet de configurer puis de lancer toute la pile depuis une fenêtre. Il n'est pas construit par le Makefile racine ; il se compile séparément :
Son fonctionnement détaillé (réglages, lancement) est décrit dans Lancement.
ia/ est un dossier mort
Le dépôt contient un répertoire ia/ qui est hérité/obsolète : l'IA
réellement utilisée est dans ai/ (c'est elle que référencent le
Makefile racine et le binaire zappy_ai). Ignorez ia/.