Proglet Tic-Tac-Toe version réseau.

Auteur : Christophe Béasse
...

Présentation: jeu du Tic-Tac-Toe et primitives réseau.

On propose ici de réaliser le jeu du "TicTacToe" (version anglaise du morpion qui se joue sur une grille de 3x3 cases) en version réseau à l'aide d'une implémentation type client/serveur utilisant les sockets. On dispose de deux postes (1 poste ou le jeu tourne en mode serveur et 1 autre poste ou le jeu tourne en mode client. Dans le film WarGames (1984), le jeu de Tic-Tac-Toe est utilisé pour apprendre à un ordinateur pris de folie destructrice qu'il existe des jeux auxquels on ne peut pas toujours gagner.

Proglet exemple (version serveur et version client).

Voici un exemple minimal qui permet de tester cette proglet. Attention, il faut lancer la version serveur en premier, puis la version client. Ici les deux proglets peuvent être lancés sur la même machine.Dans ce cas, il vous faut lancer deux fois la proglet ticTacToe sur l'ordinateur en chargeant dans l'une la version serveur ci-dessous et dans l'autre la version client.

Code source des programmes de test.

Version serveur.

void main() {
    openSocketServer(6000);
    String str = getMessageViaSocketServer();
    int i = Integer.parseInt(str.substring(0,1));
    int j = Integer.parseInt(str.substring(2,3));
    setGrille(i,j,'O');
    sendMessageViaSocketServer("1,3");
    setGrille(1,3,'X');
    closeSocketServer();
}

Version client.

void main() {
    openSocketClient("127.0.0.1",6000);
    setGrille(3,3,'O');
    sendMessageViaSocketClient("3,3");
    String str = getMessageViaSocketClient();
    int i = Integer.parseInt(str.substring(0,1));
    int j = Integer.parseInt(str.substring(2,3));
    setGrille(i,j,'X');
    closeSocketClient();
}

Principes de fonctionnement.

remarques:.

Variantes au niveau de la mise en oeuvre.

On peut prévoir deux versions:

Liste des fonctions à disposition.

Gestion de la grille de jeu.

Pour la gestion de la grille de jeu (taille 3x3) proposée au niveau de la console "graphique" vous disposez des fonctions suivantes :
setGrille(int i , int j ,char mark)
Permet de positionner une marque (caractère 'X' ou 'O') sur la grille à la position spécifiée (coordonnées comprises entre 1 et 3). La marque ronde 'O' est Bleu, la croix 'X' est verte
Exemple : setGrille(1,2,'X')
getGrille(int i , int j )
Cette fonction retourne la marque (caractère 'X' ou 'O' ou '.') (type char) présente sur la grille à la position spécifiée (coordonnées comprises entre 1 et 3).
exemple : char mark = getGrille(3,3);

Gestion de la communication réseau via les sockets.

Au niveau communication TCP/IP on dispose d'une fonction d'initialisation du port (via une "socket"), d'une fonction de lecture, d'une fonction d'écriture et enfin d'une fonction de libération de la connection. Chacune de ses fonctions est déclinée en version serveur et en version client.
openSocketServer(int numport)
Initialisation du socket server, il écoute sur le port spécifié.Cette fonction tourne true si tout c'est bien passé false dans le cas contraire.
getMessageViaSocketServer()
Retourne un message (type String) lu sur le socket server. Message en provenance du client.
sendMessageViaSocketServer(String text)
Permet d'écrire un message sur le socket server. Message à destination du client.
closeSocketServer()
Fermeture du socket server. Cette fonction retourne true si tout c'est bien passé false dans le cas contraire.
openSocketClient(String serverName, int numport)
Initialisation socket client vers server spécifié (Nom et numéro de port) Cette fonction retourne true si tout c'est bien passé false dans le cas contraire.
sendMessageViaSocketClient(String text)
Permet d'envoyer un message via le socket client vers le serveur.
getMessageViaSocketClient()
Retourne un message (type String) lu sur le socket client, message en provenance du serveur.
closeSocketClient()
Fermeture du socket client. Cette fonction retourne true si tout c'est bien passé false dans le cas contraire.