spellcheck #85
@ -20,10 +20,10 @@
|
||||
|
||||
\section*{Introduction}
|
||||
|
||||
Lors de ce deuxième quadrimèstre, le projet Informatique proposé par notre université fut partie intégrante de notre emploi du temps.
|
||||
Lors de ce deuxième quadrimestre, 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.
|
||||
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.
|
||||
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 personnel qu'en tant que groupe.
|
||||
Il va sans dire que comme pour tout projets, notre chemin a été semé d'embuches. En l'occurrence, 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}
|
||||
@ -90,22 +90,22 @@ Ce parser est implémenté par la classe \verb|BinaryParser|.
|
||||
\begin{description}
|
||||
\item[Header/Footer]{ Les données du niveau commencent par les 3 \emph{caractères} 'S', 'M', 'S' (ou \verb|0x534D53|) et se terminent par les 3 \emph{caractères} 'S', 'M', 'E' (ou \verb|0x534D45|)}
|
||||
\item[Taille de carte]{ Le premier octet des données représente la largeur de la carte, le second sa hauteur.}
|
||||
\item[Forme de la carte]{ Chaques cellules de la carte est représenté par un 1 ou un 0. le 1 représente un emplacement libre, un 0 une cellule vide.
|
||||
\item[Forme de la carte]{ Chaque cellules de la carte est représenté par un 1 ou un 0. Le 1 représente un emplacement libre, un 0 une cellule vide.
|
||||
La forme de la carte peut alors être répartie sur un nombre indéterminé d'octets.
|
||||
Nous pouvons déterminer ce nombre grace à
|
||||
$$\frac{\text{largeur} * \text{hauteur } (+1 \text{ si multiple de } 8)}{8}$$
|
||||
en division entière.}
|
||||
\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 chaque pièces]{
|
||||
\
|
||||
\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[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 }
|
||||
\item[Forme de la pièce]{ Chaque 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}
|
||||
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 chaque pièces dans le même ordre que l'apparition des pièces:
|
||||
\begin{description}
|
||||
\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}
|
||||
Dans le cas où la pièce est flottante (n'est pas placée dans la carte.), les octets contenant les caractères F puis L (0x464C) remplacent les coordonnées}
|
||||
\end{description}
|
||||
}
|
||||
\end{description}
|
||||
@ -119,14 +119,14 @@ Voici le 'hexdump' du niveau 11
|
||||
b0 22 70 22 b0 11 80 53 4d 45 |."p"...SME|
|
||||
\end{verbatim}
|
||||
|
||||
représente une carte de la forme :
|
||||
Représente une carte de la forme :
|
||||
|
||||
\begin{tikzpicture}
|
||||
\filldraw[blue] (0,0) -- (0,5) -- (3,5) -- (3,4) -- (5,4) -- (5,0) -- cycle;
|
||||
\draw[step=1cm,gray] (0, 0) grid (5,5);
|
||||
\end{tikzpicture}
|
||||
|
||||
avec les pièces :
|
||||
Avec les pièces :
|
||||
|
||||
\begin{tikzpicture}
|
||||
\fill[red] (1,1) rectangle (4,4);
|
||||
@ -170,14 +170,14 @@ L'algorithme derrière est le même en voici le principe :
|
||||
|
||||
\subsubsection*{Gestion du plateau}
|
||||
|
||||
Le joueur choisi une difficultée. En fonction de la difficultée choisie la grandeur du plateau de jeu sera différente.
|
||||
Si la difficulté choisie est facile ou moyenne, alors un curseur parcour les extrémités du niveau.
|
||||
Le joueur choisit une difficulté. En fonction de la difficulté choisie, la grandeur du plateau de jeu sera différente.
|
||||
Si la difficulté choisie est facile ou moyenne, alors un curseur parcours les extrémités du niveau.
|
||||
Ce curseur sélectionne aléatoirement les cellules 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,
|
||||
le curseur parcours les extrémités avec une profondeur de 2 afin de faire varier la carte plus grande.
|
||||
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.
|
||||
Cela introduit le problème des cases isolés. C'est pourquoi une boucle vérifie chaque cellules et la supprime si celle si est isolée.
|
||||
|
||||
\subsubsection*{Gestion des pièces}
|
||||
|
||||
@ -185,14 +185,14 @@ 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 des cases de la carte préalablement conçue de manière aléatoire.
|
||||
Pour chaques cases, l'algorithme teste pour chaques cases de la pièce, si l'espace est disponible.
|
||||
Pour chaque cases, l'algorithme teste pour chaque cases de la pièce, si l'espace est disponible.
|
||||
Si ca n'est pas le cas, alors la pièce est modifiée afin de faire correspondre la pièce et la carte.
|
||||
|
||||
L'avantage de cette méthode est que les niveaux sont tous très 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.
|
||||
|
||||
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.
|
||||
Malgré tout, avec nos nombreux test, ce générateur de niveaux nous satisfait vraiment bien et la difficulté des niveaux correspond bien aux attentes.
|
||||
|
||||
\subsection{Interface graphique}
|
||||
L'interface graphique du jeu tient sur 5 classes différentes.
|
||||
@ -200,12 +200,12 @@ L'interface graphique du jeu tient sur 5 classes différentes.
|
||||
\subsubsection*{Controller}
|
||||
Classe principale. Elle s'occupe de la gestion des autres classe, et de la cohérence entre elles.
|
||||
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|.
|
||||
Cela 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.
|
||||
C'est-à-dire la première page que verra 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.
|
||||
|
||||
@ -219,12 +219,12 @@ Celle-ci propose également de réessayer le niveau ou de retourner au menu prin
|
||||
|
||||
\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.
|
||||
S'occupe dans un premier temps d'afficher le plateau au milieu de l'écran.
|
||||
Par la suite, les pièces sont dispersées à la gauche de l'ocrant et sont rendu disponible à l'utilisateur.
|
||||
Ces pièces sont déplaçables à l'aide de la souris.
|
||||
Si elles sont lâchées sur un emplacement disponible du plateau, alors elle vont s'aligner 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.
|
||||
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}
|
||||
|
||||
@ -238,10 +238,10 @@ De plus suite à la perte de notre membre nous n'avons pas su gérer la partie d
|
||||
|
||||
\subsection{Anthony}
|
||||
|
||||
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'à maintenant.
|
||||
Personnellement, ce projet m'a permis de me plonger dans la conception d'un format de fichier personnalisé.
|
||||
C'est une chose 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
|
||||
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éveloppement. 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.
|
||||
Je pense que ce parser de fichier est vraiment améliorable mais je suis relativement fier du résultat.
|
||||
|
||||
@ -252,7 +252,7 @@ J'en prend bonne notes.
|
||||
|
||||
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
|
||||
d'avantage sur l'utilisation de la bibliotheque JavaFx.
|
||||
d'avantage sur l'utilisation de la bibliothèque 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 :
|
||||
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
|
||||
@ -270,7 +270,7 @@ En conclusion nous pouvons séparer notre travail en trois partie différentes
|
||||
|
||||
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,
|
||||
ainsi qu'une approche correcte de l'utilisation du framework Javafx, d'autre améliorations sont toujours possible !
|
||||
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,
|
||||
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.
|
||||
|
||||
En conclusion, notre jeu a encore plein de possibilité afin d'être encore plus complet et amusant!
|
||||
|
Loading…
Reference in New Issue
Block a user