---
# System prepended metadata

title: '**TraceX**'

---

# **TraceX**
## Cahier des charges projet P2 

### Description du Projet
Le projet consiste à réaliser un jeu en C++ avec le framework Qt. Le programme possède une fenêtre d'accueil, une fenêtre de jeu et une fenêtre de scores.

---

### Description du jeu
* 2 à 8 joueurs réels (local ou réseaux)
* Le jeu commence sur un **terrain vide**
* Chaque joueur dirige un personnage (il ne contrôle que la direction, le personnage se déplace à vitesse constante).
* Chaque personnage est assigné à un emplacement aléatoire parmis les emplacements de départ définis. 
* En avançant, il laisse une trace de sa couleur derrière lui.
* Si un joueur entre en collision avec une trace (la sienne y compris), il est éliminé.
* Chaque seconde passée en vie sur le terrain rapporte 1 point au joueur. Des bonus apparaissent aléatoirement sur le terrain et peuvent rapporter des points également. Le joueur avec le plus de point à la fin de la partie gagne le jeu.

---

### Le multijoueur
Il y a **2 modes** de jeu : un multijoueur local et un réseau.
#### Mode local (maximum 3 joueurs)
Tous les joueurs jouent sur le même clavier. Par exemple, le joueur 1 utilise les touches A et D, le joueur 2 les touches J et L et joueur 3 les flèches directionnelles (droite et gauche).

#### Mode réseau
Le joueur doit se connecter sur un serveur qui doit prendre les informations de chaque joueur puis les relayer aux autres.


### Contraintes
Le programme doit être développé en **C++ Qt** avec **Qt creator** et il sera stocké sur le **GitLab** de la HE-ARC.

---

### Objectifs principaux
* Interface graphique
    * Menu
    * Jeu
    * Scores
* Déplacement des joueurs : Le joueur indique la direction de déplacement du personnage en faisant tourner l'indicateur de direction autour d'un cercle à l'aide des touches droites et gauches sur le clavier, soit respectivement A et D, J et L, ainsi que les flèches droites et gauches. 
* Détection des colisions (qui meurt, qui vit)
    * <TODO>Effet tunnel</TODO>
* Comptabilisation des scores
    * Nombres de kills (nombre de personne entré en collision avec la trace du joueur).
    * Temps de vie : Chaque seconde de vie en jeu rapporte des points. 
* Multijoueur
    * Gamemanager (synchronisation des joueurs)
        * Local
        * Réseau
            * Client
            * Serveur
### Objectifs secondaires
* "Power-ups" en jeu
* 

### Points chauds
* Synchronisation
* Concurrence (en réseau)
* Réseau
* Définition classe virtuelle
* Dessin sur une scène virtuelle

## Spécifications détaillées
### Interface
#### Menu
Par l'interface du menu, l'utilisateur peut choisir de jouer en local (avec le nombre de joueur) ou en réseaux. Il pourra aussi indiquer un nom pour les joueurs pour l'affichage des scores.

#### Jeu
Interface où le personnage du joueur pourra se déplacer, chaque joueur aura une couleurs différente.
Le joueur peut y rencontrer des Power-ups

#### Score
Deux interfaces distinctes pour les scores :
* l'interface en jeu
* l'interface des résultats en fin de la partie.

### Déplacement des joueurs
Chaque joueur a une vitesse constante. Elle n'est influencée que par d'eventuelles Power-ups. Le seul input de l'utilisateur est gauche-droite. Il modifie le "heading" de son personnage.
Il n'influence donc que le sens et la direction de son vecteur vitesse mais pas sa norme.

Chaque joueur laisse une trace derrière lui. Pour gérer les colisions, pour chaque personnage il y a un historique de déplacement ou de points.

### Détection des colisions (qui meurt, qui vit)

A chaque déplacement du joueurs, il faut tester si ce déplacement a touché une trace d'un des joueurs (mort ou vivant). Si le déplacement touche une trace, le joueurs qui a géneré ce mouvement est eliminé et donc ne pourra plus plus bouger.

#### Effet tunnel
Un joueur ce déplace a une certaine vitesse qui est généralment mesuré en pixel/secondes. Ceci fait qu'un déplacement est en faite une ligne entre 2 points ou ce trouvait le joueur. L'effet tunnel fait que les colisions doivent être gérées entre ces lignes de déplacement.

### Comptabilisation des scores
Les points sont comptabilisés en fonction du temps en vie passé par le joueur sur le terrain. Le joueur gagne 1 point pour chaque seconde passée en jeu et il reçoit un bonus de points pour chaque joueur éliminé qui aura percuté sa trace.


### Multijoueur
#### Local
Les joueurs jouent sur une même fenêtre sur le même ordinateur, avec différentes touches du clavier.
* Flèches directionnelles
* SD
* JL

#### Réseau
Un ordinateur lance le serveur.
Les joueurs qui s'y connectent et démarrent une partie ensemble.

---



**[<span style="font-size:1em;">Home</span>](Home)**