Aller au contenu

Lancement

Une fois les binaires construits (voir Installation), on lance Zappy en trois temps : d'abord le serveur, puis le GUI, puis une ou plusieurs IA par équipe. Toutes les commandes ci-dessous s'exécutent depuis la racine du dépôt via les scripts wrapper.

Ordre de lancement

Démarrez toujours le serveur en premier : c'est lui qui ouvre le port TCP. Le GUI et les IA sont des clients ; ils échouent (code de sortie 84) s'ils ne trouvent pas de serveur à l'adresse indiquée.

Lancer le serveur

./zappy_server -p <port> -x <largeur> -y <hauteur> \
               -n <équipe1> <équipe2> ... -c <clients> -f <fréquence>
Option Signification Défaut
-p Port TCP d'écoute (1..65535) 4242
-x Largeur de la carte (> 0) 10
-y Hauteur de la carte (> 0) 10
-n Liste des noms d'équipes (au moins un) team1 team2
-c Nombre de clients (œufs) autorisés par équipe (> 0) 3
-f Fréquence : nombre d'unités de temps par seconde (> 0) 100

L'option -n consomme tous les jetons suivants qui ne sont pas une nouvelle option ; le nom réservé GRAPHIC et les doublons sont rejetés. Une erreur de configuration envoie un message sur la sortie d'erreur et termine le programme avec le code 84.

Signification de -c

-c fixe le nombre d'œufs (donc de slots de connexion) par équipe au démarrage. C'est aussi le nombre de clients IA qui peuvent se connecter à cette équipe avant qu'un Fork ne crée des places supplémentaires.

Exemple :

./zappy_server -p 4242 -x 20 -y 20 -n team1 team2 team3 -c 6 -f 100

Lancer le GUI

./zappy_gui -h <hôte> -p <port>
Option Signification Défaut
-h Hôte (adresse) du serveur aucun (à fournir)
-p Port TCP du serveur 4242

En pratique, fournissez les deux options. À la connexion, le GUI envoie automatiquement GRAPHIC\n au serveur, qui lui répond par l'état initial complet de la partie (taille de carte, équipes, contenu des tuiles, joueurs, œufs). Une fenêtre 3D s'ouvre (1280 × 720) et affiche la partie en temps réel.

./zappy_gui -h localhost -p 4242

Le GUI est passif

Le GUI ne fait qu'observer : après GRAPHIC, il n'envoie plus rien et se contente d'afficher les événements diffusés par le serveur.

Lancer une IA

./zappy_ai -p <port> -n <équipe> -h <hôte>
Option Signification Défaut
-p Port TCP du serveur aucun (à fournir)
-n Nom de l'équipe à rejoindre aucun (à fournir)
-h Hôte du serveur 127.0.0.1
--debug Active les journaux détaillés désactivé

Chaque processus zappy_ai contrôle un seul joueur. Pour avoir plusieurs joueurs dans une équipe, lancez plusieurs processus avec le même -n. Le nombre de connexions par équipe est borné par le -c du serveur (plus les œufs créés par Fork).

À la connexion, l'IA effectue le handshake (voir Handshake) : elle attend WELCOME, envoie le nom d'équipe, puis reçoit le nombre de slots restants et les dimensions de la carte. Une erreur de connexion termine le processus avec le code 84.

./zappy_ai -p 4242 -n team1 -h localhost

Exemple de session complète

L'exemple suivant met en place une partie sur 3 équipes, avec le GUI et deux IA par équipe. Ouvrez plusieurs terminaux (ou utilisez & pour mettre des processus en arrière-plan).

# Terminal 1 — le serveur (à démarrer en premier)
./zappy_server -p 4242 -x 20 -y 20 -n team1 team2 team3 -c 6 -f 100

# Terminal 2 — le GUI (spectateur)
./zappy_gui -h localhost -p 4242

# Terminal 3..N — deux IA par équipe
./zappy_ai -p 4242 -n team1 -h localhost
./zappy_ai -p 4242 -n team1 -h localhost
./zappy_ai -p 4242 -n team2 -h localhost
./zappy_ai -p 4242 -n team2 -h localhost
./zappy_ai -p 4242 -n team3 -h localhost
./zappy_ai -p 4242 -n team3 -h localhost
sequenceDiagram
    participant U as Vous
    participant S as zappy_server
    participant G as zappy_gui
    participant A as zappy_ai

    U->>S: ./zappy_server -p 4242 ...
    Note over S: ouvre le port 4242
    U->>G: ./zappy_gui -h localhost -p 4242
    G->>S: GRAPHIC
    S->>G: état initial
    U->>A: ./zappy_ai -p 4242 -n team1
    A->>S: handshake (WELCOME, team1, ...)
    S->>G: pnw / enw (nouveau joueur)

Connexions tardives

Le serveur reste disponible tant qu'il tourne : vous pouvez connecter de nouvelles IA ou (re)lancer le GUI à tout moment, dans la limite des slots d'équipe disponibles.

Le launcher SFML (optionnel)

Le launcher graphique automatise toute cette procédure. Après l'avoir compilé (make -C launcher), lancez-le :

./launcher/zappy_launcher

La fenêtre « Mewzappy Launcher » propose un écran de réglages (port, largeur, hauteur, nombre de clients, fréquence, liste d'équipes — valeurs par défaut respectives 4242, 10, 10, 1, 1). En appuyant sur Launch, le launcher :

  1. compile d'abord le projet en invoquant le Makefile racine (cd .. && make -j) et affiche la sortie ;
  2. lance ensuite un zappy_server, un zappy_gui, puis un zappy_ai par équipe et par client, à partir des réglages saisis. Il appelle les binaires wrapper de la racine avec les options :
    • serveur : -p -x -y -c -f -n <équipes...>
    • GUI : -p <port> -h localhost
    • IA : -p <port> -n <équipe> -h localhost
  3. arrête tous les processus (SIGTERM) lorsque vous cliquez sur Stop ou fermez la fenêtre.

Pourquoi passer par la racine ?

Le launcher exécute les binaires « nus » (zappy_server, zappy_gui, zappy_ai) depuis le répertoire racine du dépôt : il s'appuie sur les scripts wrapper décrits dans Installation.

Limitations connues

Certains comportements de lancement et d'options présentent des écarts documentés. Voir Limitations connues.