Thymio crocodile

Par Alissone Mendes et Daniel Stojmenovic, élèves en 1er OC info. au lycée Blaise-Cendrars, juin 2012

5p.jpg

Présentation générale

Nous nous sommes inspirés d'un jeu pour enfant « Croc le crocodile ». Le principe du jeu est simple, croc souffre d'une dent car il a une carie, le but est de trouver la dent malade. Pour cela il faut presser sur chacune de ses dents tout en évitant, évidemment, celle qui lui fait mal, car dès que cette dernière sera touchée la mâchoire se refermera sur les doigts du joueur. La victoire est atteinte lorsqu'il ne reste que la carie.

Pour recommencer à jouer, il faut remonter manuellement la mâchoire du crocodile, la carie changera automatiquement.

1.jpg

Principe de notre jeu

Pour commencer à jouer il faut déjà que la mâchoire du crocodile soit ouverte. Si ce n'est pas le cas, à l'aide du détecteur arrière gauche remontez-la, puis pressez sur le détecteur arrière droit pour arrêter la remontée de la mâchoire. Une fois ceci fait, le jeu peut commencer. Approchez votre doigt doucement en prenant garde à ne pas toucher plusieurs détecteurs à la fois. Si rien ne se passe, vous pouvez changer de dent, cela signifie que la dent que vous avez choisie n'est pas la carie. Répétez cette action jusqu'à ce qu'il n'en reste qu'une, dans ce cas vous avez gagné, ou alors jusqu'à ce que la mâchoire se referme et dans ce cas vous avez perdu. Une fois la partie terminée, remontez la mâchoire à l'aide du détecteur arrière gauche puis arrêtez-la et redémarrez le programme à l'aide du détecteur arrière droit.

2p.jpg

Sources d'erreurs et problèmes rencontrés

Adapter notre idée à un robot Thymio

Une fois que nous avions trouvé notre idée nous nous sommes trouvés confrontés à un problème très concret : comment adapter notre jeu au robot ?
Nous pensions nous servir de Legos afin de construire la mâchoire de l'animal. Cette dernière sera déplacée par les roues du robot. Nous avons donc placé notre robot à l'envers.
Le montage de la mâchoire a été assez complexe car il fallait qu'elle soit assez grande pour être détectée afin que les roues s'arrêtent et que les legos ne soit pas endommagés. Les détecteurs avant sont les dents de l'animal. L'un d'entre eux enclenche la mâchoire. Cette dent sera choisie aléatoirement et change à chaque fois.

3p.jpg

Appeler les actions

Au début lorsque nous avons commencé à vouloir faire exécuter plusieurs actions, le programme ne les acceptaient pas. Il fallait avant chaque action écrire un « call » pour qu'elles soient acceptées et exécutées correctement.

Place des variables

Pendant notre projet nous avons dû utiliser certaines variables. Les premières fois les variables n'étaient pas reconnues par le programme car nous avions oublié de les introduire au tout début de notre code.

Arrêter la rotation des roues

Nous devions trouver un moyen d'arrêter les roues avant que les legos de la mâchoire ne touchent le Thymio, évitant ainsi d'endommager les legos ou le robot. Nous avons utiliser les capteur sous le robot pour arrêter la rotation des roues dès qu'ils détectent la mâchoire. Nous avons ajouté quelques legos sous la mâchoire pour qu'ils soient détectés plus facilement.

Problème de l'aléatoire

L'aléatoire est sûrement la partie informatique de notre projet qui nous a causé le plus de difficultés. Tout d'abord nous avons dû trouver une fonction intégrée dans les Thymio qui générait des nombres au hasard. Pour cela nous avons consulté le site internet Aseba. Celui-ci s'est avéré très lent mais, avec de la patience, nous avons trouvé la fonction native qui allait nous être utile : « math.rand ».

Il nous fallu un peu de temps pour apprendre à utiliser correctement l'aléatoire, mais à force de chercher nous avons trouvé comment récupérer le nombre généré en l'introduisant comme variable.

Malheureusement la fonction générait des nombres de -16383 à 16383 et il nous fallait des chiffres compris entre 0 et 4 car ce sont les chiffres qui correspondent aux détecteurs de l'avant du robot. Nous avons alors eu l'idée de partager la plage de nombre générée en 5 paliers égaux, chaque palier correspondant à un détecteur. Nous avons attribué l'un des deux détecteurs arrières à la réinitialisation du programme, ainsi une fois ce détecteur enclenché l'aléatoire gênerait un nouveau nombres et choisissait donc une nouvelle carie.

Recommencer le programme

Une fois le code du jeu écrit nous nous sommes retrouvés confrontés à un nouveau problème, comment recommencer une nouvelle partie ? Nous avons alors pensé à nous servir des deux détecteurs de derrière. L'un de deux servira à remonter la mâchoire et l'autre à recommencer le programme afin que le robot choisisse une nouvelle carie. Pour que le programme redémarre lorsque l'on touche le détecteur, nous avons dû utiliser deux « if » et des tabulations pour décaler les deuxièmes conditions pour que le programme comprennent qu'elles sont secondaires.

Le fichier contenant le code.

Conclusion du travail

En commençant ce projet, notre but était d'adapter et de moderniser un jeu déjà connu à l'aide des progrès actuels dans le domaine de l'informatique. Cela nous tenait à cœur car nous pensons que l'un des défis de l'informatique aujourd'hui est de réussir à améliorer des choses déjà existantes.

Dans cette optique, nous pensons que notre but est atteint. Le robot n'est évidemment pas parfait mais il copie très fidèlement les comportement du jeu "croc le crocodile"
Malgré notre satisfaction, nous avons tout de même quelques regrets dus au manque de temps ou au manque de moyens. Nous aurions aimé pouvoir mettre un compteur afin que lorsque toutes les dents sauf la carie aie été touchées, le robot joue un son pour montrer au joueur qu'il a gagné, ou encore un "timer" pour que la machine s'arrête automatiquement après s'être remontée. Certains objets auraient amélioré notre projet, comme des legos spéciaux qui auraient donné un meilleur aspect esthétique, ou encore une carte mémoire SD afin de pouvoir mettre notre propre son, plus approprié, au lieu de devoir se contenter des sons déjà présents dans le thymio.

Démonstration en vidéo

Voici une démonstration du fonctionnement en vidéo.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License