Table des matières

LE JEU DE NIM

Objectif de la séance

Implémenter une version simple du jeu de Nim sur Arduino, et faire jouer deux arduinos sans fil via Xbee.

Template à récupérer

nim_game_a_completer.ino

Début du jeu

Il y a N bâtonnets (N=100 par défaut).

But du jeu

Ne pas être celui qui va retirer le dernier bâtonnet

Comment jouer

Implémentation

Phase 1 : Connexion à l'arbitre.

  1. Les joueurs doivent envoyer la lettre d'identification et l'adresse de leur XBee.

Phase 2 : Déroulement du jeu.

  1. Un joueur en attente reçoit X (valeur aléatoire défini par l'arbitre) bâtonnets.
  2. Il retire 1, 2 ou 3 bâtonnets au total.
  3. Il envoie le résultat à l'arbitre.
  4. L'autre joueur reprend à l'étape 1 jusqu'à qu'il ne reste plus qu'un bâtonnet.

:!: Celui qui prend le dernier bâtonnet à perdu.

Approche du module XBee

Configuration

Après avoir correctement connecté le shield et le module XBee à votre Arduino il faut lui affecter un réseau. Pour ce TP, vous configurerez votre Xbee sur le même réseau que celui de votre adversaire.

Ensuite, il faut affecter à votre Xbee une adresse (l'équivalent d'une IP) afin qu'on puisse le contacter, et définir l'adresse de son destinataire. Mettez vous d'accord avec votre adversaire afin de configurer correctement la connexion.

Validation de la configuration

Afin de valider votre configuration, nous avons un XBee branché sur notre ordinateur et celui-ci devra recevoir votre message. Notre Xbee se situe sur le réseau 42, et possède l'adresse 1337.

Vous avez maintenant tous les outils pour commencer l'implémentation de la version simple du jeu de Nim.

Bonus

<spoiler | Jeu arbitré>

Pour ceux ayant fini en avance, voici de quoi vous occuper un peu plus longtemps.

Maintenant, nous souhaitons faire en sorte que tout un tournoi de ce jeu se déroule de manière automatisée, géré par un seul arbitre. Cet arbitre annoncerait les matchs, gèrerait les parties, puis annoncerait les matchs suivant, à la manière d'une ronde suisse (log2(nb joueurs) matchs).

Pour cela, il faut donc définir un protocole de broadcast (tous les joueurs parlent à l'arbitre, et l'arbitre parle à tous les joueurs) afin que l'arbitre gère chaque partie indépendamment les unes des autres, sans conflit, et que chaque joueur puisse savoir quel message de l'arbitre lui est destiné.

</spoiler>