diff --git a/LaTex/doc_technique/doc_technique.tex b/LaTex/doc_technique/doc_technique.tex index bd8d72d01abd2f1e7c0a6fc65b1dc0ba5c798b83..9a857ae5bb1099019f4707e7420f94df5d9519a6 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}