This commit is contained in:
Mylloon 2022-01-02 23:24:27 +01:00
parent ccd183198e
commit 3b361dea6e
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -43,7 +43,7 @@
\begin{itemize} \begin{itemize}
\item Cette objectif a été remplie \item Cette objectif a été remplie
\item Des cubes noir entoure le plateau de jeu \item Des cubes noir entoure le plateau de jeu
\item Des blocs gris parcème l'intérieur du plateau \item Des blocs gris parsème l'intérieur du plateau
\item Des blocs marrons avec une texture différente représente les blocs cassable par les joueurs et sont placés aléatoirement sur le plateau \item Des blocs marrons avec une texture différente représente les blocs cassable par les joueurs et sont placés aléatoirement sur le plateau
\end{itemize} \end{itemize}
@ -87,7 +87,7 @@
J'active par défaut les textures et les ombrages sur tous les objets, ainsi que la synchronisation verticale. J'active par défaut les textures et les ombrages sur tous les objets, ainsi que la synchronisation verticale.
\vspace{10pt} \vspace{10pt}
La structure du joueur est composé des coordonées spatiale \texttt{x, y, z} ainsi que sa position dans le plateau, l'heure à laquelle sa dernière bombe (\texttt{0} quand pas de bombe) à été posée et la position de sa bombe (\texttt{-1} quand pas de bombe) La structure du joueur est composé des coordonnées spatiale \texttt{x, y, z} ainsi que sa position dans le plateau, l'heure à laquelle sa dernière bombe (\texttt{0} quand pas de bombe) à été posée et la position de sa bombe (\texttt{-1} quand pas de bombe)
\begin{center}\begin{minipage}{0.5\textwidth} \begin{center}\begin{minipage}{0.5\textwidth}
\begin{minted}[linenos]{c} \begin{minted}[linenos]{c}
typedef struct perso_t { typedef struct perso_t {
@ -100,7 +100,7 @@ typedef struct perso_t {
\end{minipage}\end{center} \end{minipage}\end{center}
\vspace{10pt} \vspace{10pt}
Les dimensions du plateau sont choisis aléatoirement mais le plateau est toujours un carré. Les dimensions varient entre \texttt{15} et \texttt{25} cube de côtés. Les dimensions du plateau sont choisies aléatoirement mais le plateau est toujours un carré. Les dimensions varient entre \texttt{15} et \texttt{25} cube de côté.
\begin{center}\begin{minipage}{0.5\textwidth} \begin{center}\begin{minipage}{0.5\textwidth}
\begin{minted}[linenos]{c} \begin{minted}[linenos]{c}
srand(time(NULL)); srand(time(NULL));
@ -110,7 +110,7 @@ _plateauH = _plateauW;
\end{minipage}\end{center} \end{minipage}\end{center}
\vspace{10pt} \vspace{10pt}
Les joueurs sont placés de façon a être éloignés l'un de l'autre. Le joueur A est placé en bas à gauche du plateau et le joueur B en haut à droite. Les joueurs sont placés de façon à être éloignés l'un de l'autre. Le joueur A est placé en bas à gauche du plateau et le joueur B en haut à droite.
\begin{center}\begin{minipage}{0.8\textwidth} \begin{center}\begin{minipage}{0.8\textwidth}
\begin{minted}[linenos]{c} \begin{minted}[linenos]{c}
/* Joueur A */ /* Joueur A */
@ -155,7 +155,7 @@ lookAt(
\end{itemize} \end{itemize}
\vspace{10pt} \vspace{10pt}
Les collisions sont gérés grâce à la grille, lorsque l'on essaie de se déplacer, on vérifie qu'il n'y a pas de cube là où on veut aller. Pour cela on calcule la position des blocs à gauche, à droite, au dessus et en dessous du joueur. Les collisions sont gérées grâce à la grille, lorsque l'on essaie de se déplacer, on vérifie qu'il n'y a pas de cube là où on veut aller. Pour cela on calcule la position des blocs à gauche, à droite, au-dessus et en dessous du joueur.
\begin{center}\begin{minipage}{0.9\textwidth} \begin{center}\begin{minipage}{0.9\textwidth}
\begin{minted}[linenos]{c} \begin{minted}[linenos]{c}
/* Exemple vérification pour aller à droite pour le joueur A /* Exemple vérification pour aller à droite pour le joueur A
@ -172,17 +172,17 @@ if(_vkeyboard[VK_RIGHT])
\end{minipage}\end{center} \end{minipage}\end{center}
\vspace{10pt} \vspace{10pt}
Comme dis ci-dessus, la collision est géré grâce à la grille, alors les joueurs doivent aussi être dans la grille, même s'il se déplace de façon fluide. A chaque fois que le centre de gravité du joueur change de case, son numéro change aussi de case dans la grille. Comme dit ci-dessus, la collision est gérée grâce à la grille, alors les joueurs doivent aussi être dans la grille, même s'il se déplace de façon fluide. A chaque fois que le centre de gravité du joueur change de case, son numéro change aussi de case dans la grille.
\vspace{10pt} \vspace{10pt}
La bombe est rattachée au joueur et il n'y peut y avoir qu'une bombe à la fois par joueur sur le terrain. Ces informations sont stockés dans la structure du joueur. \texttt{bombe} correspond à l'heure où la bombe a été posé sur le terrain et \texttt{bombePos} est la position de la bombe sur la grille. La bombe est rattachée au joueur et il n'y peut y avoir qu'une bombe à la fois par joueur sur le terrain. Ces informations sont stockées dans la structure du joueur. \texttt{bombe} correspond à l'heure où la bombe a été posée sur le terrain et \texttt{bombePos} est la position de la bombe sur la grille.
Une bombe reste 3 secondes sur le terrain. La première seconde elle est marron, puis elle devient orange au bout de la 2\up{ème} seconde. A partir de la 3\up{ème} seconde elle devient rouge et une demi-seconde plus tard elle grossie soudainement, puis grossi encore progressivement pendant une dernière demi-seconde avant de disparaître en supprimant les cubes "en bois" qui était dans son rayon. Elle arrête aussi la partie si un joueur a été touché par le rayon de l'explosion et le résultat est afficher dans le terminal. Une bombe reste 3 secondes sur le terrain. La première seconde elle est marron, puis elle devient orange au bout de la 2\up{ème} seconde. A partir de la 3\up{ème} seconde elle devient rouge et une demi-seconde plus tard elle grossit soudainement, puis grossit encore progressivement pendant une dernière demi-seconde avant de disparaître en supprimant les cubes "en bois" qui était dans son rayon. Elle arrête aussi la partie si un joueur a été touché par le rayon de l'explosion et le résultat est affiché dans le terminal.
Le programme détecte les cubes grâce à la grille : Le programme détecte les cubes grâce à la grille :
\begin{center}\begin{minipage}{0.9\textwidth} \begin{center}\begin{minipage}{0.9\textwidth}
\begin{minted}[linenos]{c} \begin{minted}[linenos]{c}
/* Exemple détection si un cube est dans le rayon de /* Exemple détection si un cube est dans le rayon de
* l'explosion dans un rayon i dans la direction vers le haut * l'explosion dans un rayon i dans la direction vers le haut
* à gauche (4 signifique le cube destructible) */ * à gauche (4 signifie que le cube destructible) */
if(_plateau[_joueurA.bombePos - _plateauW - i] == 4) if(_plateau[_joueurA.bombePos - _plateauW - i] == 4)
_plateau[_joueurA.bombePos - _plateauW - i] = 0; _plateau[_joueurA.bombePos - _plateauW - i] = 0;
\end{minted} \end{minted}
@ -221,7 +221,7 @@ transform_n_rasterize(_sphere, nmv, projection_matrix);
\end{minipage}\end{center} \end{minipage}\end{center}
\vspace{10pt} \vspace{10pt}
Les touches sont gérés grâce aux méthodes \texttt{keyd} (quand une touche est pressée) et \texttt{keyu} (quand une touche n'est plus pressée) avec une \texttt{enum} qui repertorie les touches utilisés et une liste qui garde l'état des touches (si elle est actuellement pressée ou non) Les touches sont gérés grâce aux méthodes \texttt{keyd} (quand une touche est pressée) et \texttt{keyu} (quand une touche n'est plus pressée) avec une \texttt{enum} qui répertorie les touches utilisés et une liste qui garde l'état des touches (si elle est actuellement pressée ou non)
\begin{center}\begin{minipage}{0.9\textwidth} \begin{center}\begin{minipage}{0.9\textwidth}
\begin{minted}[linenos]{c} \begin{minted}[linenos]{c}
/* Exemple */ /* Exemple */
@ -253,7 +253,7 @@ void keyd(int keycode) {
\end{minipage}\end{center} \end{minipage}\end{center}
\vspace{10pt} \vspace{10pt}
A la sortie du programme on libère tout nos éléments de la mémoire. A la sortie du programme on libère tous nos éléments de la mémoire.
\section{Piste d'amélioration} \section{Piste d'amélioration}
J'aurais aimé pouvoir modéliser les joueurs avec un cône au lieu d'un simple cube pour le corps. J'aurais aimé pouvoir modéliser les joueurs avec un cône au lieu d'un simple cube pour le corps.