From 636353fb50e0cbcc91c8dd9a5a8ac52f87012739 Mon Sep 17 00:00:00 2001 From: Francesco Bariatti <francesco.bariatti@insa-rennes.fr> Date: Tue, 24 May 2016 11:32:25 +0200 Subject: [PATCH] =?UTF-8?q?DocTech:=20impl=C3=A9mentation=20d'un=20nouveau?= =?UTF-8?q?=20jeu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LaTex/doc_technique/doc_technique.tex | 38 ++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/LaTex/doc_technique/doc_technique.tex b/LaTex/doc_technique/doc_technique.tex index 7fcbac7..a3eb321 100644 --- a/LaTex/doc_technique/doc_technique.tex +++ b/LaTex/doc_technique/doc_technique.tex @@ -1,4 +1,4 @@ -\documentclass{article} +\documentclass[a4paper]{article} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PACKAGES @@ -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 ... \section{L'interface graphique} -- GitLab