29.05.2014 Views

Projet: Bataille Navale - PPS

Projet: Bataille Navale - PPS

Projet: Bataille Navale - PPS

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!