Conception agile de projets informatiques et génie logiciel : TP3 - Refactoring et design-patterns

Objectif

Il vous est demandé d’effectuer une ré-ingénierie d’un code existant en mettant en œuvre les patrons de conception vus en cours.

Votre travail devra être rendu sous forme d’un projet déposé sur Github, au plus tard le 30 Novembre à 17h59.

Penser à remplir dès à présent le questionnaire de rendu indiquant votre binôme et votre dépôt Git. Le dépôt ne sera relevé qu’après la date de rendu.

Déroulement

Le travail peut être organisé en deux étapes :

Ressources

Partie 1 : Ré-ingénierie du code

Le code fourni lors de la première séance est un package relativement fouillis. Toutes les classes sont dépendantes les unes des autres, les couches graphique et métier ne sont pas séparées.

Il va vous falloir reconcevoir le code en appliquant les patrons de conception adéquats. Pour cela, vous devez réorganiser les éléments de l’application. Entre autres, l’affichage des joueurs doit être séparé de leur gestion (déplacements, stratégies, etc.). Les changements dans le modèle métier (déplacements) devront être répercutés dans l’affichage.

L’utilisation d’entrées claviers ou souris entraînera des changements dans le modèle métier en passant par un contrôleur.

Partie 2 : Extension

On commencera par ajouter des éléments de contrôle au jeu pour le faire démarrer, le mettre en pause, etc. On utilisera pour cela des widgets javafx tels que des boutons.

Ajouter ensuite un mécanisme de contrôle des collisions en réfléchissant à son placement dans une architecture MVC. Les collisions peuvent être entre :

Chaque joueur avec une IA aura une tactique propre qui consiste à :

Toute autre stratégie est possible.

Faites en sorte que la tactique puisse être changée en cours de partie (via une action utilisateur sur un bouton par exemple).

Pour suivre et contrôler le jeu, on disposera de plusieurs vues:

Au TP suivant nous rajouterons des tests permettant de vérifier qu’une balle ou un joueur ne sort jamais du terrain, et que les obstacles sont bien considérés. Conseils pour la réalisation

Faites un modèle du domaine du jeu que vous voulez mettre en place : acteurs, caractéristiques des acteurs, obstacles, tactique, etc. Organisez vos classes en packages pertinents.

Pensez à utiliser les patterns de création, mais aussi de structure et de comportement.

Rendu du TP / projet

Les projets peuvent être rendus en binômes.

Votre travail devra être rendu sous forme d’un projet déposé sur Github, au plus tard le 30 Novembre à 17h59. (seule les versions poussées avant cette date seront utilisées)

Pensez à remplir dès à présent le questionnaire de rendu indiquant votre binôme et votre dépôt Github. Le dépôt ne sera relevé qu’après la date de rendu. Votre dépôt sur github devra contenir :

Le rapport doit comprendre une présentation globale du projet, une motivation des choix d’architecture (et des patterns choisis), et leur explication en s’aidant de diagrammes appropriés et adaptés au degré de précision et au type d’explication. Donc des diagramme de classe, mais pas que cela, et pas de plats de spaghettis généré automatiquement représentant tout le code.

Barême indicatif (sur 19, remis sur 20) :