Estelle COLIN & Fabrice BERNA (05/2001)

Bataille navale en réseau

Projet Réseau en C++ sous Linux

Sommaire

  1. Sujet.
  2. Mode d'emploi.
  3. Description des protocoles utilisés.
  4. Conclusion





Sujet :

Ce projet vise à réaliser un jeu de bataille navale multi-joueurs en réseau en mode TCP client-serveur.

Retour sommaire



Règles du jeu :

Chaque joueur possède une grille où il doit placer ses bateaux.
Pendant un tour de jeu, chaque joueur vise une case de la grille d'un (seul) joueur. Un tir est donc définit par un doublet (Grille i, Position j-k)

Lorsque tous les joueurs ont choisi leur cible, l'ensemble des résultats (touché, coulé, dans l'eai) est communiqué à l'ensemble des joueurs (chaque joueur connaît donc également le résultat des tirs des autres joueurs).

Si lors d'un tour de jeu, plusieurs joueurs visent la même case d'une même grille, le résultat ne doit être affiché qu'une seule fois. Lorsqu'un joueur ne dispose plus de bateaux, il est éliminé. Le jeu se termine lorsqu'il ne reste plus qu'un seul joueur.

Retour sommaire



Déroulement du jeu :

Le jeu se déroule en 3 phases : Retour sommaire



Options :

En plus du jeu de base, on souhaiterai : Retour sommaire



Protocole de communication :

On souhaite que les grilles du jeu soient gérées par les clients, mais que chaque client ne gére que sa propre grille. Chaque client ne connaît donc que la position de ses bateaux et les coups tirés dans sa grille. Le serveur n'a quant à lui aucune information concernant les coups déjà joués et la position des bateaux; il ne fait que distribuer les différentes requêtes aux clients concernés. Ex. : quand le joueur A demande l'affichage de la grille du joueur B, il envoit un message au serveur qui le transmet au client B; celui-ci envoie sa réponse au serveur qui la retransmet à A.

Retour sommaire




Mode d'emploi

L'utilisation du jeu se détaille en trois parties : Retour sommaire



Sources du programme :

Retour sommaire



Démarrer le serveur :

Le lancement du serveur se fait par la commande ./serveur, sur une machine quelconque,accessible par tous les clients.
Il se fait une fois pour toutes, il gère les parties successives.
L'arrêt du serveur se fait en tapant "stop" dans l'invite serveur.




Retour sommaire



Démarrer le client :

Pour exploiter toutes les capacités du programme, il faut ouvrir 4 Terminaux :
  • 1 pour le menu et la saisie
  • 1 pour afficher le chat et les commentaire
  • 1 pour afficher la grille personnel
  • 1 pour pouvoir afficher les grilles adverses


    Le lancement du client se fait par la commande ./client suivie des paramètres :

    1. Le descripteur de la fenêtre de commentaires du serveur et de chat.
    2. Le descripteur de la fenêtre qui affichera la grille personnelle.
    3. Le descripteur de la fenêtre qui permettra d'afficher les grilles adverses (seulement les coups joués).
    Après exécution de cette commande, le client doit indiquer :
  • l'adresse du serveur auprès duquel il veut se connecter
  • le surnom qu'il désire avoir dans la partie

    Lorsque le premier joueur connecté estime qu'il a assez d'adversaire, il lance le jeu par la commande "start".

    L'arrêt du client se fait en tapant "stop" dans l'invite client.

    Retour sommaire



    Jouer à la bataille navale :

    La première étape est de placer les 11 bateaux sur la grille. Pour chacun saisir : Colonne (lettre majuscule), Ligne (codée sur 2 chiffres) et Orientation (H ou V).
    La flotte est composée de :
  • 1 porte-avion de 5 cases
  • 2 cuirasés de 4 cases
  • 4 sous-marins de 3 cases
  • 4 matelas pneumatiques de 2 cases


  • Les Commandes et leur Mode d'emploi :




    Le joueur peut :

  • Jouer un coup en spécifiant l'adversaire (ex. : joue 1 B01 pour attaquer la case B 01 du joueur 1).

  • Afficher la liste des joueurs ou "chater"


  • Consulter sa grille (ex. : grille 1 si il est le joueur 1).


  • Demander une grille adverse (ex. : grille 1 pour demander la grille du joueur 1).


    Retour sommaire




    Description des protocoles utilisés.

    Le code source est en C++, à exécuter sous le système d'exploitation Linux.
    La communication se fait grâce au protocole TCP, par le biais de boîtes réseau.

    Retour sommaire



    Connexion client/serveur :

    Le serveur ouvre une Boite Réseau Publique avec une file d'attente.
    Chaque client s'alloue une Boite Réseau Privée et se connecte au serveur.
    Si une partie est en cours, le client est refusé, sinon, le serveur accepte une connexion privée avec lui.

    Retour sommaire



    Structure du jeu :

    Le plateau de jeu est un tableau bidimensionnel de pointeurs sur chaine de caractères. On utilise quatre classes pour définir :
  • Les bateaux
  • Une position un doublon (colonne,ligne)
  • La grille de jeu (16x16)
  • La partie, composée d'un listing de 11 bateaux et d'une grille

    Retour sommaire



    Communication client/serveur :

    Protocole de communication

    Le protocole d'échange d'une information entre le client et le serveur (dans les 2 sens) est :
  • Envoi d'un identifiant qui permet de prévoir la nature du message qui va arriver, et les traitements à faire.
  • Envoi du message (chaine de caractères) à traiter.

    Déroulement d'une communication

    L'échange entre les joueurs se fait grâce au serveur, et à un "jeu de miroir".
    Si un joueur demande une grille, attaque un adversaire ou désire "chatter" avec un autre joueur, celui-ci :
  • Envoie un identifiant au serveur qui va permettre à ce dernier d'identifier la nature du message qui va suivre
  • Envoie son message, une chaine de caractères, qui va être analysée par le serveur.
  • Le serveur le fait suivre au(x) joueur(s) destinataire(s).
  • Le destinataire le traite à nouveau, et retourne une réponse si nécessaire.


  • Remarques :
  • Le serveur peut transférer ou envoyer un message, à un ou plusieurs clients.
  • Le client peut envoyer un message à un ou plusieurs clients, ou serveur.


    Retour sommaire




    Conclusion

    Notre programme respecte le cahier des charges.
    Tous les points ont été traités.
    L'accent a été mis sur la clarté du code, dans une optique d'évolutivité.

    Ce projet qui a été un premier contact avec le monde du réseau.
    Il nous aura permis de comprendre la communication serveur avec plusieurs clients, avec les problèmes d'accès concurrents que cela entraîne.

    Retour sommaire