Introduction :
Ce projet a été réalisé dans le cadre du cours d'option complémentaire informatique 2013-2014 au gymnase de Beaulieu. L'objectif de ce travail évalué était de réaliser une application permettant à deux personnes de jouer au "tic tac toe" (morpion) avec des robots Thymios.
Matériel :
- 2 Thymios
- Feuille A3/A2
- Stylo
Démarche :
Concept général :
Ce projet utilise deux Thymios. Le premier sert à dessiner les formes sur le terrain 3x3 du morpion, il est appelé "dessinateur". Le deuxième s'occupe de la gestion des tours et des cases (victoires/match nul), des actions entrées par l'utilisateur, de la vérification de leur validité ainsi que de l'envoi des coordonnées choisies au robot dessinateur, ce robot est appelé "maître".
Fonctionnement du "dessinateur" :
Le code du dessinateur est séparé en 3 blocs, le premier représente les fonctions moteurs basiques définissant la vitesse du moteur pour avancer, reculer, tourner, etc. Ces dernières sont utilisées dans le deuxième bloc, représenté par des boucles dans un onevent timer permettant au Thymio de réaliser des figures complexes comme une croix, un carré, des rotations et des déplacements linéaires. Toutes les figures sont basées sur l'incrémentation d'un compteur qui indique au Thymio quelle fonction moteur utiliser à quel moment (basé sur le modèle de Thymio dessinateur).
Le troisième bloc consiste à pouvoir donner la série d'instructions du deuxième bloc à effectuer en fonction de sa case de destination. Il pourrait être schématisé ainsi : Réception de la case de destination par le prox.comm → déplacement sur l'axe x → déplacement sur l'axe y → dessin de la forme appropriée en fonction du tour du joueur. Le dessinateur utilise donc les caractéristiques suivantes du Thymio :
- Moteurs
- Communication entre robots
- Trou à stylo pour le dessin
- Leds pour des informations visuelles
Code source du "dessinateur" :
Fonctionnement du "maître" :
Le comportement du maître peut se décrire ainsi : Débuter le jeu → jouer les tours de jeu → fin de la partie sur une victoire/match nul. Un tour de jeu est composé de différentes parties : Début du tour → choix de la colonne/cordonnée x → confirmation → choix de la ligne/cordonnée y → confirmation → validation/refus de la cordonnée entrée → vérification de l'état des cases (victoire/rien) → si rien : envoi au "dessinateur" de la cordonnée de destination, attente de la réponse du dessinateur et fin du tour, sinon victoire : fin.
Le choix de la colonne/ligne se fait avec les touches latérales du Thymio, la confirmation avec le bouton central. Les informations sont pour l'instant transmises par voies lumineuses et sonores, les leds et le haut parleur servent à indiquer : quel joueur doit jouer (bas droite : vert/rouge), est-ce que le joueur est entrain de sélectionner la colonne/ligne (bas gauche : vert/violet), quel est la valeur actuelle de x/y (leds.circle)
Le jeu est géré par un tableau (array) à 9 cases, permettant ainsi de simuler un tableau réel 3x3. Chacune de ces cases peut prendre 3 valeurs : -1 si elle a été jouée par le joueur 2, 0 si elle est vide, 1 si elle a été jouée par le joueur 1. Pour qu'une cordonnée soit acceptée, la case de destination doit être vide, sinon une exception est levée. Cet array nous sert aussi à gérer la victoire d'un des joueurs, il suffit lors de la vérification de faire la somme de chaque colonne/ligne/diagonale. Si une de ces sommes vaut 3 ou -3, on sait qu'un des deux joueurs à gagner. Si la coordonnée est validée, elle est envoyé au dessinateur sous la forme suivante "xy", elle est ensuite extraite par ce dernier.
Le maître utilise donc les caractéristiques suivantes du Thymio :
- Communication entre robots
- Leds et haut-parleur pour transmettre les informations concernant le déroulement de la partie
- Touches pour la gestion du jeu
Code source du "maître" :
Réalisation :
Voici un exemple type de déroulement d'une partie :
Discussion et pistes d'amélioration :
Concernant le "dessinateur" :
La vitesse de rotation des moteurs varie en fonction de l’état de charge du robot. Ce qui implique que lorsque le robot tourne à angle droit, l’angle effectué n’est pas toujours droit. Il en va de même pour le reste des dessins même si l’effet est moins notable. Dans les séries d'instructions le passage par des moteurs à vitesse nulle s'effectue entre chaque changement de vitesse afin d'avoir des formes les plus semblables possibles au cours du temps.
Concernant le "maître" :
Onevent button semble trigger beaucoup trop souvent, certainement à une fréquence de 50 Hz. Ce qui a pour implication qu’une simple pression d’un button exécute environ 3 à 5 fois la boucle associée. Afin de contourner ce problème, j’utilise un timer avec un flag permettant ainsi d’avoir un contrôle direct sur la durée d’une pression et l’espace entre 2 pressions. Les when semblent vouloir trigger aléatoirement une fois que la condition est remplie. Je ne me suis donc pas basé sur cette possibilité lors de la réalisation du maître.
Pistes de modification :
Pour rendre les dessins moins aléatoire et plus précis, il aurait été possible de modifier la manière dont le dessinateur se déplace sur le plateau de jeu. Par exemple, on aurait pu représenter les cases par des lignes noires et faire en sorte que le dessinateur les suivent. Cependant, une telle modification nécessiterait de remettre sur le métier à tisser l'intégralité du fonctionnement du dessinateur. Côté maître, on pourrait se questionner sur l'idée d'une fonction permettant de jouer de nouvelles parties avec un score qui évolue, car il est rare dans la vie réelle que de faire qu'une seule partie de tic tac toe. Il faudrait cependant trouver un moyen de ne pas confondre les parties, par exemple en changeant de stylo.