Add some explain about MapGenerator
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing

This commit is contained in:
Mat 2023-05-19 22:12:17 +02:00
parent 878caf1c99
commit 3bcfdfc084

View File

@ -52,13 +52,13 @@ Ce blog nous sert également à garder une trace de l'évolution 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 soit toujour 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{Les pieces 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.}
\end{itemize}
\subsubsection*{Shapes}
Les pieces 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.
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|.
@ -96,15 +96,15 @@ Ce parser est implémenté par la classe \verb|BinaryParser|.
$$\frac{\text{largeur} * \text{hauteur } (+1 \text{ si multiple de } 8)}{8}$$
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[Pour chaques pieces]{
\item[Pour chaques pièces]{
\
\begin{description}
\item[Taille de la piece]{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 piece 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[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 }
\end{description}
Dans le cas où le fichier sauvegarde l'état de la partie, à la fin, et pour chaques pieces 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}
\item[Position de la pièce]{2 octets par pieces, 1 octet pour sa position en x et 1 octet pour sa position en y.
\item[Position de la pièce]{2 octets par pièces, 1 octet pour sa position en x et 1 octet pour sa position en y.
Dans le cas où la pièce est flotante (n'est pas placée dans la carte.), les octets contenant les caractères F puis L (0x464C) remplacent les coordonées}
\end{description}
}
@ -126,7 +126,7 @@ représente une carte de la forme
\draw[step=1cm,gray] (0, 0) grid (5,5);
\end{tikzpicture}
avec les pieces
avec les pièces
\begin{tikzpicture}
\fill[red] (1,1) rectangle (4,4);
@ -138,7 +138,7 @@ 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).
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,
mais n'est pas utilisé dans le projet à l'heure actuelle.
@ -156,9 +156,34 @@ Dans le cas d'une sauvegarde ou d'un chargement, le parser est choisi en fonctio
L'avantage de ce system est que nous pouvons facilement ajouter d'autres parser de fichier dans le futurs.
\subsection{generateur de niveaux}
\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 :
\item{Niveau Facile}
\item{Niveau Moyen}
\item{Niveau Difficile}
L'algorithme derrière est le même en voici le principe :
\item{Gestion du plateau :}
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.
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
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
supprimer toutes les cases isolées.
\item{Gestion des pièces : }
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
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
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.
Le generateur de niveau permet 3 niveaux de difficultés différents.
\subsection{Fluidité et Simplicité de l'interface grahique}
En effet, tout l'affichage du jeu tient sur 4 fichiers différents
@ -173,8 +198,8 @@ De plus un dernier boutons "Load Game" permet de récupérer directement le nive
{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
et les niveaux disponibles.
\item
{Le GameUI} qui s'occupe de placer le plateau de jeu au milieu de l'écran ainsi que d'afficher les pieces à sa droite, mais aussi
de gerer le depassement pour ne pas que les pieces soient affichées en dehors de l'écran
{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
de gerer le depassement pour ne pas que les pièces soient affichées en dehors de l'écran
\section{Points Faibles}
@ -184,7 +209,7 @@ Bien que l'interface graphique permet de naviguer de manière fluide dans le jeu
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.
\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 pieces ainsi que l'histoire jeu préparer en amont.
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.
\section{Apports Positifs et négatifs}