CONSTANTIN Yves-Antoine
ROATTINO Hervé
Professeur responsable :
M. BUFFA.

DESS ISI ITRA
Ecole Supérieure en Sciences Informatiques.
Université de Nice - Sophia Antipolis.
Projet Java : charger le "zip", avec les sources et la doc.
 
 




Bataille Navale

C'est nouveau, c'est en réseau,
et on peut même jouer à dix !
 
 

REGLES DU JEU :


 










        Il comporte de deux a dix participants. La taille (nombre de lignes et de colonnes) de la grille de jeu s'agrandit en fonction du nombre de concurrents. Ce nombre est convenu au début de la partie, seul le nombre prévu de personnes pourra rejoindre le jeux qui ne débutera pas avant que tout le monde ait placé sa flotte.
 

Attention : L'initiateur commence avant toute chose par lancer un RMI registry.

L'initiateur du jeux va préciser le "Nom de sa flotte" et lancer un nouveau jeu (new game), puis saisira ensuite le nombre de joueurs.
 



 


Des lors les autres participants pourront se joindre a la partie, en commençant par donner leur "nom de flotte" puis le nom de l'ordinateur de " l'initiateur " (serveur), avant de préciser qu'ils rejoignent une partie (join game).
 
 

Maintenant il faut disposer sa flotte...


 


            Chaque joueur dispose de dix bateaux, en fait cinq types de navires différents en deux exemplaires chacun : un horizontal et un vertical. Une flotte ne pouvant être composée que d'un seul élément de chaque catégorie. Pour positionner un bateau il suffit d'effectuer un "drag & drop". Lorsque tous les bâtiments sont en place, on valide la flotte avec le menu "Game"  et le menu item "Fin de positionnement". Là les navires inutiles disparaissent et la partie peut commencer.
On note la liberté de superposer ses bateaux (Attention : si un adversaire tire a cet endroit, il les atteindra évidement tous et en cumulera les points.)
 
 

On arme son tir...


 


            En cliquant sur la case correspondant à la cible de notre choix, on décide de l'endroit où l'on va tirer. La case se sélectionne alors en gris, en attendant que les autres participants aient effectué eux aussi leur choix. Ensuite le tir est lancé sur toutes les flottes adverses. Il y a trois possibilités de résultat :

Plusieurs tirs consécutifs au même endroit.

            Il est chronologiquement évident, que si un joueur tire trois fois consécutives au même en droit sur un bateau et que celui-ci est coulé au deuxième tour, lors du deuxième tir par un autre joueur :
au premier tir, la case cible du tireur se colore en rouge, au deuxième elle se colore en orange, et au troisième en blanc.
 
 

Coulé...


 


            Lorsqu'un bateau est atteint à sa ou ses dernière(s) case(s) restante(s), il coule : tous les joueurs l'ayant touché durant ce tour, en plus d'avoir obtenu les points relatifs à ce touché, se partagent le bonus de l'ultime coup, et sont prévenus de leur participation a la destruction du navire. Parallèlement, tous les joueurs qui ont au mons une fois touché ce navire, seront avertis de sa disparition. Attention : rien ne dit, sinon l'évolution de votre score, que d'autres navires ne sont pas superposé à celui-ci...
 
 

Simultanéité des tirs...


 


            Tous les joueurs tirent simultanément. Ainsi, deux joueurs ayant choisi la même cible obtiendront le même nombre de points que s'ils avaient été seul à l'atteindre. Chaque tir n'est réellement lancé que lorsque tous les participants ont sélectionné une case.
 
 


Le gagnant.


 


            Il peut en fait y avoir deux gagnants, si l'on considère d'une part le score et d'autre part la survie de la flotte. En effet un joueur pourra très bien ne jamais être touché, ne jamais toucher personne, et être le dernier survivant de la partie sans avoir obtenu le moindre point. Inversement celui qui aura obtenu le plus gros score pourra perdre la totalité de sa flotte avant la fin de la partie.
 
 


Le perdant.


 


            Dès que la flotte d'un joueur a été coulée dans son intégralité, le joueur est notifié de son nouveau statut de perdant et se trouve dans l'impossible d'effectuer un nouveau tir.
 





Intérêts et difficultés.


 


            L'interface graphique a été réalisée à l'aide de JavaBeans,  et implémente la méthode du double buffering. La grille de jeux peut être agrandie ou réduite (effet zoom).

            Les bateaux ne peuvent pas être placés entre deux cases, ni a l'extérieur de la grille.
De nouvelles règles ont du êtres établies afin d'adapter un jeu habituellement limité à deux joueurs, et l'ouvrir à la convivialité du réseau.
   Exemple :

            L'usage des Java RMI qui était une nécessité, fut particulièrement difficile, mais efficace. En effet, on imagine les innombrables sokets qu'il aurait fallut connecter entre elles. De plus, toutes les machines, y compris celle de l'initiateur, effectuent le même travail au cours de la partie, ce qui permet de ne pas épuiser un éventuel serveur. Ce dernier ne conservant qu'un rôle d'initialisation de la partie ainsi que l'hébergement du registry...

            Chaque machine confrontera a chaque tour la flotte de son joueur avec les tirs de tous ses agresseurs, elle se rappellera pour chacun de ses bateaux, de ceux qui les ont visés ou atteint, les préviendra lorsqu'ils sont coulés, et attribuera le bonus à ceux qui les ont atteints lors du tour où ils ont été coulés.
 
 
 

Sujet de projet fixé le jeudi 3 décembre 1998.