Sujet du Projet Virus

publicité
Projet Java - ING3 2009-2010
Table des matières
Objectif ......................................................................................................................................................... 2
Participants ................................................................................................................................................... 2
Caractéristiques ............................................................................................................................................ 2
Le Scénario.................................................................................................................................................... 3
Le début de partie .................................................................................................................................... 3
Un tour de partie ...................................................................................................................................... 4
La fin de partie .......................................................................................................................................... 4
Pénalités ................................................................................................................................................... 4
Condition de défaite d’une équipe (élimination) ..................................................................................... 4
Conditions de victoire............................................................................................................................... 4
Constitution des équipes .............................................................................................................................. 4
Travail à réaliser pour chaque équipe .......................................................................................................... 5
Planning des équipes .................................................................................................................................... 5
Annexe Javadoc : Classes de packages client ou virus ................................................................................. 7
Package du serveur : les 3 classes accessibles par toutes les équipes ......................................................... 7
La classe client.Client ................................................................................................................................ 7
Client ..................................................................................................................................................... 8
isConnected .......................................................................................................................................... 8
connexionLocale ................................................................................................................................... 8
connexionECE ....................................................................................................................................... 9
connexion ............................................................................................................................................. 9
getListe ............................................................................................................................................... 10
getClassement .................................................................................................................................... 10
decision ............................................................................................................................................... 10
La classe client.Voyage ........................................................................................................................... 11
Voyage ................................................................................................................................................ 12
getDuree ............................................................................................................................................. 12
setDuree ............................................................................................................................................. 12
getIdPays ............................................................................................................................................ 13
setIdPays ............................................................................................................................................. 13
getIdPersonne .................................................................................................................................... 13
setIdPersonne ..................................................................................................................................... 13
La classe virus.Serveur ............................................................................................................................ 13
Serveur................................................................................................................................................ 13
1/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
Objectif
Ce jeu qui se jouera en réseau consiste, pour les différents pays représentés par les équipes en jeu, à
résister à la contamination par des virus.
Malheureusement, la mondialisation rend la lutte antivirale difficile ! Heureusement, les labos de
recherche de chaque pays sont efficaces et mettent au point des antidotes. On considère que les
antidotes fabriqués sont en nombre suffisant pour l’ensemble de la population mondiale. La course
contre la mort est lancée…
Participants
Les équipes, représentant des pays, sont les clients du serveur qui agissent pour survivre en envoyant
leur requête au serveur.
Le serveur, chargé de valider les requête des équipes et de leur retourner la réponse.
Requête envoyée
EQUIPE
SERVEUR
Retour réponse
Caractéristiques










2/13
Une équipe est définie par son nom, son nombre d’habitants maximum limité à 50, son nombre
d’habitants encore vivants et son nombre total de points de vie pour l’ensemble de ses
habitants.
Un pays est représenté par une équipe particulière dans laquelle est défini l’ensemble de ses 50
habitants
Une personne est définie par son identifiant unique, son état de maladie et son nombre de
points de vie.
Un habitant est représenté par une personne particulière pour laquelle sont définis son pays de
résidence, son pays de destination dans lequel l’habitant voyage et sa durée de séjour.
L’état de maladie d’une personne détermine si elle est contaminée ou non. Cet état est défini
par un numéro : 0 si la personne est saine ou un numéro de virus positif si elle est contaminée.
C’est le serveur qui choisit arbitrairement les personnes saines et contaminées.
Un antidote est identifié par un numéro unique positif égal au numéro de virus qu’il soigne. Cet
antidote soigne le virus d’une personne contaminée (état de maladie positif) et encore vivante
(nombre de points de vie positif).
Le pays de résidence d’une personne est le pays dans lequel la personne habite. Ce pays de
résidence ne change jamais : une personne fait donc partie des 50 habitants résidant dans le
pays.
Le pays de destination d’une personne est le pays dans lequel la personne est en séjour.
En début de jeu, toutes les personnes sont chez elles : leur pays de résidence et de destination
sont donc les mêmes. Durant la partie, toute personne qui décide de voyager doit préciser le
nom du pays de destination et la durée de séjour.
Le nom du pays de destination doit exister sous peine de rester sur place.
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010






