From 7e72c4d2e2103881f74fa4565d27000738b8ffda Mon Sep 17 00:00:00 2001
From: Francesco Bariatti <francesco.bariatti@insa-rennes.fr>
Date: Fri, 27 May 2016 12:56:02 +0200
Subject: [PATCH] DocTech: interface graphique

---
 LaTex/doc_technique/doc_technique.tex | 37 +++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/LaTex/doc_technique/doc_technique.tex b/LaTex/doc_technique/doc_technique.tex
index bd8d72d..9a857ae 100644
--- a/LaTex/doc_technique/doc_technique.tex
+++ b/LaTex/doc_technique/doc_technique.tex
@@ -73,7 +73,40 @@ La fonction \verb|move_to_string| est importante, car pour comprendre le coup qu
 \subsection{Notre implémentation: le Jeu du Pingouin}
 bitboards, pingouins sur 32 bits, calculs de +8 -8 selon la direction ...
 
+\newpage
 \section{L'interface graphique}
-Modele MVC. Le controlleur fait tout. Le modele stocke juste des données. La view a un lien vers le modele et se mets à jour quand le controller le dit.
-	
+Tous les fichiers dont on va parler ici se trouvent dans le dossier \verb|GUI/src|. L'interface graphique est développée en Java 1.8 (elle utilise des lambda-expressions) et Javafx
+
+L'interface graphique est codée suivant un modèle MVC (Modèle - Vue - Contrôleur)
+
+\paragraph{Le modèle} Le modèle sert à stocker toutes les données du jeu. Les classes sont utilisées comme conteneurs pour stocker les valeurs nécessaires au jeu.
+
+La classe principale est la classe \verb|GameState| qui contient la plupart des informations relatives au jeu. Les valeurs sont stockés en forme de bitboards et on utilise des opérations
+binaires pour les extraire quand nécessaire.
+
+Une méthode permet de mettre à jour un object \verb|GameState| à partir du \textsc{json} renvoyé par le \textsc{mcts}.
+
+\paragraph{La vue} Le visuel de l'application est décrit dans le fichier \verb|view.fxml|, les différentes cases sont définies avec un positionnement absolu et
+ont des id qui vont de \verb|tile0| à \verb|tile59|. Les autres éléments sont aussi positionnés de façon absolue.
+
+Ce n'est pas une façon de faire très propre et on s'en excuse, mais l'interface graphique étant pas l'objectif de notre projet on y a alloué moins de temps.
+
+\paragraph{Le contrôleur} Le contrôleur s'occupe de faire le lien entre le modèle, la vue et le programme en C++. Pour ce faire à l'initialisation on exécute l'IA
+comme sous-processus et on lance un \verb|UpdateThread| qui va s'occuper de modifier le modèle à chaque fois que le sous-processus va écrire quelque chose dans sa sortie standard, et ensuite notifier la vue
+de se mettre à jour aussi.
+
+La classe \verb|Controller| est la classe ``principale'' du programme: elle s'occupe de créer le plateau, lancer la partie, écouter les clicks du joueur à travers des \verb|EventHandler|, et gérer la fin de partie (sous demande de l'\verb|UpdateThread|).
+
+Quand l'interface graphique est fermée (à n'importe quel moment) le sous-processus est tué. Ceci se fait grâce à la fonction Java
+\begin{verbatim}
+	Runtime.getRuntime().addShutdownHook(new Thread()
+	{
+	    public void run()
+	    {
+	        gameProcess.destroy();
+	    }
+	});
+\end{verbatim}
+
+
 \end{document}
-- 
GitLab