Génie Logiciel Devoir

Software Engineering · notes

Browse all génie logiciel documents

Université de Caen Basse-Normandie

Département d’informatique, U.F.R. Sciences

L3 informatique, 2015–2016

Unité UE2

Génie logiciel

Devoir

Grégory Bonnet, Yann Mathet, Bruno Zanuttini

À rendre pour le vendredi 27 novembre 2015.

Ce devoir doit être réalisé par groupes de quatre étudiants. Les groupes devront être formés

lors de la deuxième séance de TP (lundi 14 septembre 2015), et un dépôt devra être créé sous

subversion pour chaque groupe (obligatoirement comme un sous-projet du projet TP Génie

Logiciel L3) lors de la sixième séance de TP (lundi 12 octobre 2015). Les noms court et

long du dépôt devront comporter les noms des quatre membres du groupe, par exemple : nom

court durand-dupont-smith-doe, et nom long Génie Logiciel Durand, Dupont, Smith, Doe.

Advertisement

D’autre part, Grégory Bonnet, Yann Mathet et Bruno Zanuttini devront être ajoutés comme

managers du dépôt. Si ces points ne sont pas respectés, le devoir ne sera pas corrigé (note

de 0). Le 27 novembre, le code de chaque groupe sera extrait de son dépôt pour correction :

un répertoire nommé livraison devra être présent à la racine et contenir le code nettoyé (le

dépôt pourra contenir d’autres répertoires, non consultés pour la correction). L’énoncé de ce

devoir correspond au TP fil rouge. Si vous réalisez les TP au fur et à mesure (en les terminant

à chaque fois dans la semaine si besoin), vous aurez de facto terminé le devoir à la fin du

neuvième TP de génie logiciel (le lundi 9 novembre 2015)

Vision synthétique de l’application

Nous souhaitons concevoir une application permettant de jouer des affrontements entre robots

sur une grille. Il s’agit d’une variation sur le thème du jeu de stratégie au tour par tour qui

pourrait ressembler à cela.

Partant d’une position initiale, chaque robot réalise à tour de rôle une des actions suivantes :

1

Advertisement

— faire instantanément feu, devant lui, avec un laser qui a une portée limitée,

— lancer un missile, devant lui, qui avance tout droit à chaque tour d’une case,

— avancer, reculer ou tourner de 90 degrés,

— activer un bouclier qui le protège pour ce tour des lasers et des missiles,

— ne rien faire.

Chaque action consomme une énergie du robot. Cette énergie se reconstitue partiellement

lorsque le robot ne fait rien. Un robot touché par un laser ou un missile sans être protégé

par son bouclier est détruit. La spécificité de l’application est que les robots ne sont pas

directement contrôlés par des joueurs humains mais exécutent simplement, à chaque tour,

une stratégie scriptée qui leur a été fournie au préalable. Cette stratégie devra en particulier

pouvoir être représentée sous la forme d’un arbre de décision.

Un arbre de décision est un arbre binaire dont les nœuds correspondent à des conditions (qui

peuvent être vérifiées ou non) et les feuilles des actions à exécuter. Un robot commence à

vérifier la condition associée à la racine de l’arbre, puis descend dans son fils de gauche si elle

Advertisement

est vraie ou dans son fils de droite si elle est fausse. Le processus est réitéré jusqu’à atteindre

une feuille qui indique l’action à exécuter. Par exemple, un arbre de décision (éminemment

naïf) peut être :

Un ennemi devant moi

oui

Ennemi à portée de laser

non

Avancer d’une case

oui

Tirer au laser

non

Tirer un missile

Notons que l’implantation d’une stratégie aléatoire pour de premiers tests est recommandée.

L’application finale devra posséder :

Advertisement

1. un moteur de jeu permettant de faire combattre les robots et de retourner un gagnant,

2. un volet d’interface graphique représentant l’arène, les robots et les événements du jeu,

3. un volet d’interface graphique représentant la stratégie d’un robot et permettant de la

construire ou la modifier en cours d’exécution.

Code et conception

L’application devra être codée en Java. La conception devra comporter trois paquetages isolant

(1) le moteur du jeu (robots, actions, règles, etc.), (2) les stratégies et tous les éléments pour les

représenter et (3) l’interface graphique. Les méthodes de base des deux premiers paquetages

devront être vérifiés par des tests unitaires, fournis avec le code. L’évaluation portera sur la

présence d’un code documenté, l’utilisation de patrons de conception appropriés et la propreté

générale du code (encapsulation, fonctions atomiques génériques, etc.). Si la qualité esthétique

de l’interface graphique ne prime pas, il est nécessaire qu’elle soit fonctionnelle.

2