Contents Next

1   Description générale du projet

1.1   Objectif

L'objectif est de créer des costumes (des tee-shirts en l'occurrence) et un logiciel permettant de jouer à un jeu collectif. Le jeu s'intitule 'le jeu du mouton" et il consiste à parier sur la réaction des autres joueurs.

1.2   Règle du jeu

Avant le lancement d'une partie, chaque joueur choisit le rôle du mouton blanc ou le rôle du mouton noir. Dans le rôle du mouton blanc, le joueur doit s'efforcer de suivre le même comportement que les autres joueurs quelque soit leur rôle. Dans le rôle du mouton noir, le joueur doit arriver à se distinguer des autres joueurs. Dans cette version du jeu, les groupes sont constitués en fonction de leur position. Les cinq positions possibles sont : buste droit, buste penché vers l'avant, buste penché vers l'arrière, corps penché vers la droite, corps penché vers la gauche.

Un étape commence par un avertissement de la part du contrôleur, les joueurs ont alors quelques secondes pour prendre position. Les positions sont relevées et les groupes formés. Un mouton blanc se trouvant dans un groupe de cardinalité non maximale est éliminé. Un mouton noir se trouvant dans un groupe de cardinalité non minimale est éliminé. Une autre étape est lancée avec les joueurs non éliminés. Le jeu se termine quand il ne reste plus qu'un ou deux joueurs. Ces joueurs sont déclarés gagnants.

1.3   Architecture générale

Les costumes remontent les informations de leur capteur de position à un serveur de jeu qui décide des joueurs éliminés à chaque phase du jeu. Le costume est réalisé à base d'Arduino Lilypad.

La remontée des données se fait par communication sans fil XBee entre le costume et un processus client tournant sur le PC associé au costume puis par TCP/IP entre le processus client et un serveur de jeu central. Le serveur central est choisi parmi l'un des processus client.

L'architecture de communication est établie en utilisant un exécutable d'administration sur chaque PC qui demande au processus client d'établir une connexion TCP vers le serveur de jeu. La communication entre l'exécutable d'administration et le processus client est réalisée par une file de messages (IPC).

1.4   Conception du costume

Le costume est réalisé avec un module Lilypad intégrant un micro-contrôleur atmega328p, un module de communication série sans fil XBee et divers capteurs et actionneurs ; un accéléromètre, une led RVB, un vibreur et un buzzer.

La programmation du micro-contrôleur se fait en utilisant l'IDE arduino. L'algorithme du micro-contrôleur consiste en la lecture des ordres arrivant sur le port série et en la réalisation des actions ou mesures demandées. Les valeurs mesurées sont renvoyées via le même port série.

Prenez soin de configurer vos deux modules XBee pour qu'ils puissent communiquer entre eux sur une fréquence leur étant propre.

1.5   Conception de l'application client/serveur

L'application implante deux fonctionnalités. Une fonctionnalité de gestion de costume qui est activée si le joueur participe à un jeu et une fonctionnalité de serveur de jeu qui est activée si d'autres gestionnaires de costumes se connectent à lui.

La gestion du costume est à implanter dans un processus léger dédié. Ce processus se contente de lire les instructions du serveur de jeu arrivant par la connexion TCP et à les répercuter au costume via le port série du PC.

La fonction de serveur de jeu consiste à accepter les connexions des autres gestionnaires de costumes et a superviser un jeu sur demande de l'administrateur. Un processus léger doit être utilisé pour conduire le déroulement du jeu.

Enfin, un dernier processus léger est chargé de traiter les requêtes de l'exécutable d'administration.

1.6   Connexion au serveur de jeu

Quand un gestionnaire de costume C se connecte par TCP au serveur de jeu J, le protocole décrit ci-dessous doit être respecté. La commande SET est suivie d'un mot clef indiquant l'actionneur concerné et de paramètres permettant de le configurer. Voici les syntaxes à utiliser pour ce projet : La commande GET n'a qu'une syntaxe : GET ACCEL. Aucun paramètre n'est requis mais le gestionnaire de costume doit retourner un octet écrit en décimal représentant la position du joueur. Les positions sont notées de 0 à 4 dans l'ordre où elles sont décrites dans la section 1.2.

1.7   Les requêtes administrateur

L'administrateur lance le client d'administration à chaque fois qu'il veut effectuer une requête (la requête est fournie en argument). L'administrateur peut envoyer plusieurs requêtes simultanément, c'est à dire exécuter plusieurs instances du client d'administration simultanément. Les requêtes à disposition de l'administrateur sont les suivantes :
aide :
obtenir la liste des requêtes possibles ;
score :
indique si un jeu est en cours ou si un jeu est terminé, liste les joueurs avec leur état (en lice, éliminé ou à défaut connecté) ;
mode {blanc|noir} :
préciser le mode du joueur ;
connecter <pseudo>:[<port>@]<nom machine> :
se connecter à un serveur distant, lancer le processus de gestion de costume si la connexion est correctement établie ;
deconnecter :
déconnecter le gestionnaire de costume du serveur de jeu, arrêter le processus léger ;
demarrer :
lancer un jeu avec les joueurs connectés ;
arreter :
arrêter le jeu en cours ;
suivre :
suivre les événements du jeu, c'est à dire que l'administrateur attend et affiche les événements suivants envoyés par le serveur de jeu ; démarrage du jeu, signalement de pré-étape, signalement de fin d'étape, liste des positions des joueurs, liste des joueurs éliminés, liste des joueurs toujours en lice, fin du jeu ;
stopper :
arrêter l'application.
Tout dialogue entre le serveur de jeu et le client d'administration est réalisé par des communications IPC (envoi et réception de messages). Pour permettre l'exécution simultanée de plusieurs clients d'administration, il faut créer une file de messages de réponse par client et envoyer le descripteur de cette file dans les requêtes. Pour implanter la commande suivre, il est recommandé de définir, au niveau du serveur de jeu, un tableau des clients d'administration en attente d'événements. Ainsi à chaque nouveau événement à leur transmettre, il suffit de parcourir ce tableau et de les contacter sur leur file de messages de réponse.


Contents Next