Corriger qlq faute vu sur relecture
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing

This commit is contained in:
Mat 2023-05-19 23:28:27 +02:00
parent 2d27786e48
commit 229782c772

View File

@ -20,9 +20,9 @@
\section*{Introduction} \section*{Introduction}
Lors de ce deuxième quadrimèstre, le projet Informatique proposé par notre université fut une partie intégrante de notre emploi du temps. Lors de ce deuxième quadrimèstre, le projet Informatique proposé par notre université fut partie intégrante de notre emploi du temps.
Régulièrement nous nous sommes rassemblés pour nous organiser et trouver une direction dans laquelle nous voulions voir notre projet évoluer. Régulièrement nous nous sommes rassemblés pour nous organiser et trouver une direction dans laquelle nous voulions voir notre projet évoluer.
Grace aux objectifs fixés par nos enseignants, nous sommes - je le pense - maintenant plus apte à nous confronter à ce genre d'objectifs. Tant au niveau personel qu'en tant que groupe. Grâce aux objectifs fixés par nos enseignants, nous sommes - je le pense - maintenant plus apte à nous confronter à ce genre d'objectifs. Tant au niveau personel qu'en tant que groupe.
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. 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. Nous lui souhaitons une bonne reconversion.
@ -43,15 +43,15 @@ de sauvegarder et charger une partie et de créer des niveaux automatiquement.
\section{Organisation} \section{Organisation}
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. Lors de nos rassemblement 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. Ce blog nous sert également à garder une trace de l'évolution du projet.
\subsection{Choix} \subsection{Choix}
\begin{itemize} \begin{itemize}
\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{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 soit toujour compilable et que les tests ne soient pas ratés sans que nous nous en rendions compte.} \item{Une instance de DroneCI permettant de vérifier que le projet soit toujours compilable et que les tests ne soient pas ratés sans que nous nous en rendions compte.}
\item{Javafx, comme recommendé par nos enseignants.} \item{Javafx, comme recommandé par nos enseignants.}
\item{Les pièces et niveaux sont stockées sous forme de matrice de booléen} \item{Les pièces et niveaux sont stockées sous forme de matrice de booléen}
\item{Un parser de fichiers efficace et donnant des fichier légers.} \item{Un parser de fichiers efficace et donnant des fichier légers.}
\end{itemize} \end{itemize}
@ -61,11 +61,11 @@ Ce blog nous sert également à garder une trace de l'évolution du projet.
Les pièces ainsi que la carte sont représentés par une matrice de booléen \verb|boolean[][]|. Les pièces ainsi que la carte 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. 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|. Ces pièces contiennent une position représentée par la classe\verb|Vec2|. 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|. Cette position est la position du carré supérieur gauche dans la \verb|Map|.
Avec toutes ces informations nous avons le nécéssaire pour le moteur du jeu. Avec toutes ces informations nous avons le nécessaire pour le moteur du jeu.
Il est facilement possible de manipuler la carte et les pièces. Il nous suffit alors de faire corespondre l'affichage avec Il est facilement possible de manipuler la carte et les pièces. Il nous suffit alors de faire correspondre l'affichage avec
ces différentes classe. Ce qui est entrepris par la classe \verb|GameUI|. ces différentes classes. Ce qui est entrepris par la classe \verb|GameUI|.
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. 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.
@ -79,7 +79,7 @@ Pour la rétention des niveaux, plusieurs possibilités s'offraient à nous. Nou
Nous voulions que ce parser accomplisse les objectifs suivants: Nous voulions que ce parser accomplisse les objectifs suivants:
\begin{itemize} \begin{itemize}
\item{Les données du niveau seront encapsulées dans un header/footer pour laisser la possibilité d'enregistrer plus d'informations (images/musiques) dans un seul fichier dans le futur.} \item{Les données du niveau seront encapsulées dans un header/footer pour laisser la possibilité d'enregistrer plus d'informations (images/musiques) dans un seul fichier dans le futur.}
\item{La taille du fichier devra être aussi petite que possible, tout en gardant les informations nécéssaire au bon fonctionnement du jeu.} \item{La taille du fichier devra être aussi petite que possible, tout en gardant les informations nécessaire au bon fonctionnement du jeu.}
\item{Il sera possible d'enregistrer l'état d'une partie en cours.} \item{Il sera possible d'enregistrer l'état d'une partie en cours.}
\end{itemize} \end{itemize}
@ -95,12 +95,12 @@ Ce parser est implémenté par la classe \verb|BinaryParser|.
Nous pouvons déterminer ce nombre grace à Nous pouvons déterminer ce nombre grace à
$$\frac{\text{largeur} * \text{hauteur } (+1 \text{ si multiple de } 8)}{8}$$ $$\frac{\text{largeur} * \text{hauteur } (+1 \text{ si multiple de } 8)}{8}$$
en division entière.} en division entière.}
\item[Nombre de pièces]{ L'octet suivant l' (les) octet(s) qui forme(nt) la carte represente le nombre de pièces} \item[Nombre de pièce]{ L' (les) octet(s) qui forme(nt) la carte représente le nombre de pièce}
\item[Pour chaques pièces]{ \item[Pour chaques pièces]{
\ \
\begin{description} \begin{description}
\item[Taille de la pièce]{La taille est représentée sur un seul octet sous forme de nibble\footnote{https://en.wikipedia.org/wiki/Nibble}. La première partie du nibble est la largeur. La seconde partie du nibble est la hauteur } \item[Taille de la pièce]{La taille est représentée sur un seul octet sous forme de nibble\footnote{https://en.wikipedia.org/wiki/Nibble}. La première partie du nibble est la largeur. La seconde partie du nibble est la hauteur }
\item[Forme de la pièce]{ Chaques cellules de la pièce est représenté par un 1 ou un 0. la manière de le représenter et exactement la même que pour la forme de la carte } \item[Forme de la pièce]{ Chaques cellules de la pièce est représentée par un 1 ou un 0. la manière de le représenter et exactement la même que pour la forme de la carte }
\end{description} \end{description}
Dans le cas où le fichier sauvegarde l'état de la partie, à la fin, et pour chaques pièces dans le même ordre que l'apparition des pièces: Dans le cas où le fichier sauvegarde l'état de la partie, à la fin, et pour chaques pièces dans le même ordre que l'apparition des pièces:
\begin{description} \begin{description}
@ -119,14 +119,14 @@ Voici le 'hexdump' du niveau 11
b0 22 70 22 b0 11 80 53 4d 45 |."p"...SME| b0 22 70 22 b0 11 80 53 4d 45 |."p"...SME|
\end{verbatim} \end{verbatim}
représente une carte de la forme représente une carte de la forme :
\begin{tikzpicture} \begin{tikzpicture}
\filldraw[blue] (0,0) -- (0,5) -- (3,5) -- (3,4) -- (5,4) -- (5,0) -- cycle; \filldraw[blue] (0,0) -- (0,5) -- (3,5) -- (3,4) -- (5,4) -- (5,0) -- cycle;
\draw[step=1cm,gray] (0, 0) grid (5,5); \draw[step=1cm,gray] (0, 0) grid (5,5);
\end{tikzpicture} \end{tikzpicture}
avec les pièces avec les pièces :
\begin{tikzpicture} \begin{tikzpicture}
\fill[red] (1,1) rectangle (4,4); \fill[red] (1,1) rectangle (4,4);
@ -139,12 +139,12 @@ avec les pièces
\end{tikzpicture} \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 pièce mesure plus de 15x15). 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 pièce 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, 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. 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. Ces deux parseurs implémentent l'interface \verb|FileParser| afin 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. Finalement, La classe \verb|FileParserFactory| permet une utilisation simple des parseurs. Celle-ci contient deux fonctions statiques.
\begin{itemize} \begin{itemize}
\item{Map loadMapFromFile(File)} \item{Map loadMapFromFile(File)}
permet de retourner la Map d'un fichier chargé. permet de retourner la Map d'un fichier chargé.
@ -158,7 +158,7 @@ L'avantage de ce system est que nous pouvons facilement ajouter d'autres parser
\subsection{Générateur de niveaux aléatoire} \subsection{Générateur de niveaux aléatoire}
Le générateur de niveaux a été concue de sorte à proposé trois sorte de niveaux différents : Le générateur de niveaux a été conçue de sorte à proposé trois sorte de niveaux différents :
\item{Niveau Facile} \item{Niveau Facile}
\item{Niveau Moyen} \item{Niveau Moyen}
\item{Niveau Difficile} \item{Niveau Difficile}
@ -168,24 +168,26 @@ L'algorithme derrière est le même en voici le principe :
\item{Gestion du plateau :} \item{Gestion du plateau :}
Le joueur choisi une difficulté en fonction de la difficulté choisie la grandeur du plateau de jeu sera différente. Le joueur choisi une difficulté en fonction de la difficulté choisie la grandeur du plateau de jeu sera différente.
Si la difficulté est facile l'algorithme s'arrête la. Si la difficulté est facile l'algorithme s'arrête la.
Par contre si la difficulté choisie est moyen alors en plus de générer un map plus grande un curseur parcours les extrémités Par contre si la difficulté choisie est moyen alors en plus de générer un map plus grande, un curseur parcours les extrémités
du niveau et mets de manière aléatoire des trous. Même principe pour le niveau de difficulté difficile mais en plus d'une taille encore plus grandre du niveau et mets de manière aléatoire des trous dedans.
la curseur parcours avec une profondeur de deux afin de mettre des trous de le niveau. Cela à inclus au code une vérifiction afin de Nous nous sommes basé sur le même principe pour le niveau de difficulté difficile mais en plus d'une taille encore plus grande,
le curseur parcours avec une profondeur de deux afin de mettre des trous de la map. Cela à inclus au code une vérifiction afin de
supprimer toutes les cases isolées. supprimer toutes les cases isolées.
\item{Gestion des pièces : } \item{Gestion des pièces : }
Peu importe la difficulté du niveau voici le fonctionnement Peu importe la difficulté du niveau voici le fonctionnement :
Une taille maximum des pièces a été fixé au préalable à 3x3, par la suite un curseur parcours le niveau creer en commençant en haut à gauche Une taille maximum des pièces a été fixée au préalable à 3x3, par la suite un curseur parcours le niveau créer en commençant en haut à gauche
puis part dans 8 directions différentes. (en haut à gauche, en haut au centre,en haut à droite, à droite au centre, en bas à droite, en bas au centre, puis part dans 8 directions différentes. (en haut à gauche, en haut au centre,en haut à droite, à droite au centre, en bas à droite, en bas au centre,
en bas à gauche et au centre à gauche) Ce qui explique la taille maximum de la pièce, si le curseur rencontre un obstacle(trou dans le niveau ou en bas à gauche et au centre à gauche) Ce qui explique la taille maximum de la pièce. Si le curseur rencontre un obstacle(trou dans le niveau ou
espace déjà utilisé pour une autre pièce) alors la pièce est modifié (comporte un false à l'endroit en question) si pas l'espace est rajouté sur la pièce. espace déjà utilisé pour une autre pièce) alors la pièce est modifié (comporte un 0 (false) à l'endroit en question) si pas l'espace est rajouté sur la pièce.
\subsection{Fluidité et Simplicité de l'interface grahique} \subsection{Fluidité et Simplicité de l'interface grahique}
En effet, tout l'affichage du jeu tient sur 5 fichiers différents En effet, tout l'affichage du jeu tient sur 5 fichiers différents
\item \item
{Le controller} : qui s'occupe d'afficher chaque scènes différentes en fonction des actions du joueur. {Le controller} : qui s'occupe d'afficher chaque scènes différentes en fonction des actions du joueur.
@ -195,30 +197,31 @@ qui permet d'accéder aux niveaux de base proposé par le jeu Cats Organized Nea
généré aléatoirement en fonction du niveau de difficulté choisi. généré aléatoirement en fonction du niveau de difficulté choisi.
De plus un dernier boutons "Load Game" permet de récupérer directement le niveau lorsque le joueur l'a quitté. De plus un dernier boutons "Load Game" permet de récupérer directement le niveau lorsque le joueur l'a quitté.
\item \item
{Le MenuLevel} : qui s'occupe d'afficher les niveaux proposés dans le jeu et qui en fonction du jour choisir change tout les buttons {Le MenuLevel} : qui s'occupe d'afficher les niveaux proposés dans le jeu et qui en fonction du jour choisir change tout les boutons
et les niveaux disponibles. et les niveaux disponibles.
\item \item
{ScreenLevelFinish} qui s'affiche à l'écran dès que le joueur a fini le niveau celui-ci propose également de réessaye le niveau ou de retourner au menu principal. {ScreenLevelFinish} : qui s'affiche à l'écran dès que le joueur a fini le niveau celui-ci propose également de réessaye le niveau ou de retourner au menu principal.
\item \item
{Le GameUI} qui s'occupe de placer le plateau de jeu au milieu de l'écran ainsi que d'afficher les pièces à sa droite, mais aussi {Le GameUI} : qui s'occupe de placer le plateau de jeu au milieu de l'écran ainsi que d'afficher les pièces à sa gauche, mais aussi
de gerer le depassement pour ne pas que les pièces soient affichées en dehors de l'écran de gérer le dépassement pour ne pas que les pièces soient affichées en dehors de l'écran.
\section{Points Faibles} \section{Points Faibles}
\item {L'interface} \item {L'interface}
Bien que l'interface graphique permet de naviguer de manière fluide dans le jeu il manque clairement un manque d'animation et de dynamysme ie : Bien que l'interface graphique permet de naviguer de manière fluide dans le jeu, il manque clairement un manque d'animation et de dynamysme ie :
transition de page à une autre, apparition des boutons ainsi qu'un manque de musique. transition de page à une autre, apparition des boutons ainsi qu'un manque de musique.
Toujours concernant l'affichage l'adaptation à la taille de l'écran peut être revu. Toujours concernant l'affichage l'adaptation à la taille de l'écran peut être revu.
\item {Le design} \item {Le design}
De plus suite à la perte de notre membre nous n'avons pas su gérer sa partie du projet qui concernait le design/textures des pièces ainsi que l'histoire jeu préparer en amont.
De plus suite à la perte de notre membre nous n'avons pas su gérer la partie du projet qui concernant le design/textures des pièces ainsi que l'histoire jeu préparer auparavant.
\section{Apports Positifs et négatifs} \section{Apports Positifs et négatifs}
\subsection{Anthony} \subsection{Anthony}
Personellement, Ce projet m'a permis de me plonger dans la conception d'un format de fichier personnalisé. Personellement, ce projet m'a permis de me plonger dans la conception d'un format de fichier personnalisé.
C'est une chôse que je n'avais pas encore fait jusqu'a maintenant. C'est une chôse que je n'avais pas encore fait jusqu'à maintenant.
Et malgré mes efforts pour prévoir un maximum de choses à l'avance afin d'éviter de devoir Et malgré mes efforts pour prévoir un maximum de choses à l'avance afin d'éviter de devoir
modifier ma spécification pendant le dévelopement. Je me suis vite rendu compte que je n'avais pas pensé modifier ma spécification pendant le dévelopement. Je me suis vite rendu compte que je n'avais pas pensé
à tout et que je devrais changer des choses pour pouvoir arriver à mes fins. à tout et que je devrais changer des choses pour pouvoir arriver à mes fins.
@ -229,9 +232,9 @@ J'en prend bonne notes.
\subsection{Matteo} \subsection{Matteo}
Il est claire que je peux tirer plusieurs enseignement grâce à la realisation de notre projet. Il est claire que je peux tirer plusieurs enseignement grâce à la réalisation de notre projet.
Tout d'abord, j'ai pu en apprendre beaucoup plus concernant la P.O.O en java, mais à ma grande surprise j'en ai appris Tout d'abord, j'ai pu en apprendre beaucoup plus concernant la P.O.O en java, mais aussi j'en ai appris
aussi sur l'utilisation de la bibliotheque JavaFx. d'avantage sur l'utilisation de la bibliotheque JavaFx.
De plus, durant la réalisation du projet, comme dit précédemment nous avons utilisé plusieurs outils et dont la plus grande découverte pour moi : De plus, durant la réalisation du projet, comme dit précédemment nous avons utilisé plusieurs outils et dont la plus grande découverte pour moi :
Git. Qui révèle son intérêt pour les travaux de groupes, et qui selon moi ce révélera tout aussi essentiel pour mes futurs projets Git. Qui révèle son intérêt pour les travaux de groupes, et qui selon moi ce révélera tout aussi essentiel pour mes futurs projets