You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Université Paris 7 - Denis Diderot<br />
IK3 : <strong>Projet</strong> programmation<br />
L2<br />
Année 2010-2011, 1 er semestre<br />
<strong>Projet</strong> : <strong>Bataille</strong> <strong>Navale</strong><br />
1 Introduction<br />
Le but de ce projet long est d’une part de mettre en application et de parfaire vos connaissances<br />
du langage Java et d’autre part d’apprendre des méthodes de travail en groupe et de gestion de<br />
projet.<br />
Le projet consistera à implémenter un jeu de bataille navale incluant la gestion d’une partie<br />
entre deux joueurs humains et le contrôle des règles du jeu ainsi que diverses extensions qui<br />
pourront comprendre une interface graphique ou une intelligence artificielle.<br />
Vous devrez rendre un projet fini incluant un code source se compilant sans message du compilateur<br />
et comportant des commentaires pour toutes vos classes et méthodes, ainsi qu’un manuel<br />
utilisateur et un court rapport.<br />
2 Rappel du jeu<br />
La bataille navale est un jeu se jouant à deux joueurs que l’on nommera A et B. Chacun<br />
d’eux dispose un certain nombre de bateaux sur une grille carrée de taille N. Ces bateaux<br />
sont typiquement des rectangles de largeur 1 et de longueur variant entre 2 et 6. Les joueurs<br />
s’entendent avant la partie sur un ensemble de bateaux identique pour chacun d’eux et les<br />
placent ensuite sur leur grille de telle sorte que deux bateaux d’un même joueur n’occupent pas<br />
les mêmes cases de la grille ni ne soient adjacents (pas même par un coin). Les joueurs ignorent<br />
la position des bateaux de l’autre joueur.<br />
À chaque tour, chaque joueur envoie à l’autre les coordonnées d’une case de la grille : un tir.<br />
Puis ils indiquent quel est le résultat du tir adverse : dans l’eau s’il n’y a pas de bateau aux<br />
coordonnées indiquées, touché s’il y en a un et coulé s’il y en a un et que toutes ses cases ont<br />
été touchées par un tir. Dans les deux derniers cas, le joueur indique aussi le type du bateau<br />
touché.<br />
La partie se termine lorsque tous les bateaux de l’un des joueurs ont été coulés. Le cas échéant,<br />
le joueur restant est déclaré vainqueur (ou la partie est nulle si les deux joueurs perdent toute<br />
leur flotte de bateaux au même tour).<br />
3 Modalités pratiques du projet<br />
Le projet sera réalisé en binôme. Chacun doit participer de façon équitable, ce qui sera vérifié<br />
lors des soutenances et des séances de TP. Les binômes doivent être formés au plus tard lors de<br />
la troisième séance de TP et ne pourront pas être modifiés par la suite.<br />
Le projet doit être implémenté en JAVA[1] en utilisant Eclipse[2] et doit respecter les conventions<br />
de codage établies par SUN[3]. De cette façon, vous pourrez lire plus facilement le code écrit par<br />
votre binôme, et le chargé de TP pourra mieux vous aider. De plus, toutes vos classes ainsi que<br />
toutes vos méthodes doivent être documentées en utisant Javadoc[4].<br />
1
Enfin, le logiciel Subversion[5] permettant un travail collaboratif sur des codes sources sera<br />
présenté en cours et il vous sera demandé de l’utiliser pour gérer votre projet.<br />
4 Architecture du projet<br />
Votre projet sera constitué de deux programmes que vous allez écrire et qui vont interagir pour<br />
jouer à la bataille navale : un serveur, qui gère une partie, et un client, qui permet aux joueurs<br />
de choisir la position de leurs bateaux ainsi que les tirs qu’ils effectueront. Le déroulement d’une<br />
partie est le suivant :<br />
1. deux clients démarrent et attendent d’être contacté par le serveur ;<br />
2. le serveur du jeu démarre et choisit une taille pour la grille ainsi que le nombre de bateaux<br />
de chaque type qui seront utilisés ;<br />
3. le serveur se connecte aux deux clients et leur envoie la configuration du jeu qu’il a choisie<br />
à l’étape 2 ;<br />
4. les deux clients choisissent (en faisant appel à l’utilisateur respectif de chacun d’eux)<br />
l’emplacement de leurs bateaux conformément aux règles du jeu et à la configuration qui<br />
a été définie et transmettent ces emplacements au serveur, qui en vérifie la validité ;<br />
5. à chaque tour, le serveur demande aux clients les coordonnées de leur tir et leur envoie<br />
ensuite le résultat de ce tir ;<br />
6. à chaque tour, les clients demandent à l’utilisateur les coordonnées sur lesquelles il veut<br />
tirer pour envoyer cette information au serveur ;<br />
7. le serveur met fin à la partie et affiche le score lorsque tout les bateaux de l’un ou l’autre<br />
client ont été coulés.<br />
5 Tâches<br />
Vous devez écrire un client et un serveur qui implémentent toutes les étapes du jeu décrites cidessus.<br />
Pour cela, nous vous fournirons une classe prenant en charge toutes les communications<br />
entre le serveur et les clients.<br />
Vos deux programmes doivent implémenter correctement toutes les fonctionnalités décrites au<br />
paragraphe 4 pour que votre projet puisse avoir au moins la moyenne.<br />
En plus du code documenté de ces deux programmes, vous devez fournir deux documents :<br />
– un manuel utilisateur qui doit permettre à quiconque d’utiliser votre programme. Il doit être<br />
court et précis ;<br />
– un rapport détaillant votre démarche pendant le projet, l’interaction entre les différentes<br />
classes de vos programmes, le protocole de communication entre votre serveur et les clients,<br />
les solutions proposées aux problèmes que vous avez rencontrés et, si vous l’estimez nécessaire,<br />
des explications concernant certains algorithmes. Le rapport ne doit pas excéder 6 pages.<br />
Votre projet sera évalué sur la base du code source de vos programmes, des deux documents<br />
détaillés ci-dessus ainsi que de votre soutenance durant laquelle vous devrez faire tourner votre<br />
programme sur vos exemples ainsi que sur les nôtres et répondre aux questions qui porteront<br />
sur l’ensemble de votre rendu. Le projet compte pour 50% de la note du cours, l’examen final<br />
pour 25% de la note (il portera aussi bien sur la programmation en Java que sur les méthodes de<br />
gestion de projet abordées durant le cours) et le suivi de votre travail durant les TP comptera<br />
2
pour les 25% restants. Ce dernier point sera évalué d’une part en vérifiant que votre projet<br />
suit au minimum un certain calendrier qui vous sera communiqué pendant les séances de TP et<br />
d’autre part par votre utilisation effective des outils de collaborations et de gestion de projet.<br />
6 Extensions<br />
Pour des points supplémentaires sur la note de projet, vous pouvez ajouter des fonctionnalités<br />
à votre programme. Chaque extension que vous mettrez en œuvre dans votre projet devra être<br />
décrite dans votre rapport. Voici quelques exemples qui ne sont pas limitatifs (vous pouvez<br />
ajouter d’autre fonctionnalités à votre choix, mais il est recommandé d’en parler avant avec vos<br />
chargés de TP) :<br />
– vous pouvez écrire un second client (qui utilisera le même protocole de communication avec<br />
le serveur) faisant appel à une intelligence articielle pour placer ses bateaux et pour jouer,<br />
plutôt qu’à une interface<br />
– l’affichage des informations du jeu pourrait être graphique plutôt qu’en mode texte, nous vous<br />
fournissons une classe JAVA pour gérer l’affichage ;<br />
– en vous entendant à l’avance entre les groupes pour utiliser le même protocole de communication,<br />
il pourrait être possible de faire jouer les uns contre les autres vos différents client ;<br />
– le serveur pourrait charger la configuration du jeu (taille de la grille, etc.) depuis un fichier<br />
ou depuis la ligne de commande ;<br />
– le serveur pourrait exécuter un grand nombre de parties successivement entre deux clients<br />
avant d’afficher des statistiques des victoires de chacun d’eux ;<br />
– le serveur pourrait se connecter à des clients qui ne sont que des spectateurs (il reçoivent les<br />
coups joués et connaissent éventuellement la position des bateaux, mais ne joue pas).<br />
7 Conseils<br />
Des conseils sur l’organisation seront donnés en cours. N’oubliez pas qu’une mauvaise organisation<br />
théorique au début pourra s’avérer catastrophique à la fin de l’implémentation. Pensez à bien<br />
découper le code et à vous distribuer les tâches. Le jeu doit fonctionner à chaque modification.<br />
Pensez à vérifier qu’à chaque extension que vous implémenterez, la partie basique fonctionne<br />
toujours.<br />
Références<br />
[1] Un tutoriel très complet sur Java :<br />
http://download.oracle.com/javase/tutorial<br />
[2] Une introduction à Eclipse :<br />
http://www.enseignement.polytechnique.fr/informatique/profs/Julien.<br />
Cervelle/eclipse<br />
[3] Convention de codage en Java :<br />
http://www.oracle.com/technetwork/java/codeconventions-150003.pdf<br />
[4] Utiliser Javadoc :<br />
http://www.liafa.jussieu.fr/~moro/javadoc/javadoc_how_to_use.htm<br />
[5] La documentation de Subversion :<br />
http://svnbook.red-bean.com<br />
3