PROTOCOLE : Communication bot interface - medrimonia/PFA-Nethack GitHub Wiki

Tous les détails de la communication entre les bots et l'interface devront être spécifiés dans ce document

##Mode de communication Toutes les communications de données entre l'interface et le bot seront effectuées à l'aide d'une socket unix nommée "/tmp/mmsock".

#De l'interface au bot

Début/fin de transmission

À chaque tour, l'information envoyée par l'interface commence par l'envoi d'un caractère 'S' et se terminera par un caractère 'E'

##Générique Entre la caractère de début du tour et le caractère de fin de tour, différents type de données pourront être transmises, chaque message commencera par un caractère désignant le type de contenu transmis. Certains message auront une taille prédéfinie tandis que d'autres comporteront un caractère de fin.

##Variables transmissibles

###Graine aléatoire (longueur indéterminée)

Le début de transmission doit inclure la graine de génération aléatoire. Le bot doit garantir le déterminisme de son exécution pour une graine donnée. L'interface envoie donc au premier tour la graine aléatoire

  • caractère de début : 's'
  • message : entier écrit sous forme de chiffres,(print via %d)
  • caractère de fin : 'e'

###Taille de la carte : Les dimensions de la carte sont transmises par l'interface au bot lors de l'entrée dans un niveau. Les deux dimensions sont transmises par les noms de variable suivants :

  • caractère de début: 'm'
  • width : byte suivant
  • height : byte suivant

###ACTION_RESULT Cette section est désactivée, du moins de manière temporaire

###Découverte de case La découverte d'une nouvelle case ou le changement de contenu d'une case est spécifié ainsi.

  • caractère de début : 'g'
  • position_y : byte suivant (casté en char)
  • position_x : byte suivant (casté en char)
  • glyph : byte suivant

Les possibilités de case sont les suivantes :

' ' -> inconnu
'.' -> vide
'#' -> couloir
'@' -> emplacement du personnage
'+' -> porte fermée
'-' -> paroi horizontale ou porte ouverte sur paroi verticale
'|' -> paroi verticale ou porte ouverte sur paroi horizontale
'<' -> escalier montant
'>' -> escalier descendant
'$' -> des pièces d'or

Du bot à l'interface

À chaque tour le bot peut accomplir une et une seule action. La plupart des actions se transmettent en un seul caractère, cependant certaines peuvent en prendre plus d'un. Le bot est libre d'inscrire autant de caractère qu'il le souhaite par tour, cependant, ceux-ci seront considérés comme les ordres des prochains tours dans ce cas.

##Directions La plupart des actions font référence à une direction, le caractère associé à chaque direction est défini ici

          y  k  u
           \ | / 
          h- . -l
           / | \ 
          b  j  n

          <  up
          >  down
          .  direct at yourself

haut -> 'k'
bas -> 'j'
gauche -> 'h'
droit -> 'l'
diagonale haut-gauche -> 'y'
diagonale haut-droite -> 'u'
diagonale bas-gauche -> 'b'
diagonale bas-droite -> 'n'
sur place -> '.'
étage supérieur -> '<'
étage inférieur -> '>'

##Actions possibles représente le caractère associé à la direction choisie Les actions principales sont les suivantes :

  • Déplacement
    • premier et unique byte :
  • Lancer une recherche : 's'
  • ouvrir une porte :
    • premier byte : 'o'
    • deuxième byte :
  • Attaquer : inutile pour les modes actuels
  • Manger : inutile pour les modes actuels
  • Boire : inutile pour les modes actuels
  • Lire : inutile pour les modes actuels
  • ... à compléter plus tard éventuellement

##Exemple de fonctionnement À refaire éventuellement

##Chargés du protocole

  • David Bitonneau
  • Ludovic Hofer
⚠️ **GitHub.com Fallback** ⚠️