1. Introduction

Vous avez envie de piéger un(e) ami(e) avec un jeu des plus banals. Ce projet est fait pour vous puisqu'il s'agirait d'un jeu de genre labyrinthe qui serait piégé avec un "screamer". Vous pourriez aussi garder une photo souvenir d'une victime effrayée.

1.1 But

Ainsi le but de mon projet sera de faire un programme qui permet ; d'ouvrir une fenêtre avec une image de labyrinthe comme fond; de créer un carré rouge qui peut être déplacé par un joystick; que le carré ne puisse pas passer à travers les murs du labyrinthe; de déterminer une case piégée; de pouvoir activer le piège lorsque le carré se trouve sur la case piégée; le piège consistant à émettre un son terrifiant, afficher une image terrifiante, prendre en photo la victime du piège.

2. Matériel et méthodes

2.1 Liste du matériels

  • Un Raspberry Pi (Model B+)
  • Un module GPIO
  • Un joystick avec bouton de sélection "PS2" Arduino
  • Un moniteur LCD (avec l'alimentation et un câble HDMI)
  • Des écouteurs
  • Une caméra Raspberry Pi Module noir (elle capte les infra-rouges cette option n'est pas nécessaire)

2.2 Fonctionnement

Lorsque le programme est lancé, le terminal est ouvert et n'affiche rien du tout. Il y a bel et bien un labyrinthe qui se trouve derrière le code de mon programme. Pour savoir à quoi ressemble le labyrinthe une image est fournie avec le programme avec un système de coordonnées. Pour savoir où se trouve le joueur il suffit de changer de position dans le labyrinthe. Puisque quand cela arrive le programme affiche la position du joueur sous cette forme "(x,y)". Ainsi il est possible de se diriger dans le labyrinthe et tenter d'en sortir. Si le joueur rentre dans un mur le programme communiquera la souffrance du joueur via un "Aie!!". Une des cases du labyrinthe est piégée. Lorsque le joueur "tombe" dessus une série d'étape s'enchaine. Premièrement le programme vous informe que vous êtes piégé via le mot "traped". Ensuite , les options (son, image, photo) étant manquantes, le programme affiche un texte se trouvant à la place des commandes qui auraient du si trouver si j'avais réussis à les faire fonctionner soit "Prise de la photo" et "son et image terrifiants". Finalement le programme s'arrête.

2.3 Le joystick

Le joystick fonctionne simplement. Il a cinq pins : 5V, GND, x, y et z. Le 5V et le GND permet le passage du courant. Le z permet de laisser passer le courant lorsque le joystick est cliqué et de ne pas le faire dans le cas contraire. Ceci est un bon exemple de binaire (1=pressé 0=pas pressé). Le x transmet le courant qui traverse son circuit correspondant. Lorsque le joystick change d'inclinaison sur l'axe x, la résistance du circuit correspondant change ainsi que son courant. Idem pour le y avec l'axe y. Ainsi il est facile de déterminer l'inclinaison du joystick en fonction du courant émis. Et ainsi de diriger le joueur.

2.4 Le GPIO (General Purpose Input/Output)

Cet outil très pratique permet la transformation de courant en information ainsi que le transfert de ces information au Raspberry Pi. En ce qui me concerne, j'ai du ajouter un petit système supplémentaire découvert sur (1). Ce système m'est nécessaire puisque le GPIO ne transmet de base que des informations dites numériques alors que le joystick envoie des informations analogiques (x,y) et numérique (z).

2.5 La caméra (PAS UTILISÉE)

La caméra est peut-être l'élément le plus simple à utiliser et installer de tout ce projet. Hormis la mise à jour du système du Raspberry Pi qui peut-être nécessaire au bon fonctionnement de la caméra. Il ne suffit que d'une commande pour l'utiliser raspistill.

2.6 Le code

Il est plus simple de présenter le code par parties, chaque parties concernant un type d'action.

2.6.1 L'affichage fenêtre via Tkinter (PAS UTILISÉ)

Cette partie du code permet l'affichage de la fenêtre de mon jeu. Pour l'instant je n'ai pas encore réussi à mettre mon labyrinthe en fond de fenêtre mais cela ne saurait tarder. Voici le code nécessaire à l'affichage d'une fenêtre qui se nomme "The Cursed Maze" :

import Tkinter 
window= Tk()
window.title(The Cursed Maze)
window.mainloop()

2.6.2 GPIO changement numérique à analogue ( JE NE L'AI PAS CODÉ voir(1) )

Sincèrement je ne comprends pas exactement tout le code, mais je sais que grâce à lui je peux utiliser mon joystick.

2.6.3 Programmation événementielle

Pour pouvoir faire quelque chose des envois du joystick il faut que le code puisse agir au moment où il reçoit ces infos et ainsi peut continuer sur les déplacement du carré. Pour cela j'utilise une méthode que j'ai vu et revu lors de mes recherches j'ouvre une boucle while True avec des commandes sous conditions à l'intérieur.

2.6.5 Gestion du piège

Émission du son apeurant

aplay son

Affichage de l'image apeurante (via Tkinter)

Prise de la photo

raspistill -n -o photo.jpg

3. Résultats

Les résultats de mon projet n'ont pas été ceux que j'escomptais au début de la création du projet. J'ai réussis à programmer un labyrinthe dans lequel il est possible de se déplacer avec un joystick. Une carte contenant des coordonnées est cependant nécessaire. Lorsque le joueur arrive sur la case piégée le programme arrive à le détecter. Il y a tout de même un gros problème puisque ni la caméra, ni le son effrayant , ni l'image effrayante n'ont pu être utilisé dans mon code. Et surtout il n'y a pas d'affichage du labyrinthe avec le joueur qui se déplace à l'intérieur.

4. Discussion

En ce qui concerne l'affichage du labyrinthe, du joueur et de l'image effrayante j'ai tenté d'utiliser Tkinter pour tout cela. Malheureusement pour moi, lorsque que je tentais de l'utilisé le programme restait bloqué dans la boucle de la fenêtre Tkinter et le jeu finissait complètement bloqué. Je n'ai pas trouvé de solution à ce problème. Ainsi j'ai opté pour un jeu avec une carte du labyrinthe et qui informe le joueur de ces coordonnées pendant la partie.

Pour la prise de la photo, le problème est que l'ordinateur ne reconnait pas la commande raspistill quand elle se trouve dans mon programme et je n'ai pas corriger cela.

Finalement pour ce qui est du son, le problème est une erreur de syntaxe que je n'ai pas su régler malgré mes recherches.

5. Conclusion

J'ai réussi à faire un jeu qui reste jouable mais qui a comme piège "terrifiant" l'affichage d'un texte qui vous informe que vous avez été piégé.

6.Références

  1. https://cdn-learn.adafruit.com/down...
  2. lien vers le programme: https://dev.gyre.ch/git?p=gyreoci-1...