====== Ars Tactica: Plan d'itérations ======
Le plan d'itérations considère les semaines du Jeudi au Mercredi suivant.
Ceci est pour permettre d'avoir une réunion lors des séances de Laboratoire le Jeudi après-midi.
==== Equipes de Travail ====
* **Client**
* Samuel
* Christophe
* **Serveur**
* Laureline
* Yves
==== Travail déjà Réalisé ====
* Squelette de projet
* Mise en place du gestionnaire de paquets Netty
===== Iteration 1 =====
**Dates** //14 Avril - 20 Avril//
**Charge de Travail** 4h30 par personne (total 18h)
==== Objectifs ====
* Réaliser //Log in to the Client// (logique client)
* Réaliser //Create Account// (logique client)
* Réaliser //Log in to the Client// (logique serveur)
* Réaliser //Create Account// (logique serveur)
==== Implémentation ====
=== Client ===
* Mise en place des écrans (stubs) ''LoginScreen'', ''MenuScreen'', ''LobbyScreen'' et ''GameScreen''.
* Implémenter la logique du ''LoginScreen''
* Utilisation de service //dummy// pour la gestion du réseau.
=== Serveur ===
* Gestionnaire de Réseau ''NetworkHandler'' (Module Partagé)
* Enregistrer un handler de réponse
* Enregistrer un handler pour un type de paquet (Pour Client)
* Notification lors d'une réponse à un paquet
* Mise en place du ''LoginHandler''
* Mise en place de base de données utilisateur
==== Bilan ====
**Avancement des Objectifs:** 100%
**Révision des Itérations:** Les itérations suivantes ont été déplacées d'une semaine vers l'avant en éliminant l'itération tampon. Ceci nous calque sur le programme "normal".
**Améliorations Possibles:** Optimiser la répartition des tâches entre les membres du groupe. Ceci est difficile principalement à cause du manque d'expérience avec des "gros" projets de cerains membres du groupe.
=== Laureline (~6h) ===
* Effectué la mise en place du //NetworkHandler//.
=== Samuel (~15h) ===
* Création des dummy classes pour les tests
* Création du LoginScreen, LobbyScreen, CreateScreen, MainMenu
* Implémentation partielle de la logique du LobbyScreen
=== Yves (10h) ===
* Création de la base de donnée
* Mise en place du LoginHandler
L'effort prévu ne prenait pas en compte le manque de connaissance vis à vis du language.
C'était la perte de temps la plus importante, les itérations futures ne subiront normalement pas cela.
=== Christophe (6h) ===
* Aide à l'implémentation du LobbyScreen
Malheureusement j'ai perdu beaucoup de temps à cause du langage et de la compréhension globale de la structure du projet. Le partage du travail ne s'est pas fait équitablement au final, ce qui est dommage car certains ont travaillé plus que d'autres. Avec la génération de la map je vais pouvoir plus m'impliquer.
===== Iteration 2 =====
**Dates** //28 Avril - 4 Mai//
**Charge de Travail** 4h30 par personne (total 18h)
==== Objectifs ====
Pouvoir effectuer une demande de matchmaking,
entrer dans un lobby et "lancer" une partie une fois que tous les joueurs sont prêts
* Intégrer la communication client/serveur
* Réaliser //Queue up for a Game//
* Réaliser //Log in to the Admin//
==== Implémentation ====
=== Client ===
* Mettre en place le ''NetworkManager'' utilisant le réseau
* Implémenter la logique du ''MenuScreen'' et ''LobbyScreen''
=== Serveur ===
* Mise en place du ''LobbyHandler''
* Mise en place du système de Matchmaking
=== Admin ===
* Mettre en place l'application web
* Se connecter à la base de données du jeu
==== Bilan ====
**Avancement des Objectifs:** Client (70%), Serveur (70%), Admin (70%)
**Explication du Retard:** Mauvaise gestion du temps par rapport aux autre projets et laboratoires en cours.
**Révision des Itérations:** Les itérations ne vont pas être replanifiées le ratrd peut être rattrapé.
=== Laureline (~6h) ===
* Création du ''LobbyHandler''
* Mise en place du sytème de matchmaking
Les modules ont été mis en place, mais ils n'ont pas pu être testés car le client n'était pas implémenté.
=== Samuel (3h) ===
* Avancement dans la logique du Lobby Screen
=== Yves (0h) ===
* Rien fait...
=== Christophe (0h) ===
* Rien fait...
===== Iteration 3 =====
**Dates** //5 Mai - 11 Mai//
**Charge de Travail** 4h30 par personne (total 18h)
==== Objectifs ====
Initialiser l'état de jeu côté serveur et le transmettre au client.
* Réaliser //Play a Game// (initialisation)
* Réaliser //Ban Account// (admin side)
==== Implémentation ====
=== Client ===
* Recevoir l'état de jeu
* Afficher la carte
* Afficher les acteurs (bâtiments, unités)
=== Serveur ===
* Initialiser l'état de jeu
* Charger la carte
* Définir le Turn Order
* Placer les Bases
* Le transmettre au client
=== Admin ===
* Mettre en place une interface pour bannir un joueur
==== Bilan ====
**Avancement des Objectifs:** Client (0%), Serveur (0%), Admin (0%)
**Explication du Retard:** Mauvaise gestion du temps par rapport aux autre projets et laboratoires en cours.
**Révision des Itérations:** Les itérations ne vont pas être replanifiées le retard peut être rattrapé.
**Révision Itération 2:** Le match making a été partiellement implémenté, et présentait un bug non-directement résolvable. Il a donc été choisi que cet élément, non-indispensable au fonctionnement du jeu, serait supprimé de l'implémentation finale. Ceci permettra de rattraper le retard accumulé lors de cette itération (itération 3).
=== Laureline (~6h) ===
* Création d'un client de débug
La création d'un client de débug permet de tester les changements dans le serveur sans attendre que le client fasse ces modifications ce qui permet d'accélérer le développement du serveur.
=== Samuel (0h) ===
* Hum...
=== Yves (0h) ===
* Rien fait...
=== Christophe (3h) ===
* Tests et tuto libgdx avec Tiled
===== Iteration 4 =====
**Dates** //12 Mai - 18 Mai//
**Charge de Travail** 6h00 par personne (total 24h)
==== Objectifs ====
Gérer le passage de tours entre les joueurs.
* Réaliser //Play a Game// (initialisation)(passage de tours)
* Réaliser //Ban Account// (admin side)(server side)
==== Implémentation ====
=== Client ===
* Afficher la carte (données de test)
* Afficher les acteurs (bâtiments, unités) (données de test)
* Gérer l'affichage des tours (données de test)
* Afficher le joueur en cours
* Afficher le bouton "End Turn" pour terminer son tour
* Cacher le bouton "End Turn" hors tour
=== Serveur ===
* Initialiser l'état de jeu
* Charger la carte
* Placer les Bases
* Définir le Turn Order
* Gérer le passage de tour entre les joueurs
* Envoyer les paquets
* Assurer que seul le posséseur du jeton de tour peut terminer son tour
* Gérer les joueurs bannis dans le login manager
=== Admin ===
* Compléter l'admin (Login admin, bannir et lister les joueurs)
==== Bilan ====
**Avancement des Objectifs:** Client (90%), Serveur (90%), Admin (100%)
**Explication du Retard:** Le retard se situe seulement au niveau de la gestion des tours côté client et serveur. Ce n'est pas terminé, mais fini à 80% de chaque côté.
**Révision des Itérations:** La gestion des tours est presque terminée et sera rattrapée durant l'Itération suivante. Il reste environ 1h de travail partagée entre chaque côté, pour terminer cela.
**Avance:** La gestion du déplacement des unités a été implémentée, côté client, dans cette Itération au lieu de l'itération 5, ceci pour effectuer des tests sur la gestion de la carte. Cette étape est donc presque terminée du côté client.
=== Laureline (6h) ===
* Initialisation de l'état de jeu
* Correction de bugs divers
=== Samuel (2h) ===
* Correction sur le MainMenu
* Test du LoginScreen
=== Yves (~4h) ===
* Création de l'interface d'administration (4h)
=== Christophe (6h) ===
* Chargement d'un écran de jeu (map) avec tests de chargement de différentes sprite (base, unité)
* Test de gestion de la souris, clic, drag and drop
* Test de gestion des entrées clavier
===== Iteration 5 =====
**Dates** //19 Mai - 25 Mai//
**Charge de Travail** 5h00 par personne (total 20h)
==== Objectifs ====
* Réaliser //Play a Game// (gras = fait)
- **Le serveur notifie les clients qu'ils sont entrés dans une partie**
- **Le jeu affiche l'écran de jeu**
- **Le serveur crée l'état de jeu original**
- **Le serveur détermine l'ordre de passage des joueurs**
- //A effectuer tant qu'il reste plus d'un joueur//
- **Le serveur informe les clients du joueur en cours**
- //Tant que le joueur peut effectuer une action//
- **Le joueur effectue une action (déplacement, attaque, ...)**
- **Le serveur valide l'action et l'applique à l'état de jeu (retard)**
- **Le serveur informe les clients des changements dans l'état de jeu (retard)**
- //Si un joueur à été éliminé//
- Informer tous les joueurs du joueur éliminé
- Le joueur termine son tour
- Le serveur sélectionne le prochain joueur dans l'ordre de passage
- La serveur notifie de la fin de la partie
- Le jeu affiche le menu principal
==== Implémentation ====
=== Client (10h - Samuel et Christophe)===
* Recevoir l'état de jeu
* Sélection d'unité à l'aide de la souris (70% done)
* Requète de déplacement lors d'un clic droit (70% done)
* Afficher un message lors d'un refus du serveur
* Déplacement d'une unité lors d'un message du serveur (70% done)
=== Serveur (10h - Laureline et Yves)===
* Transmettre l'état de jeu au client
* Gestion de la requête de déplacement
* Broadcast si succès
* Reply si échec
=== Admin (1h - Yves)===
* Afficher l'historique des parties dans l'admin
==== Bilan ====
**Avancement des Objectifs:** Client (40%), Serveur (50%), Admin (100%)
**Révision des Itérations:** La gestion du déplacement d'une unité côté client a été implémentée en partie dans l'itération 4.
**Explication du retard:**
* Les transferts réseaux entre le client et le serveur demandent que l'on puisse sérializer les objets ciblés (carte, unités, etc.). Ceci a pour impact de devoir implémenter un serializer, car l'ECS (Entity Component System) Ashley n'est pas compatible avec l'interface serializable.
* L'interactor est un objet complexe, qui permet de synchroniser l'état de jeu et la gestion graphique du jeu (clic souris, etc.). Il a besoin de l'intégration du réseau notamment, nous avons donc pris du retard là dessus.
**Améliorations Possibles:** Prévoir ce que les tâches (transfert, etc.) vont devoir utiliser en background, le serializer par exemple.
=== Laureline (8h) ===
La transmission de l'état de jeu nécéssite l'implémentation d'une serialisation personnalisée pour pouvoir effectuer les synchronisations différentielles.
L'implémentation malheureusement pris plus de temps que prévu et n'est toujours pas terminé. Le retard est du à plusieurs tentatives de solutions qui n'ont pas abouti.
=== Samuel (4h) ===
* Création de l'Interactor (Mise à jour du GameState à partir des informations provenant du serveur).
* Mise en place de la logique de mise à jour de l'interface graphique.
=== Yves (1h) ===
* Création de la page statistiques (historique des parties) déjà implémentée dans l'itération 4 (avance).
=== Christophe (4h) ===
* Implémentation Requête de déplacement (70% avance étape 4)
* Ajout de la gestion d'objets graphique par cellule (et non plus par pixel)
===== Iteration 6 =====
**Dates** //26 Mai - 01 Juin//
**Charge de Travail** 5h par personne (total 20h)
==== Objectifs ====
Gestion des actions (dépendantes des archétypes) des acteurs
* Réaliser //Play a Game// en entier
- Le serveur notifie les clients qu'ils sont entrés dans une partie
- Le jeu affiche l'écran de jeu
- Le serveur crée l'état de jeu original
- Le serveur détermine l'ordre de passage des joueurs
- //A effectuer tant qu'il reste plus d'un joueur//
- Le serveur informe les clients du joueur en cours
- //Tant que le joueur peut effectuer une action//
- Le joueur effectue une action (déplacement, attaque, ...)
- Le serveur valide l'action et l'applique à l'état de jeu
- Le serveur informe les clients des changements dans l'état de jeu
- //Si un joueur à été éliminé//
- Informer tous les joueurs du joueur éliminé
- Le joueur termine son tour
- Le serveur sélectionne le prochain joueur dans l'ordre de passage
- La serveur notifie de la fin de la partie
- Le jeu affiche le menu principal
==== Implémentation ====
=== Client (10h) Christiophe et Samuel ===
* Synchronisation état de jeu et gui (Interactor) (50%)
* Afficher un panneau d'actions pour l'unité/bâtiment sélectionné
* Requète d'action au serveur
* Afficher un message lors d'un refus du serveur
* Mettre à jours l'affichage lors du succès
=== Serveur (10h) Yves et Laureline ===
* Terminer le serializer (50%)
* Gestion des requètes d'action
==== Bilan ====
**Avancement des Objectifs:** Client (10%), Serveur (10%)
**Révision des Itérations:** La synchronization de l'état de jeu avec la gui (Interactor) et le serializer ont en partie été implémentés durant l'itération précédente, mais n'ont pas été terminés. Ils sont donc à terminer dans cette itération-ci.
Cette itération a été complètement déplacée dans l'itération 7. Ceci est dû à une mauvaise gestion du temps du Projet de semestre (PRO) qui nous a pris énormément de temps cette dernière semaine afin de le terminer. Ce projet a aussi ces propres problèmes poru la gestion du temps, laissant cette itération-ci impossible à réaliser.
**Améliorations Possibles:** Eviter de prévoir des charges de travail trop grandes lors de la finalisation de projets concurrents.
=== Laureline (0h) ===
* Rien
=== Samuel (4h) ===
* Interactor
=== Yves (0h) ===
* Rien
=== Christophe (0h) ===
* Rien
===== Iteration 7 =====
**Dates** //02 Juin - 08 Juin//
**Charge de Travail** 8h00 par personne (total 32h)
**Objectifs**
* Terminer le scénario Play a Game
* Finaliser la documentation du projet
==== Implémentation ====
=== Client (12h) Christiophe et Samuel ===
* Synchronisation état de jeu et gui (Interactor) (50%)
* Afficher un panneau d'actions pour l'unité/bâtiment sélectionné
* Requète d'action au serveur
* Afficher un message lors d'un refus du serveur
* Mettre à jours l'affichage lors du succès
=== Serveur (8h) Laureline ===
* Terminer le serializer (50%)
* Gestion des requêtes d'action
=== Documentation 12h (8h Yves / 2h Samuel / 2h Christophe) ===
* Finaliser la documentation
==== Bilan ====
**Avancement des Objectifs:** Client (90%), Serveur (90%)
**Révision des Itérations:** L'itération 6 a été complètement déplacée dans cette itération. (voir bilan itération 6 pour plus de précision)
L'implémentation des "actions" d'unités est à compléter sur le serveur (créer, attaquer).
L'implémentation des "actions" d'unités est à compléter sur le client (créer, attaquer, bouger).
Déplacement dans l'itération 8.
**Améliorations Possibles:**
=== Laureline (10h) ===
* Terminé le serializer
* Implémenté la gestion des actions
* Fonctionne en théorie ;)
* Implémentation de la gestion du jeu (fin de partie)
=== Samuel (4h) ===
* Terminer l'interacteur
=== Yves (4h) ===
* Documentation
=== Christophe (2h) ===
* Avancement du client
===== Iteration 8 =====
**Dates** //09 Juin - 15 Juin//
**Charge de Travail** 5h00 par personne (total 20h)
**Objectifs**
* Terminer le client
* Terminer la documentation
* Préparation de la présentation
==== Implémentation ====
=== Client (5h) Christiophe et Samuel ===
=== Serveur (4h) Laureline ===
=== Documentation (5h Yves et 2h les autres) ===
* Finaliser la documentation
==== Bilan ====
**Avancement des Objectifs:** Client (???%), Serveur (???%)
**Révision des Itérations:** Rattrapage des derniers problèmes de fonctionnement du client et serveur (itération 7).
**Améliorations Possibles:**
=== Laureline (???h) ===
=== Samuel (???h) ===
=== Yves (???h) ===
* Documentation
=== Christophe (???h) ===
===== 16 Juin 2016 =====
Rendu du projet et Présentation.