@@ -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