IA ↔ Serveur¶
Une fois le handshake terminé, le drone pilote son joueur à
l'aide de 12 commandes. Le serveur les met en file et les exécute après un
délai exprimé en unités de temps (voir Vue d'ensemble). Les
réponses arrivent dans l'ordre d'envoi (FIFO). Rappel : au plus 10 commandes
peuvent être en vol simultanément, sinon le serveur répond ko.
Sources : server/srcs/protocol/CommandParser.cpp, server/srcs/commands/Cmd*,
ai/src/protocol/commands.py.
Les 12 commandes¶
| Commande | Format envoyé | Réponse serveur | Délai (u.t.) | Exemple |
|---|---|---|---|---|
| Avancer | Forward |
ok |
7 | Forward → ok |
| Tourner à droite | Right |
ok |
7 | Right → ok |
| Tourner à gauche | Left |
ok |
7 | Left → ok |
| Regarder | Look |
[t0, t1, ...] |
7 | voir ci-dessous |
| Inventaire | Inventory |
[food n, linemate n, ...] |
1 | voir ci-dessous |
| Émettre un son | Broadcast <texte> |
ok |
7 | Broadcast hello → ok |
| Slots libres | Connect_nbr |
<n> |
0 | Connect_nbr → 3 |
| Pondre un œuf | Fork |
ok |
42 | Fork → ok |
| Expulser | Eject |
ok / ko |
7 | Eject → ok |
| Ramasser | Take <objet> |
ok / ko |
7 | Take linemate → ok |
| Déposer | Set <objet> |
ok / ko |
7 | Set food → ok |
| Incantation | Incantation |
Elevation underway puis Current level: N (ou ko) |
300 | voir ci-dessous |
(Délais issus des getDelay() dans server/srcs/commands/Cmd*.hpp.)
Détails
Connect_nbrrenvoie le nombre d'œufs encore disponibles dans l'équipe du drone (slots libres), avec un délai nul (server/srcs/core/AICommandDispatcher.cpp).Take <objet>/Set <objet>prennent un nom de ressource :food,linemate,deraumere,sibur,mendiane,phiras,thystame.- Une commande non reconnue, ou avec un argument incorrect (présent alors
qu'il ne devrait pas, ou inversement), reçoit
ko.
Sortie de Look¶
La réponse est une liste de tuiles entre crochets, séparées par des virgules. Le contenu d'une tuile liste ses objets séparés par des espaces :
- le jeton
playerest répété une fois par joueur présent ; - puis chaque ressource est répétée autant de fois qu'il y en a sur la tuile,
dans l'ordre
food,linemate,deraumere,sibur,mendiane,phiras,thystame.
Une tuile vide est représentée par une chaîne vide. L'ordre des tuiles suit le
cône de vision : tuile 0 = la tuile du drone, puis les rangées de profondeur
croissante (2 × profondeur + 1 tuiles par rangée, de gauche à droite selon
l'orientation). La profondeur maximale vaut le niveau du joueur.
(server/srcs/algorithms/VisionAlgo.cpp.)
Ici la tuile 0 contient le drone, la tuile 1 une linemate, la tuile 2 est vide, la tuile 3 contient de la nourriture, etc.
Sortie de Inventory¶
Liste nom quantité séparée par des virgules, entre crochets.
La nourriture est exprimée en unités de temps
Dans Inventory, la quantité de food est multipliée par 126
(food unités × 126), ce qui correspond au nombre d'unités de temps de vie
restantes (server/srcs/commands/CmdInventory.cpp). Les autres ressources
sont renvoyées en quantité brute. À noter : l'événement GUI pin renvoie au
contraire la quantité brute de food — divergence documentée dans
Limitations connues.
C -> S : Inventory
S -> C : [food 1260, linemate 0, deraumere 0, sibur 0, mendiane 0, phiras 0, thystame 0]
food 1260 correspond ici à 10 unités de nourriture (10 × 126).
Exemple Broadcast¶
Le texte peut contenir des espaces ; il est diffusé tel quel aux autres joueurs
(voir ci-dessous) et au GUI via pbc.
Messages non sollicités (Serveur → IA)¶
En plus des réponses aux commandes, le serveur peut envoyer à tout moment des messages spontanés :
| Message | Format | Signification |
|---|---|---|
| Broadcast reçu | message K, <texte> |
Un autre joueur a émis un son ; K (0..8) est la direction d'arrivée relative à l'orientation du drone (0 = même tuile). |
| Expulsion subie | eject: K |
Le drone a été poussé d'une tuile ; K indique la direction de la poussée. |
| Mort | dead |
Le drone est mort de faim ; la connexion va être fermée. |
(server/srcs/algorithms/BroadcastAlgo.cpp,
server/srcs/core/Server.cpp.)
Séquence d'incantation¶
Lorsqu'un drone lance Incantation, le serveur répond d'abord
Elevation underway, puis — après le délai de 300 unités de temps et une
re-validation des conditions — envoie à chaque participant Current level: N
(le nouveau niveau) en cas de succès, ou ko en cas d'échec
(server/srcs/core/IncantationHandler.cpp).
C -> S : Incantation
S -> C : Elevation underway
... (300 unités de temps plus tard)
S -> C : Current level: 2
Parsing des broadcasts non implémenté côté IA
Côté IA, parse_broadcast lève NotImplementedError : les messages
message K, <texte> reçus ne sont pas exploités par la stratégie
actuelle. De même, le canal d'équipe chiffré (ai/src/team/) n'est pas
branché. Voir Limitations connues et
IA > Couche protocole. Référence :
ai/src/protocol/parser.py.