Last modification by tonitch
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-20 14:17:42 +02:00
parent 939f8566cd
commit a98c3cd3e1
2 changed files with 68 additions and 55 deletions

Binary file not shown.

View File

@ -60,7 +60,7 @@ 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 carré 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écessaire pour le moteur du jeu. Avec toutes ces informations nous avons le nécessaire pour le moteur du jeu.
@ -69,7 +69,7 @@ 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.
\subsection{Difficultés} % \subsection{Difficultés}
\section{Points Forts} \section{Points Forts}
@ -142,13 +142,13 @@ En plus de ce parser, et dans le cas où ce premier parser ne serait pas capable
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| afin de pouvoir utiliser l'un où l'autre parser. Ces deux parseurs implémentent l'interface \verb|FileParser|.
Finalement, La classe \verb|FileParserFactory| permet une utilisation simple des parseurs. Celle-ci contient deux fonctions statiques. Finalement, La classe \verb|FileParserFactory| permet une utilisation simple de ces parseurs. Celle-ci contient deux fonctions statiques.
\begin{itemize} \begin{itemize}
\item{Map loadMapFromFile(File)} \item{\verb|Map loadMapFromFile(File)|}
permet de retourner la Map d'un fichier chargé. permet de retourner la Map d'un fichier chargé.
\item{void saveFileFromMap(File, Map)} \item{\verb|void saveFileFromMap(File, Map)|}
permet de sauvegarder une map dans un fichier. permet de sauvegarder une map dans un fichier.
\end{itemize} \end{itemize}
@ -156,9 +156,10 @@ 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. L'avantage de ce system est que nous pouvons facilement ajouter d'autres parser de fichier dans le futurs.
\subsection{Générateur de niveaux aléatoire} \subsection{Générateur de niveaux}
Le générateur de niveaux a été conçu de sorte à proposer 3 difficultés différentes
Le générateur de niveaux a été conçue de sorte à proposé trois sorte de niveaux différents :
\begin{itemize} \begin{itemize}
\item{Niveau Facile} \item{Niveau Facile}
\item{Niveau Moyen} \item{Niveau Moyen}
@ -168,59 +169,70 @@ Le générateur de niveaux a été conçue de sorte à proposé trois sorte de n
L'algorithme derrière est le même en voici le principe : L'algorithme derrière est le même en voici le principe :
\subsubsection*{Gestion du plateau} \subsubsection*{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. Le joueur choisi une difficultée. En fonction de la difficultée choisie la grandeur du plateau de jeu sera différente.
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 Si la difficulté choisie est facile ou moyenne, alors un curseur parcour les extrémités du niveau.
du niveau et mets de manière aléatoire des trous dedans. Ce curseur sélectionne aléatoirement les céllules qui seront gardés ou non.
Grâce à ça, la forme du plateau n'est pas trop carrée.
Nous nous sommes basé sur le même principe pour le niveau de difficulté difficile mais en plus d'une taille encore plus grande, 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 le curseur parcours les extrémités avec une profondeur de 2 afin de faire varier la carte plus grande.
supprimer toutes les cases isolées. Cela introduit le problème des cases isolés. c'est pourquoi une boucle vérifie chaques cellules et la supprime si celle si est isolée.
\subsubsection*{Gestion des pièces} \subsubsection*{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ée au préalable à 3x3, par la suite un curseur parcours le niveau créer en commençant en haut à gauche Une taille maximum des pièces a été fixée au préalable à 3x3.
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, Par la suite, un curseur parcours des cases de la carte préalablement conçue de manière aléatoire.
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 Pour chaques cases, l'algorithme teste pour chaques cases de la pièce, si l'espace est disponible.
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. Si ca n'est pas le cas, alors la pièce est modifiée afin de faire coorespondre la pièce et la carte.
\subsection{Fluidité et Simplicité de l'interface grahique} L'avantage de cette méthode est que les niveaux sont tous très différents.
En effet, tout l'affichage du jeu tient sur 5 fichiers différents Les désavantages sont que, par malchance, il est possible d'avoir énormément de piece 1x1.
Ainsi qu'il est plus difficile d'appliquer des textures et dessins - à l'image du jeu de base - sur les pièces.
\subsubsection*{Le controller} Malgrés tout, avec nos nombreux test, ce générateur de niveaux nous satisfait vraiment bien et la difficultée des niveaux coorespond bien aux attentes.
qui s'occupe d'afficher chaque scènes différentes en fonction des actions du joueur.
\subsubsection*{Le MenuAccueil} \subsection{Interface graphique}
qui s'occupe de générer la page d'accueil du jeu c'est-à-dire la première page que vera l'utilisateur L'interface graphique du jeu tien sur 5 classes différentes.
qui permet d'accéder aux niveaux de base proposé par le jeu Cats Organized Neatly,mais aussi de pouvoir lancer un niveau
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é.
\subsubsection*{Le MenuLevel} \subsubsection*{Controller}
qui s'occupe d'afficher les niveaux proposés dans le jeu et qui en fonction du jour choisir change tout les boutons Classe principale. Elle s'occupe de la gestion des autres classe, et de la cohérence entre elles.
et les niveaux disponibles. Toutes les autres classes (présentes dans le package \verb|Scenes|) sont des sous classe de Parents.
Celà permet de les afficher grace à la méthode statique \verb|switchRoot|.
C'est aussi le point d'entrée du programme.
\subsubsection*{MenuAccueil}
Classe s'occupant de générer la page d'accueil du jeu.
C'est-à-dire la première page que vera l'utilisateur.
Cette page permet d'accéder aux niveaux du jeu de base, mais également de générer les niveaux aléatoires.
De plus un dernier boutons "Load Game" permet de revenir sur la dernière partie en cours du joueur.
\subsubsection*{MenuLevel}
Classe s'occupant d'afficher les niveaux proposés dans le jeu, et qui,
en fonction du jour choisir, change les boutons et les niveaux disponibles.
\subsubsection*{ScreenLevelFinish} \subsubsection*{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. Classe qui s'affiche à l'écran dès que le joueur a fini le niveau.
Celle-ci propose également de réessayer le niveau ou de retourner au menu principal.
\subsubsection*{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 gérer le dépassement pour ne pas que les pièces soient affichées en dehors de l'écran.
\subsubsection*{GameUI}
Classe s'occupant de l'affichage d'un niveau.
S'occupe dans un premier temps d'afficher le plateau au milieu de l'écrant.
Par la suite, les pièces sont dispérsées à la gauche de l'écrant et sont rendu disponible à l'utilisateurs.
Ces pièces sont déplacables à l'aide de la souris.
Si elles sont lachées sur un emplacement disponible du plateau, alors elle vont s'alligner avec ses cellules.
Pour se faire, nous regardons si le centre d'une cellule (la plus en haut à gauche) est présente dans une cellule du plateau.
Ensuite, on vérifie que toutes les cellules de la pièces ont bien la place dans le plateau pour se poser. si c'est le cas, alors la pièce est posée.
\section{Points Faibles} \section{Points Faibles}
\begin{itemize} Bien que l'interface graphique permet de naviguer de manière fluide dans le jeu, il y a clairement un manque d'animation et de dynamisme
\item {L'interface} \emph{i.e}: transition de page à une autre, apparition des boutons ainsi qu'un manque de musique.
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 : Toujours concernant l'affichage l'adaptation à la taille de l'écran peut être revue.
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}
\end{itemize}
De plus suite à la perte de notre membre nous n'avons pas su gérer la partie du projet qui concerne le design/textures des pièces ainsi que l'histoire jeu préparée auparavant.
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}
@ -238,26 +250,27 @@ J'en prend bonne notes.
\subsection{Matteo} \subsection{Matteo}
Il est claire que je peux tirer plusieurs enseignement grâce à la réalisation de notre projet. Il est clair 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 aussi 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
d'avantage 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 se révélera tout aussi essentiel pour mes futurs projets
scolaires ainsi que professionnels. scolaires ainsi que professionnels.
\section{conclusion} \section{conclusion}
En conclusion nous pouvons séparer notre travail en trois parties différentes :
En conclusion nous pouvons séparer notre travail en trois partie différentes
\begin{enumerate} \begin{enumerate}
\item Le parser de fichier (gestion sauvegarder/charger partie) \item Le parser de fichier (gestion sauvegarder/charger partie)
\item Instanciation du jeu (Map,Vec2,Shapes) \item Logique du jeu (Map,Vec2,Shapes)
\item Liaison au graphisme (Javafx) \item Liaison à l'UI (Javafx)
\end{enumerate} \end{enumerate}
Malgré notre travail fourni au bon fonctionnement du jeu avec un parser des plus efficace, une utilisation de la P.O.O de manière très efficace,
ainsi qu'une approche correct avec Javafx, d'autre amélioration sont toujours possible ! Malgré notre travail concentré sur le bon fonctionnement du jeu avec un parser suivant nos objectifs, une utilisation de la P.O.O de manière très efficace,
En effet une idée de rajouter une histoir, des trophées, un easter egg(plus particulierement un tetris) ou un encore un table de score basé sur le temps reste possible afin de rendre notre ainsi qu'une approche correcte de l'utilisation du framework Javafx, d'autre améliorations sont toujours possible !
jeu encore plus complet. En effet l'idée de rajouter une histoire, des trophées, un easter egg, des pièces spéciales ou un encore un table de score basée sur le temps.
Reste possible afin de rendre notre jeu encore plus complet.
\end{document} \end{document}