La durée de séjour d’une personne correspond au nombre de jours maximum (chaque tour
d’une partie représentant une journée) passé dans le pays de destination. Cette durée
correspond au temps que la personne va séjourner dans le pays de destination, puis de son
retour dans son pays de résidence. Le changement du pays de destination est validé par le
serveur seulement si la durée est comprise entre 1 et 10.
Quand la personne revient dans son pays de résidence, le pays de destination lui donne son
antidote selon la probabilité suivante : durée de séjour / 10. À cet instant seulement, la
personne sait si elle est soignée (état de maladie à 0, nombre de points de vie à fond) ou pas. À
son retour, son pays de résidence et de destination sont de nouveau identiques.
La personne qui décide de changer de pays de destination avant expiration de la durée de séjour
se voit refuser ce changement ; la personne devra donc attendre la fin du séjour pour pouvoir
changer de pays de destination.
Chaque virus est caractérisé par sa virulence (degré de rapidité de multiplication du virus)
variable selon la résistance de la personne qu’elle contamine. À chaque tour de partie, ce degré
de virulence fait perdre à la personne contaminée un certain nombre de points de vie tiré
aléatoirement entre 0 et 20 par le serveur, dans la limite de la mort.
À tout instant, une personne ne peut être contaminée que par un seul virus à la fois.
Dès qu’une personne saine est contaminée par un virus, le serveur change son état de maladie
(le numéro devient positif). Son nombre de points de vie peut commencer à diminuer dès le
tour suivant.
Dès qu’une personne contaminée et vivante est soignée par un antidote, le serveur change son
état de maladie à 0 (top santé !), et son nombre de points de vie à fond.
Le Scénario
Le début de partie
Au début du jeu, un virus différent pour chaque pays est propagé. Aucun pays n’est épargné.
La banque mondiale de la santé, représentée par le serveur, est chargée de superviser les labos de tous
les pays pour la mise au point des antidotes. Mais la maladresse et la lourdeur de son administration a
provoqué le chao : la banque a ordonné à chaque labo de mettre au point un antidote qui détruit le
virus propagé dans un autre pays.
Pour commencer le jeu, chaque pays doit se connecter au serveur en lui fournissant une seule
information : l’adresse hôte du serveur.
Une fois connecté, le pays initialise le nom de son équipe et le communique au serveur pour s’inscrire à
une partie. Une fois que le pays s’est inscrit, le serveur lui répond.
Si l’inscription réussit, le serveur retourne l’information du pays inscrit. La partie peut alors
commencer…
3/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
Un tour de partie
À chaque tour de partie (une journée fictive) durant un certain délai (voir plus bas), les pays peuvent
accéder à divers informations, puis prendre une décision de jeu. Cette décision revient à envoyer un ou
plusieurs personnes en voyage, en précisant le pays de destination et la durée de séjour. Les
commandes possibles sont alors :



Prendre une décision avec la méthode decision
Connaître le classement des pays avec leur score respectifs avec la méthode getClassement.
Connaître la liste des pays encore dans l’univers avec la méthode getListe
Si une décision est partiellement impossible (habitant déjà en voyage, habitant d’un autre pays, habitant
inexistant ou pays inexistant), la demande de départ en voyage est ignorée pour cet habitant, aucune
exception n’est renvoyée.
À la fin d’un tour, le serveur retourne le résultat de la décision sous la forme d’un String (informations
sur l’ensemble des habitants du pays). Un nouveau tour commence alors.
La fin de partie
Quand la partie se termine, le joueur est automatiquement déconnecté.
Pénalités
Tous les tours, le serveur enlève aléatoirement un certain nombre de points de vie à tous les individus
contaminés.
Condition de défaite d’une équipe (élimination)
Si une équipe se retrouve avec une population vivante de 0, elle est automatiquement éliminée et ne
peut plus participer aux tours. S’il n’y a pas de décision prise au bout de 2 secondes, l’équipe est
éliminée.
Conditions de victoire
À la fin du temps règlementaire, le vainqueur est la ou les équipe(s) qui a (ont) la population vivante la
plus élevée.
Constitution des équipes
Les équipes de projet comprendront 3 ou 4 étudiants, ni plus ni moins, avec au moins 1 nouveau et 2
anciens par équipe, choisis par vos soins au sein d’un même groupe de TD.
4/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
Travail à réaliser pour chaque équipe
Chaque équipe d'étudiants devra écrire un programme en Java contenant une Intelligence Artificielle qui
jouera au jeu dont les règles sont définies précédemment.
Ce programme devra se décliner en deux versions :
1. Une en mode console pour participer à la compétition de fin d'année, totalement indépendante
du mode graphique. Vous afficherez les informations utiles : pays de résidence (nom, nombre
d’habitants vivants, nombre de points de vie total et détail des informations de chaque
habitant), éventuellement le déplacement aller/retour des habitants dans un pays de
destination, les meilleures et des pires équipes avec leur nom et leur score.
2. Une en mode graphique, inspirée de l’interface du serveur de manière plus locale et
dépendante du mode console (pas le contraire !).
Planning des équipes
 Le sujet est mis en ligne dans la semaine du 8 mars.
 Les équipes seront transmises par le délégué à votre responsable de cours par mail : [email protected]
