# Cahier des charges - Arc'ttorney
## 1. Introduction
Lors du premier semestre de cette seconde année, le projet P2 était une application graphique faite via le framework Qt de C++. Le projet à faire durant le deuxième semestre sera produit avec le langage Java.
Comme pour le précédent, le groupe est son propre mandant et donc peut faire ce qu'il souhaite, il faut bien entendu l'accord des enseignants.
Ce second projet sera un jeu textuel se basant sur la série de jeu "Ace Attorney" où il faudra débattre via un tchat en ligne et ainsi convaincre le juge afin de prouver l'innocence ou la culpabilité du suspect présent.
## 2. Description du projet
Première chose que l'utilisateur doit faire c'est se connecter au serveur, une fois connecté il doit choisir parmis 3 rôles :
- L'avocat de la défense, c'est celui qui doit défendre l'accusé et arriver à un verdict non coupable. Pour ça il devra trouver des failles dans la déposition du témoin et trouver le réel coupable. Il pourra s'équiper de preuves tout au long du procès qui l'aidera à appuyer son hypothèse.
- Le procureur lui doit déjouer les théories de la défense et prouver que l'accusé est bel et bien coupable. Il pourra lui aussi accumuler des preuves pour contrer les théories de la défense.
- Le juge quant à lui a un rôle d'arbitre, il va pouvoir accepter ou refuser des objections si un parti est trop insistant ou qu'il considère que la direction prise n'est pas bonne. Il va à la fin rendre le verdict et finir la partie. Le juge gagne si le verdict est le bon selon le scénario posé au préalable.
### 2.1 Marche à suivre du jeu
- Lancement du jeu
- Connexion au serveur : via une adresse IP
- Choix d'un pseudo.
- **Connexion**
- Arrive sur le lobby.
- Choix de l'affaire.
- Choix du rôle, le joueur doit se mettre prêt pour que le Juge lance la partie.
- Le juge lance la partie une fois que tout le monde est prêt.
- Plateforme de jeu - Chat
- Message de récapitulatif de l'affaire est envoyé - Une mini pause de 5-8s pour laisser le temps aux joueurs de se préparer.
- Fonctionnement des tours
- L'avocat de la défense (1) et le procureur (2) parle chacun leur tour pour prouver l'innocence/la culpabilité du suspect.
- Le juge quant à lui peut parler quand il le souhaite pour interrompre, pour ajouter une information ou poser une question.
- Avocat de la défense peut questionner le témoin/victime
- Réponse à choix, arbre de décision
- Les deux joueurs peuvent s'interrompre via une objection dans une fenêtre de ~15 secondes à partir de la réception du message. Ce sera au juge de les accepter ou non.
- Si un des joueurs en abuse, il peut recevoir une pénalité (interdiction de faire une interruption pendant un temps t)
- Le but final de cette discussion est d'apporter suffisament de preuves au Juge pour qu'il donne un verdict final
- Si le suspect est considéré non-coupable, l'avocat de la défense remporte la victoire.
- Si le suspect est considéré coupable, le procureur remporte la victoire.
- *Si le juge donne un verdict correct, il remporte également la victoire.
- Le jeu aura un fond qui représente la cour.
- Lorsqu'un des joueurs parle, l'image de son personnage apparaît
- Si une objection est faite, un sprite en premier plan apparaît
- À chaque instant, les joueurs peuvent enregistrer une donnée comme étant preuve et peuvent consulter une liste de preuve pour les "renvoyer" dans le chat
## 3. Objectifs
Le projet Arc'ttorney se base sur un chat écrit sur lequel les informations importantes du jeu seront reçus et envoyées. Ce chat est donc considéré comme l'élément principal du jeu, le but de ce paragraphe est donc de séparer ce chat et ses fonctionnalités en différents objectifs.
### 3.1 Objectifs primaires
Voici les objectifs importants :
- Serveur de communication (Connexion, chat, etc)
- Interface graphique de connexion.
- Socket de connexion.
- Connexion sans latence (ping).
- Envoi et réception de données.
- Lobby de préparation de partie
- Interface graphique.
- Choix des rôles.
- Choix de l'affaire.
- Réception/envoi de données lorsqu'une personne se met prêt.
- Tchat écrit
- Interface graphique du tchat
- Système de chat fluide et fonctionnel.
- Premier message de présentation - envoyé par l'ordinateur.
- Envoie de message par tour (Avocat de la défense, procureur).
- Envoie de message (Juge).
- Pouvoir tranformser un message en tant qu'objection.
- Pouvoir ajouter une preuve au message.
- Système de récupération de données en tant que preuve.
- Pouvoir stocker des parties écrites dans une liste.
- Pouvoir les récupérer et les indiquer dans un texte.
- Système d'interruption
- Objection afin d'interrompre une personne.
- Système de victoire
- Au bout d'un certain moment, un verdict doit être donné par le joueur "Juge".
- Selon le verdict, un joueur ou l'autre va gagner ainsi que le juge selon le résultat.
### 3.2 Objectifs secondaires
- Avocat de la défense peut questionner le témoin/victime
- Système de questions/réponses sour forme d'arbre de décision
- Pénalité donnée par le juge si les objections sont trop utilisés ou si un joueur fait trop n'importe quoi
- Moyen de punir les joueurs dissidents
- Preuves de base
- Au début du cas, des preuves sont déjà présentes pour aider les joueurs
- Fond d'écran - Animations - FX
- Lorsque personne ne parle, un fond représentant une cour sera affiché.
- Lorsqu'un des utilisateurs parle, un sprite le représentant apparaîtra.
- Lorsqu'une interruption est faite, un sprite "objection" apparaîtra.
## 4. Technologies et détails
Pour ce projet, nous allons utiliser plusieurs technologies. Le langage imposé étant Java, plusieurs recherches sur différentes bibliothèques et technologies ont été préalablement faites et sont répértioriées ici.
### 4.1 Swing
Pour l'interface graphique, l'utilisation de Swing a été retenu. C'est une bibliothèque graphique en Java dévellopé par Oracle et majoritairement utilisée dans l'univers Java.
### 4.2 Java Sockets
Java fourni un package java.net qui permet d'avoir des classes spécifiques pour le réseau. Les deux classes principales sont "java.net.ServerSocket" qui reçoit des connexions venues des différents clients. Il y a aussi "java.net.Socket" qui réalise une connexion avec une application distante.
Dans ce projet, il y aura une application qui s'occupe de faire le serveur et accepte les connexions des trois autres joueurs.
### 4.3 Java 2D
Java 2D va permettre d'animer des personnages dans le fond de l'application. Grâce à un "timer", il est possible de modifier les sprites qui animent un personnage. Les personnages vont être créés avec un logiciel de dessin dans un style pixel art.
### 4.4 Paint.net - Photoshop
Ces logiciels sont utilisés pour ce qui est du design de l'application et des sprites du jeu.
## 5. Délais
| Nom du rendu | Description | Date |
|---|---|---|
| Cahier des charges | Version intermédiare | 09 mars 2021 |
| Cahier des carges | Version final | 16 mars 2021 |
| Spécification et planning | GANTT | 23 mars 2021 |<<<
| Conception | Diagrammes uses cases et diagrammes de séquences, diagrammes de classe | 30 mars 2021 |
| Délivrables | Rapport, jar exécutable, vidéo démo max 2 min | 14 juin 2021 |
| Présentation | Powerpoint | 16 juin 2021 |