Parser de fichier + Consignes de base
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing

This commit is contained in:
Debucquoy Anthony 2023-05-18 11:37:12 +02:00
parent ff5ed0c85f
commit e6853ab3d3
Signed by: tonitch
GPG Key ID: A78D6421F083D42E
2 changed files with 47 additions and 8 deletions

Binary file not shown.

View File

@ -3,6 +3,7 @@
\usepackage{amsmath}
\usepackage{listings}
\usepackage{tikz}
\usepackage{csquotes}
\begin{document}
@ -25,30 +26,48 @@ Grace aux objectifs fixés par nos enseignants, nous sommes - je le pense - main
Il va sans dire que comme pour tout projets, notre chemin a été semé d'embuches. En l'occurence, nous souhaitons faire part de l'abandon d'un de nos membre. Eddy Jiofak qui souhaite se réorienter.
Nous lui souhaitons une bonne reconversion.
\section*{Objectifs}
Voici l'objectif fixé par nos enseignants. (document de consignes)
\begin{displayquote}
Le but final de ce projet est de réaliser une application graphique en Java permettant de
jouer au jeu "Cats Organized Neatly". Ce jeu est un jeu de type "puzzle" où le joueur doit
placer des pièces de formes différentes pour combler l'aire de jeu. L'application devra permettre
de sauvegarder et charger une partie et de créer des niveaux automatiquement.
\end{displayquote}
\newpage
\section{Organisation}
Nous nous sommes régulièrement réunis pour savoir la direction que prendrait le projet.
Durant ces réunions, nous prenions note des idées émises. Puis celles-ci ont été mise au propre sur un blog auquel nous avons accés dans le but de retrouver facilement les informations voulues.
Lors de nos rasemblement pour le projet, toutes les idées émises se sont retrouvés sur un blog afin de pouvoir y accéder de manière efficace.
Ce blog nous sert également à garder une trace de l'évolution du projet.
\subsection{Choix}
\begin{itemize}
\item{Nous utiliserons le VCS git pour garder une trace de l'avancement du projet.}
\item{le VCS git pour garder une trace de l'avancement du projet. Avec comme remote une instance privée de gitea nous permettant de vérifier les MR/PR plus efficacement.}
\item{Une instance de DroneCI permettant de vérifier que le projet serait toujour compilable et que les tests ne seraient pas raté sans que nous nous en rendions compte.}
\item{Javafx, comme recommendé par nos enseignants.}
\item{Pieces les Niveaux sont stockées sous forme de matrice de booléen}
\item{Un parser de fichiers efficace et donnant des fichier légers.}
\end{itemize}
\subsubsection*{Shapes}
Les pieces comme le tableau sont représentés par une matrice de boolean \verb|boolean[][]|.
Les pieces comme le tableau sont représentés par une matrice de booléen \verb|boolean[][]|.
Nous avons donc une classe \verb|shape|, parent de \verb|Map| et de \verb|Piece| dans lequel nous stockons notre matrice.
Ensuite, \verb|Map| Contient une liste de \verb|Piece| et ces pièces contiennent une position représentée par un \verb|Vec2|.
Cette position est la position du caré supérieur gauche
Ensuite, \verb|Map| Contient une liste de \verb|Piece|. Ces pièces contiennent une position représentée par la classe\verb|Vec2|.
Cette position est la position du caré supérieur gauche dans la \verb|Map|.
Avec toutes ces informations nous avons le nécéssaire pour le moteur du jeu.
Avec cette infrastructure, il est facilement possible de manipuler la carte et les pièces à notre guise dans le code. Il nous suffit de faire corespondre l'affichage avec
Il est facilement possible de manipuler la carte et les pièces. Il nous suffit alors de faire corespondre l'affichage avec
ces différentes classe. Ce qui est entrepris par la classe \verb|GameUI|.
Le tout est géré par la classe Controller qui permet de choisir entre l'affichage d'un menu ou d'une partie en cours.
Le tout est géré par la classe \verb|Controller| qui permet de choisir entre l'affichage d'un menu ou d'une partie en cours.
\subsection{Difficultés}
@ -64,6 +83,8 @@ Nous voulions que ce parser accomplisse les objectifs suivants:
\item{Il sera possible d'enregistrer l'état d'une partie en cours.}
\end{itemize}
Ce parser est implémenté par la classe \verb|BinaryParser|.
\subsubsection*{spécification}
\begin{description}
@ -116,6 +137,24 @@ avec les pieces
\draw[step=1cm,gray] (0.5, -2.5) grid (13.5, 4.5);
\end{tikzpicture}
En plus de ce parser, et dans le cas où ce premier parser ne serait pas capable de stocker certaine carte (par exemple si une piece mesure plus de 15x15).
Nous avons également implémenté un parser trés simple en utilisant l'interface \verb|Serialize| de java. Ce parser est implémenté et fonctionnel,
mais n'est pas utilisé dans le projet à l'heure actuelle.
ces deux parseurs implémentent l'interface \verb|FileParser| affin de pouvoir utiliser l'un où l'autre parser.
Finalement, La classe \verb|FileParserFactory| permet une utilisation simple des parseurs. Celle-ci contient deux fonction statique.
\begin{itemize}
\item{Map loadMapFromFile(File)}
permet de retourner la Map d'un fichier chargé.
\item{void saveFileFromMap(File, Map)}
permet de sauvegarder une map dans un fichier.
\end{itemize}
Dans le cas d'une sauvegarde ou d'un chargement, le parser est choisi en fonction de l'extension de fichier ('.level', '.slevel', .'serialized', '.sserialized').
L'avantage de ce system est que nous pouvons facilement ajouter d'autres parser de fichier dans le futurs.
\subsection{generateur de niveaux}
Le generateur de niveau permet 3 niveaux de difficultés différents.