au plus tard le mercredi 17 mars midi, en précisant le groupe de TD et le(s) nouveau(x) pour chaque
équipe.
 Le rapport de mi-parcours devra être déposé le dimanche 11 avril 23h55 dernier délai. Les
modalités de dépôt vous seront fournies ultérieurement. Les équipes devront déposer un rapport au
format .doc, .docx ou .pdf avec un seul dépôt par équipe. Le fichier sera nommé sous la forme
TDxx-nom1-nom2… avec xx le numéro de groupe de TD suivi des noms des étudiants de l’équipe.
Ce rapport d’environ 10 pages hors annexes doit contenir :











5/13
Une page de garde avec le titre, les noms des étudiants et le groupe de TD
Un sommaire dont chaque partie référence une page
Une présentation brève et personnalisée du projet
Un planning prévisionnel
Une organisation de l’équipe, répartition des rôles si possible
Un diagramme de classes préparatoire présentant l’organisation générale du programme
Une analyse détaillée des problèmes envisagés, ainsi qu’une idée de comment les résoudre
Une description générale de la stratégie envisagée pour l’IA
Une présentation des maquettes de l’interface graphique en commentant les composants
graphiques utilisés et leur disposition
Un bilan intermédiaire de l’état du travail effectué avec à l’appui des copies d’écran de
l’exécutable en mode console (trace d’exécution sous forme de messages clairs) et graphique
(visualisation de vos composants graphiques)
Annexes : la documentation Javadoc sur l’état d’avancement de votre code et une bibliographie
de toutes vos sources (web, livres etc.)
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
 Le code en mode console seulement du programme est à déposer au plus tard le dimanche 2 mai à
23h55. Les modalités de dépôt vous seront fournies ultérieurement. Ce code en mode console sera
considéré comme la dernière version valide pour la compétition. Les équipes devront déposer un
fichier d’archive .jar nommé sous la forme TDxx-nom1-nom2… avec un seul dépôt par équipe. Ce
fichier jar devra contenir la documentation Javadoc du code en mode console, les sources .java et
les fichiers binaires .class du mode console seulement.
 La soutenance aura lieu dans la semaine du 3 mai. Le jour de la soutenance, chaque équipe
présentera en 10 minutes l’essentiel de sa version finale en mode console et en mode graphique par
vidéoprojecteur devant tout son groupe de TD. 5 minutes supplémentaires seront consacrées aux
questions de votre chargé de TP. L’équipe devra également présenter son diagramme de classes UML
et sera interrogée sur son code, présentation de la documentation Javadoc des 2 modes (console et
graphique) à l’appui. Chaque membre de l’équipe devra présenter sa part de travail spécifique et se
partager équitablement le temps de parole avec les autres membres.
Le chargé de TP interrogera chaque membre de l’équipe sur son travail et mettra à chaque équipe
une note sur la qualité de la présentation orale et de la réalisation, en termes de programmation
objet en Java et d’adéquation de la solution proposée avec le cahier des charges représentant les
attentes du client (le chargé de TP). Tout membre de l’équipe qui n’est pas susceptible de présenter
son travail se verra pénaliser par rapport aux autres membres.
Les critères d’évaluation en termes de réalisation sont les suivants :
 En mode console : montrer une trace d’exécution claire en respect du travail à réaliser
 En mode graphique : l’ergonomie, la fluidité, la mise en forme des composants graphiques sans
artifice et l’affichage des informations utiles et claires sont les critères prédominants. Avec un
avantage pour ceux qui réalisent eux-mêmes leur propre interface graphique, sans utilisation de
code autogénéré souvent de moins bonne qualité visuelle.
Vous ne serez pas notés sur la qualité de votre IA, cette dernière étant difficilement évaluable.
 La grande compétition de la promo entière aura lieu dans la semaine du 17 mai en amphi du
