2020-09-27 12:16:27 +02:00
|
|
|
|
{width="6.270833333333333in"
|
|
|
|
|
height="1.2083333333333333in"}
|
|
|
|
|
|
|
|
|
|
**Compte-Rendu Projet C++**
|
|
|
|
|
|
|
|
|
|
Harlé Antoine - Hanna Élias
|
|
|
|
|
|
|
|
|
|
**Sommaire**
|
|
|
|
|
|
|
|
|
|
**[Getting started](#getting-started) 2**
|
|
|
|
|
|
|
|
|
|
**[How to play](#how-to-play) 2**
|
|
|
|
|
|
|
|
|
|
**[Description du projet](#description-du-projet) 3**
|
|
|
|
|
|
|
|
|
|
**[Organisation](#organisation) 4**
|
|
|
|
|
|
|
|
|
|
**Getting started**
|
|
|
|
|
===================
|
|
|
|
|
|
|
|
|
|
***Prérequis :*** C++ 11 , SDL2, Boost.test
|
|
|
|
|
|
|
|
|
|
***Lancement de Nidrobb :***
|
|
|
|
|
|
|
|
|
|
- Lancer la commande *make* à la racine du fichier *src* pour compiler
|
|
|
|
|
> les fichiers sources.
|
|
|
|
|
|
|
|
|
|
- Lancer la commande *./Nidrobb*.
|
|
|
|
|
|
|
|
|
|
***Lancement des tests unitaires :***
|
|
|
|
|
|
|
|
|
|
- Choix du test de classe à lancer : dans le fichier *makefile* à la
|
|
|
|
|
> racine du fichier *src*, choisir [un]{.ul} test à réaliser parmis
|
|
|
|
|
> les tests disponible en commentaire (\#Unitests/TestDispo.cpp) en
|
|
|
|
|
> le plaçant non commenté devant *TESTSRC =* .
|
|
|
|
|
|
|
|
|
|
{width="7.192708880139983in"
|
|
|
|
|
height="0.6940332458442695in"}
|
|
|
|
|
|
|
|
|
|
- Lancer la commande *make Unitest* à la racine du fichier *src* afin
|
|
|
|
|
> de compiler et lancer le test.
|
|
|
|
|
|
|
|
|
|
**How to play**
|
|
|
|
|
===============
|
|
|
|
|
|
|
|
|
|
**But du jeu :**
|
|
|
|
|
|
|
|
|
|
(*But initial*) Tuer le joueur adverse et progresser dans la zone du
|
|
|
|
|
joueur adverse.
|
|
|
|
|
|
|
|
|
|
(*But actuel*) Toucher le joueur adverse en premier.
|
|
|
|
|
|
|
|
|
|
**Mécanique de jeu :**{width="0.768591426071741in"
|
|
|
|
|
height="0.6979166666666666in"}
|
|
|
|
|
|
|
|
|
|
- *One Punch Man* : Un coup suffit à mettre au tapis ton adversaire !
|
|
|
|
|
|
|
|
|
|
```{=html}
|
|
|
|
|
<!-- -->
|
|
|
|
|
```
|
|
|
|
|
- *Du fun en illimité !* : Respawn des joueurs tués instantané.
|
|
|
|
|
|
|
|
|
|
{width="1.3125in" height="0.8940212160979878in"}
|
|
|
|
|
|
|
|
|
|
- *Combat aériens* : Possibilité de se battre dans les airs ! Après
|
|
|
|
|
> avoir pris un peu de hauteur, court et bat toi dans les air tel
|
|
|
|
|
> Son Goku©️ !
|
|
|
|
|
|
|
|
|
|
{width="1.5625in" height="0.90625in"}
|
|
|
|
|
|
|
|
|
|
- *Parade* : Possibilité de contrer une attaque adverse avec une
|
|
|
|
|
> attaque au bon moment !
|
|
|
|
|
|
|
|
|
|
{width="1.3125in" height="1.1875in"}
|
|
|
|
|
|
|
|
|
|
- *Esquive* : Possibilité d\'esquiver une attaque en s'accroupissant
|
|
|
|
|
> au bon moment !
|
|
|
|
|
|
|
|
|
|
**Commandes :**{width="3.4691797900262467in"
|
|
|
|
|
height="2.369792213473316in"}
|
|
|
|
|
|
|
|
|
|
- **Déplacement :**
|
|
|
|
|
|
|
|
|
|
- J1 : Q / D
|
|
|
|
|
|
|
|
|
|
- J2 : ← / →
|
|
|
|
|
|
|
|
|
|
- **Accroupis :**
|
|
|
|
|
|
|
|
|
|
- J1 : S
|
|
|
|
|
|
|
|
|
|
- J2 : ↓
|
|
|
|
|
|
|
|
|
|
- **Sauts :**
|
|
|
|
|
|
|
|
|
|
- J1 : Barre Espace
|
|
|
|
|
|
|
|
|
|
- J2 : Enter (Pavé numérique)
|
|
|
|
|
|
|
|
|
|
- **Attaque :**
|
|
|
|
|
|
|
|
|
|
- J1 : G
|
|
|
|
|
|
|
|
|
|
- J2 : 0 (Pavé Numérique)
|
|
|
|
|
|
|
|
|
|
**Description du projet**
|
|
|
|
|
=========================
|
|
|
|
|
|
|
|
|
|
Le jeu est basée sur les animations et a pour objectif de faciliter
|
|
|
|
|
l'ajout/amélioration de contenu.
|
|
|
|
|
|
|
|
|
|
**Réalisations :**
|
|
|
|
|
|
|
|
|
|
- Affichage
|
|
|
|
|
|
|
|
|
|
- Gestion des entrées utilisateurs flexible : *InputMap, Command
|
|
|
|
|
> Pattern*
|
|
|
|
|
|
|
|
|
|
- Mouvements simples
|
|
|
|
|
|
|
|
|
|
- Animations flexible : Modification simple des animations (Sprite,
|
|
|
|
|
> Hitbox Passive/Active) dans l'*AnimationBuilder*.
|
|
|
|
|
|
|
|
|
|
- Monde flexible : Modification simple des environnements (fond,
|
|
|
|
|
> plateforme, obstacles) dans le *WorldBuilder*.
|
|
|
|
|
|
|
|
|
|
- Ajout simple de joueurs ordinateurs.
|
|
|
|
|
|
|
|
|
|
**Bug :**
|
|
|
|
|
|
|
|
|
|
- *Gestion des fuites mémoires impossible* : Lancement de *valgrind*
|
|
|
|
|
> avec Nidrobb échoue systématiquement.
|
|
|
|
|
|
|
|
|
|
```{=html}
|
|
|
|
|
<!-- -->
|
|
|
|
|
```
|
|
|
|
|
- Bugs de collisions : sortie de la carte, saut sur obstacles
|
|
|
|
|
|
|
|
|
|
- Bug de chute : pas de chute tant qu'il y a des actions.
|
|
|
|
|
|
|
|
|
|
**Améliorations :**
|
|
|
|
|
|
|
|
|
|
- Menu de jeu{width="1.72249343832021in"
|
|
|
|
|
> height="0.75in"}
|
|
|
|
|
|
|
|
|
|
- Tests complets et unifiés
|
|
|
|
|
|
|
|
|
|
- Postures de joueurs (haute/milieu/basse)
|
|
|
|
|
|
|
|
|
|
- Attaques haute / basses
|
|
|
|
|
|
|
|
|
|
- Animations de morts
|
|
|
|
|
|
|
|
|
|
- Raffinement des frames (Sprites & Hitbox Passive/Active)
|
|
|
|
|
|
|
|
|
|
- Affichage des hitbox Passive / Active
|
|
|
|
|
|
|
|
|
|
**Inspirations du système de hitbox
|
|
|
|
|
:**{width="3.7314818460192476in"
|
|
|
|
|
height="2.0989588801399823in"}
|
|
|
|
|
|
|
|
|
|
**Hitbox passive** = réception de dommages / collisions environnement
|
|
|
|
|
|
|
|
|
|
**Hitbox active** = envoie de dommage / parades
|
|
|
|
|
|
|
|
|
|
**Organisation**
|
|
|
|
|
================
|
|
|
|
|
|
|
|
|
|
Pour commencer, nous nous sommes répartis les rôles comme suit :
|
|
|
|
|
|
|
|
|
|
- Harlé Antoine : Responsable Mécanique de jeu
|
|
|
|
|
|
|
|
|
|
- Hanna Elias : Responsable Graphique
|
|
|
|
|
|
|
|
|
|
Pour le développement, nous avons commencés par définir nos objectifs à
|
|
|
|
|
court et long termes puis avons commencé à produire un premier UML sur
|
|
|
|
|
lequel se baser.
|
|
|
|
|
|
|
|
|
|
Nous nous sommes servis de Google Drive pour la mise en commun des
|
|
|
|
|
données. L'utilisation d'un git semblant peu pertinent pour un projet de
|
|
|
|
|
cet ampleur et durée.
|
|
|
|
|
|
|
|
|
|
A partir de cela, nous tentions de modifier le moins possible les mêmes
|
|
|
|
|
fichiers afin de faciliter la mise en commun.
|
|
|
|
|
|
|
|
|
|
Travail réalisé :
|
|
|
|
|
|
|
|
|
|
- Harlé Antoine
|
|
|
|
|
|
|
|
|
|
\- Rédaction du README
|
|
|
|
|
|
|
|
|
|
\- Gestion de l'UML
|
|
|
|
|
|
|
|
|
|
\- Gestion des tests unitaires : *Unitests*
|
|
|
|
|
|
|
|
|
|
\- Mise en place des Design Pattern (Command Pattern, Singleton,
|
|
|
|
|
Factory)
|
|
|
|
|
|
|
|
|
|
\- Développement des animations : *AnimationFrame, Animation,
|
|
|
|
|
AnimationBuilder, (sprite)*
|
|
|
|
|
|
|
|
|
|
\- Gestion des graphiques : images joueurs, obstacles, etc.
|
|
|
|
|
|
|
|
|
|
*-* Gestion des entrées : *InputMap, Command, RightCommand*, etc.
|
|
|
|
|
|
|
|
|
|
-Toolbox
|
|
|
|
|
|
|
|
|
|
\- Structure de jeu : Game, *Player, Obstacle, World, WorldBuilder*
|
|
|
|
|
|
|
|
|
|
*-* Gestion des collisions (Passive/Active)
|
|
|
|
|
|
|
|
|
|
\- Gestion des chutes V2 (isFallingV2)
|
|
|
|
|
|
|
|
|
|
\- Fréquence d'affichage
|
|
|
|
|
|
|
|
|
|
- Hanna Elias
|
|
|
|
|
|
|
|
|
|
\- Gestion de l'affichage : *display, window, sprite*
|
|
|
|
|
|
|
|
|
|
\- Gestion des chutes (isFalling)
|
|
|
|
|
|
|
|
|
|
\- Toolbox
|