Rapport projet MMI 2013 Luis Domingues, I3 Naomi Favre, I3 Tiago De Deus, I3 Page 1
Table des matières Luis Domingues, Tiago De Deus, Naomi Favre Introduction... 4 Contexte... 4 Description du projet... 4 Analyse... 5 Spécifications... 5 Modalités... 8 Geste... 8 Voix... 8 Matériel... 10 Wiimote... 10 Kinect... 10 Librairies... 11 Lightweight Java Game Library... 11 Slick... 11 Wiiuse... 11 Modèle CASE/CARE... 12 Case... 12 Care... 12 Graphisme... 12 Conception... 13 Déroulement de l application... 13 Lancement... 13 Jeu... 13 Fin... 13 Actions possibles... 13 Implémentation... 14 Création de labyrinthe... 14 Grille... 14 Case... 14 Factory... 14 Fonctionnement du jeu... 14 Intégration de la partie multimodale... 14 Page 2
Geste... 14 Voix... 15 Conclusion... 16 Références... 17 Page 3
Introduction Contexte Luis Domingues, Tiago De Deus, Naomi Favre Interfaces Multimodales est un chapitre spécialisé de 3 ème année bachelor. Pour ce cours nous devons réaliser un mini projet intégrant les thèmes observés. Le but est de créer une application qui utilise au moins deux modalités de deux manières différentes et les situer par rapport aux modèles CASE et CARE. Cette application peut être pensée pour des jeux, pour des appareils mobiles ou des technologies d assistance. Description du projet Pour ce projet nous avons décidé de réaliser un jeu de labyrinthe. Il s agit très simplement de trouver la sortie en déplaçant son personnage. On ne voit qu une partie du labyrinthe à la fois, sous forme de cases qui présentent des croisements vues depuis le haut. Il faut tester les différents chemins pour sortir du labyrinthe. Ces différents chemins peuvent aller vers le haut, la gauche, la droite et le bas. On peut revenir sur ses pas si on le désire. Pendant la partie, l utilisateur a la possibilité de changer le thème de la musique grâce à des mots clés. Page 4
Analyse Spécifications Voici les différentes caractéristiques spécifiques à notre application : Luis Domingues, Tiago De Deus, Naomi Favre Caractéristiques Représentation Au lancement de l application, on peut appuyer sur le bouton «A» de la Wiimote pour jouer ou sur «B» pour quitter Le personnage peut se déplacer vers la droite, la gauche, le haut ou le bas On ne peut pas traverser les arbres car ils représentent les murs Page 5
On peut passer sur tout objet qui n est pas un arbre Il n y a qu une seule sortie Les labyrinthes sont définis (non générés dynamiquement) On ne voit qu une case du labyrinthe à la fois - - Le jeu se termine lorsqu on passe par la sortie Page 6
Lorsque le jeu se termine on peut soit rejouer en appuyant sur «A», soit quitter avec «B» On utilise la Wiimote pour se déplacer Figure 1 wiimote On utilise la Kinect pour capturer la voix Figure 2 kinect Le thème de la musique peut être modifié à tout moment durant le jeu Page 7
Modalités Luis Domingues, Tiago De Deus, Naomi Favre Geste Les gestes vont être utilisés pour déplacer notre personnage dans la direction désirée. Nous allons utiliser la Wiimote pour cette partie (précisions sur la Wiimote dans le chapitre «Matériel»). On tient la manette «droite», comme un joystick. Pour réaliser les déplacements avec la Wiimote il faudra : Pencher la manette vers l avant ou l arrière Pencher la manette vers la gauche ou la droite Les paramètres de design sont les suivants : Dynamic gesture : nous détectons des mouvements et non simplement des positions ; un geste commence lorsqu on penche la Wiimote et se termine lorsqu on remet la manette droite ou qu on la penche dans un autre sens pour commencer un autre geste. 3D gesture : les gestes sont réalisés dans un espace 3D ; pencher vers avant/arrière utilise la profondeur et la hauteur, pencher vers droite/gauche utilise la largeur et la hauteur. Voix La voix va servir à gérer les thèmes de musique du jeu. Des mots-clés sont définis pour choisir le thème directement (en donnant le nom du thème) ou indirectement (en choississant le thème précédent ou suivant). Page 8
Pour capter cette modalité, nous utiliseront les microphones de la Kinect (précisions dans le chapitre «Matériel»). Les paramètres de design sont les suivants : speaker independent : la reconnaissance de la voix ne doit pas dépendre de l utilisateur, nimporte qui doit pouvoir faire fonctionner cette partie en donnant les mots-clés Keyword spotting : on n utilise pas de dialogue, simplement des mots-clés seuls. Chaque action ne correspond qu à un seul mot Vocabulaire : le vocabulaire est très simple et la taille dépend du nombre de thème de musique. La langue du vocabulaire est l anglais. Mots-clés du vocabulaire : Zelda Sonic Mario Kirby Previous Next Page 9
Matériel Luis Domingues, Tiago De Deus, Naomi Favre Wiimote La Wiimote est le contrôleur de la console Wii de Nintendo. Elle se tient généralement dans une main et possède un accessoire qu on peut lui raccorder ou non qui s appelle le Nunchuk (deuxième partie de la manette pour la seconde main). Un capteur avec des leds infrarouge peut être placé devant la télé pour déterminer la position de la Wiimote. Il y a aussi des accéléromètres au sein de la Wiimote qui permettent de reconnaître l inclinaison du contrôleur. Kinect La Kinect est un périphérique comportant un émetteur et un capteur infrarouge, un caméra RGB et des microphones. Elle est initialement destinée à la console Xbox 360, mais une version a été spécialement créée pour le développement avec Windows. Le principe de la Kinect est de remplacé la manette et de contrôler les applications avec les mouvements et la voix. Dans notre projet nous n utilisons que la fonctionnalité de reconnaissance vocale. Page 10
Librairies Lightweight Java Game Library Cette librairie a été conçue pour permettre d'offrir à une personne désirant coder des jeux vidéo en java les outils nécessaires. Elle offre notamment OpenGL, OpenAl et OpenCL ainsi qu'une API pour récupérer très facilement les inputs clavier/souris/manette. Cette librairie dans notre projet nous a surtout été utile pour l'opengl, que nous utilisons pour dessiner le jeu et l'api des inputs pour les premières versions du programme ou la wiimote n'était pas utilisée et les inputs se faisaient au clavier. Petite trivia intéressante concernant cette librairie : le jeu extrêmement célère Minecraft a été développé en Java en utilisant notamment cette librairie. http://www.lwjgl.org/ Slick Slick est une simple librairie complémentaire à lwjgl qui permet de transformer des images en objets de type Textures. Ces textures sont alors utilise pour dessiner des sprites avec OpenGL. Cette librairie est donc utilisée pour les jeux en 2D. http://www.slick2d.org/ Wiiuse WiiUseJ est une librairie pour java s appuyant sur la librairie C WiiUse. Celle-ci est construite de manière évènementielle. C est-à-dire que nous avons une interface à implémenter. Puis, de manière régulière, la librairie va appeler certaines méthodes de l interface que nous avons implémentée, et à partir de celle-ci nous pourront récupérer les informations relatives à la WiiMote. https://code.google.com/p/wiiusej/ Page 11
Modèle CASE/CARE Case D'après le CASE model notre application est Concurrente. Elle possède 2 modalités, la voix et le mouvement (avec la wiimote). On peut réaliser les 2 en même temps mais chaque modalité permet de faire une action séparée, à savoir déplacer le héro pour le mouvement et changer de musique pour la voix. Care La seule propriété du modèle CARE que notre application possède est l'assignement car en effet les 2 actions possibles dans notre application, déplacer le héro et changer de musique, son chacune réalisée par une seule modalité. Graphisme Les graphismes du jeu sont récupérés des différents jeux Zelda (Nintendo) qui sont sortis sur Game boy. Ce sont des images types 8 bits (des sprites) qui ont été assemblées pour les besoins de notre application. Voici les liens des ressources utilisées: http://capturepokemon.over-blog.com/article-sprites-zelda-110422588.html http://www.spriters-resource.com/gameboy_advance/lozminish/index.html Page 12
Conception Déroulement de l application Luis Domingues, Tiago De Deus, Naomi Favre Lancement Au lancement du jeu, un écran affiche les commandes pour déplacer le personnage. Si l'utilisateur appuie sur B, l'application quitte. Si l'utilisateur appuie sur A, l'écran d'aide pour les musiques apparaît et la musique démarre. Si l'utilisateur appuie une fois encore sur A, le jeu à proprement parlé démarre. A tout moment dès que l'application se lance, l'utilisateur peut utiliser les commandes vocales. Jeu Le jeu commence réellement avec une des cases du labyrinthe affiché et Link au milieu de l'écran. L'utilisateur déplace Link pour se déplacer de cases en cases, le but étant de trouver la sortie. Pour déplacer Link il doit incliner la wiimote dans la direction dans laquelle il désire déplacer Link. Fin Une fois que l'utilisateur a atteint la sortie du labyrinthe, un écran de fin sera présenté. L'utilisateur peut alors appuyer sur A pour rejouer ou appuyer sur B pour fermer l'application. Actions possibles Pendant écran de démarrage et de fin : Press A Press B Say Theme name or «next or «previous» Démarrer ou redémarrer une partie Quitter le programme Change le theme de la musique Pendant le jeu : Move the wiimote Say Theme name or «next or «previous» Permet de déplacer le personnage Change le theme de la musique Page 13
Implémentation Création de labyrinthe Luis Domingues, Tiago De Deus, Naomi Favre Grille Vu que le labyrinthe est une succession de cases, celles-ci seront stockées dans un objet Grille. Avec cet objet on peut avoir la taille du labyrinthe, récupérer les objets Cases, savoir la case de départ et la case où se trouve la sortie. Case Chaque objet de type Case, elles ont les méthodes qui gèrent les actions des utilisateurs et mettent à jour la position de Link. Elles contiennent aussi des objets représentant les arbres qui permettent d'empêcher Link de passer au travers. Factory La factory se chargera de créer les labyrinthes et de les donner ensuite au contrôleur principal. Idéalement elle génèrerait aléatoirement les labyrinthes mais dans notre application cette classe génère 3 labyrinthes prédéfinis. Fonctionnement du jeu Le thread principal de l'application possède plusieurs objets de types Screen. Il les utilise comme un pattern d'état où chaque Screen correspond à un état. Il y a 4 Screens en tout : Le screen de départ, le screen d'aide, le screen correspondant à une case et le screen de victoire. La loop principale du thread réalise plusieurs actions : - Elle clear l'écran - Elle demande au screen courant de se dessiner - Elle demande au screen courant de gérer les éventuelles actions de l'utilisateur. Quand le screen gère les actions de l'utilisateur, il modifie l'état du jeu en conséquence. En parallèle à ce thread, un autre thread attend les messages de la kinect et change la musique en conséquence. Intégration de la partie multimodale Geste La partie gestuelle est inspirée du Joystick d une borne arcade. Elle permet ainsi que diriger le personnage dans 4 directions. Haut, bas, droite et gauche. Pour ce faire, nous avons utilisé la WiiMote et sa capacité à connaitre sa position dans l espace grâce aux accéléromètres. Elle nous retourne directement les valeurs Roll ainsi que Pitch. Grâce à cela nous pouvons calculer la position approximative de la WiiMote et ainsi savoir dans quelle direction le personnage Page 14
Voix La voix est utilisée afin de changer de musique pendant une partie. Cette modalité, contrairement au reste de l application, est faite en C# à l aide du SDK Kinect. Une petite application tourne en arrière-plan de Java. Celui-ci, grâce à un dictionnaire, reconnais les mots clés et les envoient via UDP au jeu, qui lui est en premier plan. Page 15
Conclusion "Comme dirait Luis, ce n'est pas le joystick qui s'adapte à la personne, c'est la personne qui s'adapte à l'implémentation bancale du joystick." Tiago "Je n'ai jamais dit ça." Luis "Hahaha ^^ " - Naomi Ce projet c est axé sur 2 aspects qui nous tiennent à cœur. Même si nous ne sommes pas tous de grands joueurs aujourd hui, nous sommes tous les 3 nostalgiques de la période 8bits des jeux vidéo. Cela explique pourquoi nous nous somment tourner sur un mini jeu tout droit venu du début des années 90, mais également pourquoi nous nous somment inspiré d un Joystick de borne arcade pour le déplacement de notre personnage. La deuxième modalité utilisée ici, est la voix, afin de changer de thème musical en cours de partie. Ceci est né d une frustration que nous avons eue, pendant les parties, de devoir mettre le jeu en pause afin de pouvoir changer le morceau en cours. Page 16
Références 1. www.nin-nin-game.com 2. commons.wikimedia.org 3. www.target.com 4. hyphytek.net 5. mafichetechnique.com/xbox360-kinect-illumiroom Luis Domingues, Tiago De Deus, Naomi Favre Page 17