CNAM. La date exacte vous sera fournie ultérieurement. Cette compétition se déroulera en 2 ou 3
parties de 15 minutes maximum chacune. Pour chaque partie, le serveur lancera, via un script, tous
les exécutables .jar des équipes. La partie sera diffusée sur vidéoprojecteur. Toute équipe éliminée
dans une partie ne jouera pas les parties suivantes. Les 3 premières équipes victorieuses de la
dernière partie seront récompensées par des lots. En cas d’ex-aequo, on départagera toutes les
équipes victorieuses par une dernière partie.
6/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
Annexe Javadoc : Classes de packages client ou virus
Package du serveur : les 3 classes accessibles par toutes les équipes
Voir la documentation Javadoc sur la page http://michelsalib.com/virus/
Class Summary
client.Client
Client contient l'ensemble des fonctions nécessaires pour communiquer avec le serveur
de jeu.
client.Voyage
Voyage contient les informations nécessaires pour faire voyager un habitant dans un
autre pays.
virus.Serveur Classe de lancement d'un serveur.
Exception Summary
client.DureeNonValideException
Exception lancée quand un voyage tente d'être défini avec une durée
non comprise entre 1 et 10 inclus.
La classe client.Client
Client contient l'ensemble des fonctions nécessaires pour communiquer avec le serveur de jeu.
Constructor Summary
Client()
Constructeur de Client
Method Summary
java.lang.String connexion(java.lang.String ip, java.lang.String nom)
Se connecte au serveur distant puis identifie le joueur pour démarrer une
partie.
7/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
java.lang.String connexionECE(java.lang.String nom)
Se connecte au serveur hébergé par l'ECE.
java.lang.String connexionLocale(java.lang.String nom)
Se connecte au serveur hébergé sur la machine locale.
java.lang.String decision(java.util.ArrayList<Voyage> voyages)
Envoie au serveur la décision que le joueur prend pour le tour et signifie
que celui-ci est prêt à attendre le tour suivant.
java.lang.String getClassement()
Obtient auprès du serveur le classement des joueurs.
java.lang.String getListe()
Obtient auprès du serveur la liste des joueurs.
boolean isConnected()
Retourne si l'instance est connectée ou non.
Constructor Detail
Client
public Client()
Constructeur de Client
Method Detail
isConnected
public boolean isConnected()
Retourne si l'instance est connectée ou non.
Returns:
true si l'instance connectée, false sinon
connexionLocale
public java.lang.String connexionLocale(java.lang.String nom)
Se connecte au serveur hébergé sur la machine locale. L'ip utilisée est alors 127.0.0.1 et
le port 12345. Ensuite le joueur est identifié pour démarrer une partie.
Si une partie est en cours, une déconnexion est lancée.
8/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
La fonction retourne une String informant sur l'état des habitants du pays conformément
à la fonction decision.
Parameters:
nom - Le nom de l'équipe qui se connecte
Returns:
L'état du pays conformément à la fonction decision
connexionECE
public java.lang.String connexionECE(java.lang.String nom)
Se connecte au serveur hébergé par l'ECE. Ensuite le joueur est identifié pour démarrer
une partie.
Si une partie est en cours, une déconnexion est lancée.
La fonction retourne une String informant sur l'état des habitants du pays conformément
à la fonction decision.
Parameters:
nom - Le nom de l'équipe qui se connecte
Returns:
L'état du pays conformément à la fonction decision
connexion
public java.lang.String connexion(java.lang.String ip,
java.lang.String nom)
Se connecte au serveur distant puis identifie le joueur pour démarrer une partie.
Si une partie est en cours, une déconnexion est lancée.
La fonction retourne une String informant sur l'état des habitants du pays conformément
à la fonction decision.
Parameters:
ip - L'ip du serveur
nom - Le nom de l’équipe qui se connecte
Returns:
L'état du pays conformément à la fonction decision
9/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
getListe
public java.lang.String getListe()
Obtient auprès du serveur la liste des joueurs. Celle-ci se présente sous la forme d'une
chaîne formatée sous la forme suivante avec les séparateurs | et ; :
Id|NomDuPays;id|nomDuPays; …
Par exemple :
1|Canada;2|USA;3|Suisse;4|Italie;
Il y a comme pays dans l’univers le Canada, les USA, la Suisse et l’Italie qui ont pour id
respectives 1, 2, 3 et 4.
Returns:
La chaine formatée représentant la liste
getClassement
public java.lang.String getClassement()
Obtient auprès du serveur le classement des joueurs. Celle-ci se présente sous la forme
d'une chaîne formatée sous la forme suivante avec les séparateurs | et ; :
Id|score;id|score; …
Par exemple :
5|400;10|390;1|387;
Le premier pays au classement est celui qui a pour id 5, avec 400 points. Le second pays
a pour id 10 et pour score 390. Le dernier pays a pour id 1 et comme score 387.
Returns:
La chaine formatée représentant la liste
decision
public java.lang.String decision(java.util.ArrayList<Voyage> voyages)
Envoie au serveur la décision que le joueur prend pour le tour et signifie que celui-ci est
prêt à attendre le tour suivant. La décision est composée de l'ensemble des voyages que le
joueur souhaite faire faire à ses habitants.
La fonction rend la main lorsque le tour suivant commence et retourne une String
contenant les informations sur les différents habitants du pays du joueur.
Si le joueur est mort, il peut continuer à observer la partie, la chaine de retour est alors
"PaysMort".
Si la partie se termine la fonction lance automatiquement une déconnexion et actualise la
valeur de retour de isConnected().
10/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
La chaine de retour, avec les séparateurs | ou ; se présente sous cette forme :
idHabitant|pointsDeVie|maladie|idDuPays|tempsDeVoyageRestant;…
Ou bien:
PaysMort
Par
exemple
:
1|95|3|1|1;2|94|0|2|-3;
Le pays a 2 habitants. Le premier a pour id 1, il a 95 points de vie, il est atteint de la
maladie 3, il est dans le pays 1 et il reste encore 1 jour dans ce pays. Le second habitant a
pour id 2, il a 94 points de vie, il n’est pas malade, il est dans le pays 2 et il doit
manifestement être à la maison depuis 3 jours puisqu’il a un temps de voyage restant
négatif.
Parameters:
voyages - L'ArrayList des voyages souhaités
Returns:
La chaine formatée représentant les habitants du joueur
La classe client.Voyage
Voyage contient les informations nécessaires pour faire voyager un habitant dans un autre pays.
Constructor Summary
Voyage(int idPersonne, int idPays, int duree)
Construit un voyage avec l'ensemble des paramètres définis.
Method Summary
int getDuree()
int getIdPays()
int getIdPersonne()
void setDuree(int duree)
Set la durée du voyage
11/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
void setIdPays(int idPays)
void setIdPersonne(int idPersonne)
Constructor Detail
Voyage
public Voyage(int idPersonne,
int idPays,
int duree)
throws DureeNonValideException
Construit un voyage avec l'ensemble des paramètres définis.
Parameters:
idPersonne - L'id de la personne à faire voyager
idPays - L'id du pays de destination
duree - La durée du voyage, doit être compris entre 1 et 10 inclus.
Throws:
DureeNonValideException - Lorsque la durée n'est pas comprise entre 1 et 10 inclus.
Method Detail
getDuree
public int getDuree()
setDuree
public void setDuree(int duree)
throws DureeNonValideException
Set la durée du voyage
Parameters:
duree - La durée du voyage, doit être comprise entre 1 et 10 inclus.
Throws:
DureeNonValideException - Lorsque la durée n'est pas comprise entre 1 et 10 inclus.
12/13
Charlie Fancelli – Michel Salib - JP Segado
Projet Java - ING3 2009-2010
getIdPays
public int getIdPays()
setIdPays
public void setIdPays(int idPays)
getIdPersonne
public int getIdPersonne()
setIdPersonne
public void setIdPersonne(int idPersonne)
La classe virus.Serveur
Classe de lancement d'un serveur. Seul le constructeur est utile, tout le reste est géré
automatiquement.
Constructor Summary
Serveur(Serveur.Methode methode, int param, int nbBots, boolean gui)
Construit et lance un serveur de jeu avec les paramètres définis.
Constructor Detail
Serveur
public Serveur(Serveur.Methode methode,
int param,
int nbBots,
boolean gui)
Construit et lance un serveur de jeu avec les paramètres définis.
Parameters:
methode - Timeout ou NbClients défini si le serveur se lance après un certain temps écoulé ou
bien un certain nombre de joueurs connectés.
param - Paramètre de la méthode. Soit le temps à attendre en seconde ou bien le nombre de
client à attendre avant de lancer la partie.
nbBots - Le nombre de bots à ajouter à la partie.
gui - Si oui ou non l'interface doit être lancée.
13/13
Charlie Fancelli – Michel Salib - JP Segado
Téléchargement