Bingo - projet de Java-RMI


1. Enoncé :

Le but de ce programme est de réaliser une interface pour jouer au bingo en réseau. Le programme nécessite qu'il y ait un serveur et des clients qui échange des messages grâce à la bibliothèque RMI.

Déroulement du jeu :

Notez bien tout d'abord, que nous n'avons pas exactement respecté les règles du Bingo. En effet, nous ne les connaissions pas, et de toutes façons, le but n'était pas de développer le jeu, mais plutôt de réaliser une application qui mettait en oeuvre les outils à notre disposition.

Le serveur ouvre une partie et attend que des clients s'inscrivent. Lors de l'inscription le serveur distribue une grille (remplie aléatoirement) à chaque client. Les grilles comportent trois lignes de neuf cases, sur lesquelles sont disposés des numéros compris entre 1 et 90, et des cases grisées qui sont au nombre de 12 (dans le jeu original, il y en a exactement 4 par ligne). Une fois un nombre suffisant de clients inscrits, la partie débute : le serveur tire des numéros aléatoirement et les client consultent ces réultats. Puis, chaque client cherche le numéro reçu dans sa grille et le coche s'il y est. Si un client a tous les numéros de sa grille cochés, alors il dit : "Bingo!".


2. Phases de développement :

Pour aboutir à un résultat satisfaisant en peu de temps (5 jours), il a fallu adopter une certaine démarche.

Manipulation d'objets RMI :

Dans un premier temps, nous avons repris le tutoriel cité quelques pages auparavant, pour lui ajouté des méthodes et mieux comprendre le fonctionnement des appel de méthodes distantes. Puis nous avons modifier la classe Hello, afin de modéliser une grille de Bingo, et ensuite de faire une méthode qui permettent au client de retirer une grille auprès du serveur

Modélisation du problème :

Les RMI n'était pas un outil franchement adapté à notre problème. En effet, RMI ne permet pas d'échanger des messages. Il nous a donc fallu chercher une manière de concevoir notre jeu sous forme de consultation de données. Prenons l'exemple des tirages : le serveur tire des numéros lorsqu'on clique sur le boutons approprié. Mais ensuite comment faire pour communiquer les numéros aux clients : impossible ! C'est là que nous avons décidé que le client devait choisir de consulter le serveur pour voir s'il y avait des numéros de tirés (un peu comme si il était inatentif à chaque tirage). De même que lorsque le serveur se ferme, comment en informer les clients connectés ? Encore ici, c'est au client de faire le travail, si lorsque le client essaie d'envoyer un requête au serveur, une exception est levée, c'est que la communication a été rompu.

Découverte du java :

Etant des ardents développeurs en C++, nous n'avons pas trop été dépaysés par la syntaxe. En revanche le fait que tout soit "objet", nous faisait un peu peur au début, nous avions l'impression que le programmeur n'avait pas de liberté. Mais nous avons pris l'habitude des conventions utilisées et des instructions "à ralonge" lorsqu'il faut inclure du transtypage d'objets. La surprise fut l'abondance d'outils graphiques mis à notre disposition, notament par la librairie Swing.


3. Organisation des sources :


4. L'application :

Ce qui a été fait :

Ce qui n'a pas été fait :

Nous n'avons pas coder le fait que le client se déconnecte lorsqu'il ferme la fenêtre brutalement. Pour l'instant la fin est quasi-inexistante, dans ce sens que, la fin est détectée, mais rien ne se passe. Nous n'avons pas du tout pris en compte, le fait que, dans le vrai Bingo, lorsqu'un joueur a toute une ligne cochée, il gagne des points, et que de manière générale, il peut gagner des points. L'application ne permet pas également de faire plusieurs parties à la suite.


Conclusion

Le développement de cette application nous a permis de prendre connaissance avec le langage Java et de ses bibliothéques standards. Le Java est un langage qui permet de développer rapidement une application graphique qui a l'enorme avantage d'être portable, et qui offre de multiples possibilités facilement accessibles. L'utilisation des RMI, nous a fait découvrir toutes la puissance de cet outil. En effet, il permet d'élever le développement d'applications distribués à un niveau d'abstraction très appréciable.


Projet réalisé par Nicolas Dumoulin et Patrick Gely dans le cadre du cours de réseaux de la Maîtrise d'Informatique de Clermont-Ferrand en début 2002.