Aller au contenu

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.

# Depuis la racine du dépôt
make          # construit le GUI, l'IA et le serveur
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 binaire gui/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éseau server/build/libnetwork.a puis le binaire server/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 :

# zappy_server (généré)
#!/bin/sh
cd server/build/
exec ./zappy_server "$@"
# zappy_gui (généré)
#!/bin/sh
cd gui/build/
exec ./zappy_gui "$@"
# zappy_ai (généré)
#!/bin/sh
cd ai
exec python3 zappy_ai "$@"

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 :

make -C launcher          # -> launcher/zappy_launcher

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