Greffon pour les IA pour se brancher à un serveur IAtaa.
Des structures de données sont prévues pour les échanges entre la plateforme et l'IA.
Elles suivent les conventions suivantes :
PLAYER {
J1, // PLAYER 1, blanc
J2, // PLAYER 2, noir
DRAW // Aucun des joueurs
}
BOARD_SQUARE_TYPE {
EMPTY, // '0'
BLACK_PAWN, // '1'
BLACK_DRAUGHT, // '2'
WHITE_PAWN, // '3'
WHITE_DRAUGHT // '4'
}
DIFFICULTY {
EASY, // Facile
MEDIUM, // Moyen
HARD // Difficile
}
CODE_ENDGAME {
TIMEOUT, // Timeout
SURRENDER, // Rédition
CLASSICAL // Classique
}
STATUS {
BUSY, // Occupé
AVAILABLE // Disponible
}
BOARD {
50 characters array // Plateau de jeu
}
Le greffon permet de proposer un certain nombre de services REST.
Permet d'accéder à l'état de l'IA.
Input : {"token": token}
Output : {"token": token, "status": STATUS }
Error :
200 -> OK
401 -> "Invalid token."
400 -> "Invalid arguments."
Indique à l'IA le début d'une partie, récupère un ID de partie.
Input : {"token":token, "difficulty": DIFFICULTY, "player": PLAYER}
Output : {"token": token, "status": STATUS, "game_id": token de partie}
Error :
200 -> OK
401 -> "Invalid token."
400 -> "Invalid arguments."
Demande à l'IA de jouer un coup et le récupère (dans "board").
Input : {"token":token, "difficulty": DIFFICULTY, "player": PLAYER, "board": BOARD}
Output : {"token":token, "difficulty": DIFFICULTY, "player": PLAYER, "board": BOARD}
Error :
200 -> OK
401 -> "Invalid token."
400 -> "Invalid arguments."
Indique à l'IA la fin d'une partie.
Input : {"token": token, "winner": PLAYER, "code": CODE_ENDGAME}
Output : {"token": token, "status": STATUS }
Error :
200 -> OK
401 -> "Invalid token."
400 -> "Invalid arguments."
Pistache est un framework moderne et élégant HTTP et REST pour C++.
Ses sources se trouvent à https://github.com/oktal/pistache.
Sa documentation se trouve http://pistache.io.
Pour l'installer, il suffit de suivre les étapes situées à http://pistache.io/quickstart#installing-pistache. Il n'est compatible qu'avec les systèmes Unix, excepté MacOS.
Rapidjson est un parser et un generateur JSON pour C++.
Ses source se trouvent à https://github.com/miloyip/rapidjson.
Il ne nécessite pas d'installation puisqu'il est header only et intégré à ce projet.
La grande majorité du code doit rester telle quelle.
Vous devez compléter au minimum gamePlay (de Beach.cpp) et les
méthodes de Tool::Converter pour que tout soit fonctionnel.
Vous trouverez ci-dessous la liste de toutes les méthodes paramétrables.
Dans Beach.cpp :
- La méthode
newGameStartedpeut être paramétrée à votre guise. Elle est appelée automatiquement au démarrage d'une nouvelle partie.
Elle reçoit en paramètre la difficulté de la nouvelle partie ainsi que le joueur que votre IA incarnera. - La méthode
gamePlaydoit contenir l'appel à votre IA pour décider du prochain coup.
Elle est décomposée en 3 étapes :- Conversion du format d'entrée vers votre format interne (
Tool::Converter::convertToInternalFormat(board)) - Calcul du prochain coup
- Conversion du coup calculé de votre format interne vers le format de sortie (
Tool::Converter::convertToExternalFormat(calculatedMove))
Elle reçoit en paramètre l'ID de la partie sur laquelle jouer, la difficulté demandée, le joueur qui doit jouer et l'état du plateau de jeu.
- Conversion du format d'entrée vers votre format interne (
- La méthode
gameEndedest appelée automatiquement lorsqu'une partie se termine.
Elle reçoit en paramètre l'ID de la partie terminée, le joueur qui a gagné et le code de fin de partie.
Dans Converter.h et Converter.cpp :
- La méthode
convertToInternalFormatest utilisée pour convertir un plateau de jeu depuis le format externe (un tableau de 50 cases deBoardSquareType) vers votre format interne, compréhensible pour l'IA.
Pensez à changer le type de retour devoidvers votre type interne. - La méthode
convertToExternalFormatpermet l'inverse : elle convertit un plateau de jeu depuis votre format interne vers le format externe.
Pensez donc à prendre en paramètre une référence constante vers votre format interne, pour ensuite la convertir vers un tableau de 50 cases deBoardSquareType.
Un CMakeList se trouve dans ce projet. Le seul ajout notable est la dépendance à net_static et pthread, nécessaires pour Pistache.
Puisque le code de ce projet sera intégré à votre projet, il est nécessaire de le compiler en même temps que celui de votre IA.