@@ -39,10 +39,40 @@ Toutes les parties sont licenciées par une licence MIT, avec attribution aux au
Dans l'interface graphique on utilise une librairie JSON pour java, TODO: license lib json
\newpage
\section{Interface game}
Comment implementer un jeu (fonction par fonction). regarder dans les fichiers texte dans le dossier doc, il y a un markdown qui explique.
\section{Implémentation d'un jeu}
\subsection{Implémentation d'un nouveau jeu: l'interface game}
Tous les fichiers dont on va parler ici se trouvent dans le dossier \verb|AI/src|
\section{L'implementation du jeu des pingouins}
\paragraph*{}Un jeu jouable par le MCTS n'est rien d'autre qu'une classe qui implémente l'interface \verb|game|, définie dans \verb|game/game.hpp|.
Une fois la nouvelle classe codée, il suffit de changer une ligne dans le fichier \verb|main/main.cpp| pour lancer le jeu. Deux façons sont possibles pour lancer le jeu:
\begin{itemize}
\item\verb|game::run_test_two_players_game(game::MaClasse());| pour lancer un test à deux joueur: le MCTS ne va pas se lancer.
\item\verb|mcts::run_test_mcts_two_players(game::MaClasse());| pour lancer une partie conte le MCTS
\end{itemize}
\paragraph*{} Dans l'interface un joueur est représenté par un nombre sur 8bits (le premier joueur est le joueur 0, le deuxième le joueur 1) et chaque fin de partie
a une valeur qui est utilisée dans la construction de l'arbre de décision (classiquement 1 si le MCTS gagne, -1 s'il perd)
\paragraph*{} Pour implémenter l'interface, il faut implémenter toutes ses fonctions. Elles ne sont pas toutes indispensables ou dépendantes du jeu, donc une partie
d'entre elles pourront être copiées du fichier \verb|penguin.cpp|. Pour les autres on va en donner une liste avec des explications ci-dessous
\paragraph*{}
\begin{itemize}
\item\verb|bool end_of_game()| Indique si le jeu est terminé. Peu importe le résultat.
\item\verb|int value (uint8 player)| La valeur pour le joueur \verb|player| dans l'état actuel du jeu.
\item\verb|bool won/lost/draw(uint8 player)| Si le joueur \verb|player| a gagné / perdu / fait égalité.
\item\verb|uint8 current_player()| Le jouer qui doit jouer actuellement.
\item\verb|uint16 number_of_moves()| Le nombre total de coups que le joueur actuel peut jouer.
\item\verb|play(uint16 move)| Joue le coup numéro \verb|mouve| pour le joueur actuel.
\item\verb|string player_to_string(uint8 player)| Représentation d'un joueur de façon compréhensible pour un humain.
\item\verb|string move_to_string(uint16 m)| Représentation d'un coup jouable de façon compréhensible pour un humain.
\item\verb|string to_string()| Représentation de l'état actuel du jeu de façon compréhensible pour un humain.
\end{itemize}
La fonction \verb|move_to_string| est importante, car pour comprendre le coup qu'un joueur humain veut jouer la fonction inverse est utilisée (les différents coups possibles sont mapés).
\paragraph*{} Il ne faut pas oublier d'ajouter les nouveaux fichiers dans le makefile!
\subsection{Notre implémentation: le Jeu du Pingouin}
bitboards, pingouins sur 32 bits, calculs de +8 -8 selon la direction ...