Ce document décrit en détail le protocole de communication TCP utilisé dans le projet Zappy entre les différents composants : Serveur, Interface Graphique (GUI) et Clients IA.
- Vue d'ensemble
- Symboles et Conventions
- Commandes Client IA → Serveur
- Commandes GUI → Serveur
- Notifications Serveur → GUI
- Messages d'Erreur
- Système de Files d'Attente
Le protocole Zappy utilise TCP pour la communication entre les composants. Chaque message se termine par \n et est traité de manière asynchrone avec un système de files d'attente pour les commandes IA.
- CLIENT_TYPE_AI : Bots IA contrôlant les joueurs
- CLIENT_TYPE_GUI : Interface graphique pour la visualisation
- GRAPHIC : Connexion spéciale pour l'interface graphique
| Symbole | Signification | Symbole | Signification |
|---|---|---|---|
X |
Position horizontale (largeur) | n |
Numéro de joueur |
Y |
Position verticale (hauteur) | O |
Orientation : 1(N), 2(E), 3(S), 4(W) |
q0 |
Quantité ressource 0 (food) | L |
Niveau du joueur/incantation |
q1 |
Quantité ressource 1 (linemate) | e |
Numéro d'œuf |
q2 |
Quantité ressource 2 (deraumere) | T |
Unité de temps |
q3 |
Quantité ressource 3 (sibur) | N |
Nom de l'équipe |
q4 |
Quantité ressource 4 (mendiane) | R |
Résultat d'incantation |
q5 |
Quantité ressource 5 (phiras) | M |
Message |
q6 |
Quantité ressource 6 (thystame) | i |
Numéro de ressource |
- food - Nourriture (survie)
- linemate - Pierre précieuse
- deraumere - Pierre précieuse
- sibur - Pierre précieuse
- mendiane - Pierre précieuse
- phiras - Pierre précieuse
- thystame - Pierre précieuse
Client → Serveur : Forward\n
Serveur → Client : ok\n | ko\n
Serveur → GUI : ppo #n X Y O\n
- Fonction : Fait avancer le joueur d'une case dans sa direction actuelle
- Délai : 7/freq unités de temps
- Carte toroïdale : Les coordonnées utilisent le modulo (wraparound)
Client → Serveur : Right\n
Serveur → Client : ok\n | ko\n
Serveur → GUI : ppo #n X Y O\n
- Fonction : Fait tourner le joueur de 90° vers la droite
- Délai : 7/freq unités de temps
- Orientations : 1→2→3→4→1 (N→E→S→W→N)
Client → Serveur : Left\n
Serveur → Client : ok\n | ko\n
Serveur → GUI : ppo #n X Y O\n
- Fonction : Fait tourner le joueur de 90° vers la gauche
- Délai : 7/freq unités de temps
- Orientations : 1→4→3→2→1 (N→W→S→E→N)
Client → Serveur : Look\n
Serveur → Client : [case0,case1,case2,...]\n
- Fonction : Vision autour du joueur selon son niveau
- Délai : 7/freq unités de temps
- Portée : Niveau du joueur (niveau 1 = 1 case, niveau 2 = 2 cases, etc.)
- Format réponse : Cases dans l'ordre de distance croissante
- Contenu cases : Ressources et joueurs présents
Client → Serveur : Inventory\n
Serveur → Client : [food: X, linemate: Y, deraumere: Z, sibur: A, mendiane: B, phiras: C, thystame: D]\n
- Fonction : Affiche l'inventaire complet du joueur
- Délai : 1/freq unités de temps
- Format : Quantités de toutes les ressources
Client → Serveur : Take food\n | Take linemate\n | Take deraumere\n | etc.
Serveur → Client : ok\n | ko\n
Serveur → GUI : pgt #n i\n
Serveur → GUI : bct X Y q0 q1 q2 q3 q4 q5 q6\n
- Fonction : Ramasse une ressource spécifique sur la case actuelle
- Délai : 7/freq unités de temps
- Conditions : Ressource doit être disponible sur la case
- Effet : Ajoute à l'inventaire, met à jour la case
Client → Serveur : Set food\n | Set linemate\n | Set deraumere\n | etc.
Serveur → Client : ok\n | ko\n
Serveur → GUI : pdr #n i\n
Serveur → GUI : bct X Y q0 q1 q2 q3 q4 q5 q6\n
- Fonction : Dépose une ressource de l'inventaire sur la case actuelle
- Délai : 7/freq unités de temps
- Conditions : Ressource doit être dans l'inventaire
- Effet : Retire de l'inventaire, ajoute à la case
Client → Serveur : Connect_nbr\n
Serveur → Client : X\n
- Fonction : Nombre d'œufs disponibles pour l'équipe
- Délai : 1/freq unités de temps
- Utilité : Planification de nouvelles connexions
Client → Serveur : Player_nbr\n
Serveur → Client : X\n
- Fonction : Nombre de joueurs connectés dans l'équipe
- Délai : 1/freq unités de temps
Client → Serveur : Player_pos\n
Serveur → Client : X,Y\n
- Fonction : Position actuelle du joueur
- Délai : 1/freq unités de temps
- Format : Coordonnées séparées par une virgule
Client → Serveur : Incantation\n
Serveur → Client : Elevation underway Current level: L\n | ko\n
Serveur → GUI : pic X Y L #n #n...\n
Serveur → GUI : pie X Y R\n
- Fonction : Tente une montée de niveau
- Délai : 300/freq unités de temps
- Conditions :
- Nombre requis de joueurs du même niveau sur la case
- Ressources requises sur la case
- Effet : Monte tous les participants d'un niveau en cas de succès
Conditions par niveau :
- Niveau 1→2 : 1 joueur, 1 linemate
- Niveau 2→3 : 2 joueurs, 1 linemate, 1 deraumere, 1 sibur
- Niveau 3→4 : 2 joueurs, 2 linemate, 1 sibur, 2 phiras
- Niveau 4→5 : 4 joueurs, 1 linemate, 1 deraumere, 2 sibur, 1 phiras
- Niveau 5→6 : 4 joueurs, 1 linemate, 2 deraumere, 1 sibur, 3 mendiane
- Niveau 6→7 : 6 joueurs, 1 linemate, 2 deraumere, 3 sibur, 1 phiras
- Niveau 7→8 : 6 joueurs, 2 linemate, 2 deraumere, 2 sibur, 2 mendiane, 2 phiras, 1 thystame
Client → Serveur : Fork\n
Serveur → Client : ok\n | ko\n
Serveur → GUI : pfk #n\n
Serveur → GUI : enw #e #n X Y\n
- Fonction : Pond un œuf pour permettre une nouvelle connexion
- Délai : 42/freq unités de temps
- Effet : Crée un œuf à la position actuelle
Client → Serveur : Eject\n
Serveur → Client : ok\n | ko\n
Serveur → Clients éjectés : eject: direction\n
Serveur → GUI : pex #n\n
Serveur → GUI : ppo #n X Y O\n (pour chaque joueur déplacé)
Serveur → GUI : edi #e\n (pour chaque œuf détruit)
- Fonction : Éjecte tous les joueurs et détruit tous les œufs de la case
- Délai : 7/freq unités de temps
- Effet : Déplace les joueurs d'une case dans la direction de l'éjecteur
Client → Serveur : Broadcast Hello world\n
Serveur → Client : ok\n | ko\n
Serveur → Tous les clients IA : message direction, Hello world\n
Serveur → GUI : pbc #n Hello world\n
- Fonction : Diffuse un message à tous les joueurs avec indication de direction
- Délai : 7/freq unités de temps
- Direction : Calculée selon la position relative (1-8, 0=même case)
GUI → Serveur : msz\n
Serveur → GUI : msz X Y\n
- Fonction : Demande la taille de la carte
GUI → Serveur : bct X Y\n
Serveur → GUI : bct X Y q0 q1 q2 q3 q4 q5 q6\n
- Fonction : Demande le contenu d'une case spécifique
GUI → Serveur : mct\n
Serveur → GUI : bct X Y q0 q1 q2 q3 q4 q5 q6\n (pour chaque case)
- Fonction : Demande le contenu de toute la carte
GUI → Serveur : tna\n
Serveur → GUI : tna N\n (pour chaque équipe)
- Fonction : Demande les noms de toutes les équipes
GUI → Serveur : ppo #42\n
Serveur → GUI : ppo #42 X Y O\n
- Fonction : Demande la position d'un joueur spécifique
GUI → Serveur : plv #42\n
Serveur → GUI : plv #42 L\n
- Fonction : Demande le niveau d'un joueur spécifique
GUI → Serveur : pin #42\n
Serveur → GUI : pin #42 X Y q0 q1 q2 q3 q4 q5 q6\n
- Fonction : Demande l'inventaire d'un joueur spécifique
GUI → Serveur : sgt\n
Serveur → GUI : sgt T\n
- Fonction : Demande la fréquence actuelle du serveur
GUI → Serveur : sst 100\n
Serveur → GUI : sst 100\n
- Fonction : Modifie la fréquence du serveur
pnw #n X Y O L N\n
- Événement : Connexion d'un nouveau joueur
- Paramètres : ID, position, orientation, niveau, équipe
ppo #n X Y O\n
- Événement : Déplacement ou rotation d'un joueur
- Déclencheurs : Forward, Right, Left, Eject
plv #n L\n
- Événement : Montée de niveau d'un joueur
- Déclencheur : Incantation réussie
pin #n X Y q0 q1 q2 q3 q4 q5 q6\n
- Événement : Modification de l'inventaire
- Déclencheurs : Take, Set, connexion initiale
pdi #n\n
- Événement : Mort d'un joueur par manque de nourriture
pex #n\n
- Événement : Un joueur utilise la commande Eject
pbc #n M\n
- Événement : Un joueur diffuse un message
pgt #n i\n
- Événement : Un joueur ramasse une ressource
- Déclencheur : Take réussi
pdr #n i\n
- Événement : Un joueur dépose une ressource
- Déclencheur : Set réussi
pic X Y L #n #n...\n
- Événement : Début d'une incantation
- Paramètres : Position, niveau, IDs des participants
pie X Y R\n
- Événement : Fin d'une incantation
- Résultat : 1=succès, 0=échec
pfk #n\n
- Événement : Un joueur pond un œuf
enw #e #n X Y\n
- Événement : Un œuf est créé
- Paramètres : ID œuf, ID joueur parent, position
ebo #e\n
- Événement : Un œuf éclot (nouvelle connexion)
edi #e\n
- Événement : Un œuf est détruit (par Eject)
seg N\n
- Événement : Fin de partie
- Paramètre : Nom de l'équipe gagnante
smg M\n
- Événement : Message informatif du serveur
suc\n
- Cause : Commande non reconnue par le serveur
sbp\n
- Cause : Paramètres de commande invalides
ko\n
- Causes :
- Ressource indisponible
- Action impossible
- Conditions non remplies
- Capacité : 10 commandes maximum par joueur
- Exécution : Séquentielle selon les délais
- Rejet : Si file pleine, commande rejetée avec
ko\n
- Mouvement (Forward, Right, Left) : 7/freq
- Interaction (Look, Take, Set, Eject, Broadcast) : 7/freq
- Information (Inventory, Connect_nbr, Player_nbr, Player_pos) : 1/freq
- Spécial (Fork) : 42/freq
- Incantation : 300/freq
Avec une fréquence de 100 Hz :
- Forward : 7/100 = 0.07 secondes
- Incantation : 300/100 = 3 secondes
- Client se connecte au serveur
- Serveur envoie
WELCOME\n - Client envoie le nom de l'équipe
- Serveur répond avec le nombre de places disponibles et la taille de la carte
- Serveur notifie la GUI avec
pnw
- Client IA :
Forward\n - Serveur : Ajoute à la file d'attente
- Serveur : Exécute après délai
- Serveur → Client :
ok\n - Serveur → GUI :
ppo #n X Y O\n
- Client IA :
Incantation\n - Serveur : Vérifie les conditions
- Serveur → GUI :
pic X Y L #n...\n - Serveur : Attend 300/freq unités de temps
- Serveur : Exécute ou échoue
- Serveur → Participants :
Elevation underway Current level: L\nouko\n - Serveur → GUI :
pie X Y R\n
Ce protocole assure une communication robuste et synchronisée entre tous les composants du système Zappy.