Le jeu Snake est un jeu vidéo classique qui a vu le jour dans les années 1970 et a gagné en popularité grâce à son inclusion sur les téléphones Nokia dans les années 1990. Son concept est simple mais addictif, ce qui en fait un des jeux les plus emblématiques de l'histoire du jeu vidéo.
Principe du jeu
Dans Snake, le joueur contrôle un serpent (souvent représenté par une ligne ou une série de blocs) qui se déplace sur une aire de jeu. L'objectif principal est de :
1- Manger de la nourriture : Représentée par des points ou d'autres objets, la nourriture apparaît à des endroits aléatoires sur le terrain. Chaque fois que le serpent mange, il grandit en longueur.
2- Éviter les obstacles : Le joueur doit éviter que le serpent ne se heurte à lui-même ou aux murs de l'aire de jeu, ce qui entraîne la fin de la partie.
Mécanique de jeu
Contrôle : Le serpent est contrôlé via des touches directionnelles (haut, bas, gauche, droite).
Déplacement : Le serpent avance en continu, et le joueur ne peut modifier que sa direction.
Difficulté croissante : Plus le serpent grandit, plus il devient difficile de le contrôler, car il occupe une plus grande partie de l'espace.
Créer une version du jeu Snake avec un Arduino UNO, une manette (joystick), un afficheur LCD, et un buzzer peut être un projet amusant et éducatif. Voici les principaux objectifs que vous pouvez viser pour ce projet :
Développer un jeu interactif où le joueur contrôle un serpent sur un écran LCD en utilisant un joystick pour manger de la nourriture, tout en intégrant des sons pour améliorer l'expérience utilisateur.
Objectifs spécifiques
1- Contrôle du serpent avec le joystick
Utiliser le joystick pour diriger le serpent (haut, bas, gauche, droite).
Assurer un mouvement fluide et réactif.
2- Affichage du jeu sur un écran LCD
Utiliser un afficheur LCD (16x2 ou 20x4) pour afficher le serpent, la nourriture et les bordures du jeu.
Mettre à jour l'affichage en temps réel pour suivre les déplacements du serpent.
3- Ajout d'une logique de croissance et de score
Faire grandir le serpent lorsqu'il mange la nourriture.
4- Gestion des collisions
Fin du jeu si le serpent entre en collision avec lui-même.
5- Sons avec le buzzer
Jouer un son via le buzzer dans les situations suivantes lorsque le serpent mange la nourriture (son de succès) ou le joueur perd (son d'échec).
6- Génération de nourriture aléatoire
Afficher la nourriture à des emplacements aléatoires sur le terrain de jeu.
Assurer que la nourriture ne se génère pas à l'emplacement du serpent.
Arduino UNO :
C'est le microcontrôleur pour contrôler l'ensemble du jeu.
Joystick :
Il permet au joueur de diriger le serpent.
Afficheur LCD :
Il affiche le serpent et la nourriture.
Buzzer :
Il est utilisé Pour ajouter des sons au jeu.
Câble de connexion
Vous aurez besoin d'un câble pour connecter l'afficheur LCD et la manette (Joystick) à la carte Arduino UNO.
Plaque d'essai (Breadboard) :
On utilise la plaque d'essai pour faciliter le câblage des différents composants.
Joystick :
VRx : Connecté à l'entrée analogique A2 de la carte Arduino UNO.
VRy : Connecté à l'entrée analogique A3 de la carte Arduino UNO.
SW : Connecté à l'entrée numérique D2 de la carte Arduino UNO pour le bouton-poussoir.
GND : Connecté à broche GND de la carte Arduino UNO.
VCC : Connecté à broche 3V3 de la carte Arduino UNO.
2. Afficheur LCD :
SDA : Connecté à l'entrée analogique A4 de la carte Arduino UNO.
SCL : Connecté à l'entrée analogique A5 de la carte Arduino UNO.
GND : Connecté à broche GND de la carte Arduino UNO.
VCC : Connecté à broche 5V de la carte Arduino UNO.
3. Buzzer :
Connecter la broche (+) du buzzer à la sortie numérique D3 de l'Arduino UNO.
Relier l'autre broche (-) à GND de l'Arduino UNO.
Voici un exemple simplifié pour dessiner le serpent et la nourriture sur le LCD et contrôler du joystick pour diriger le serpent.
1- Initialisation :
a) Importer la bibliothèque LiquidCrystal_I2C pour contrôler l'afficheur LCD I2C.
Configurer l’écran LCD pour afficher le jeu.
Initialiser les positions du serpent, de la nourriture et le sens du mouvement.
1 2 3 4 5 6 7 8 9 10 11 |
void setup() { lcd.init(); // initialisation de l’afficheur LCD // Les coordonnees initialies du Snake x=0; y=0; // Les coordonnees initialies de la nourriture x1=4; y1=0; snake=">"; food="o"; } |
2- Le joystick contrôle la direction.
1 2 3 4 5 6 7 8 |
if ((X_joystick < 10) && (sens!="bas")) sens="haut"; if ((X_joystick > 500) && (sens!="haut")) sens="bas"; if ((Y_joystick < 10) && (sens!="gauche")) sens="droite"; if ((Y_joystick > 500)&& (sens!="droite")) sens="gauche"; |
3- Mettre à jour la position du serpent à chaque cycle.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
if ((sens== "droite" ) && (x<15) ){ snake=">"; x=x+1; } if ((sens== "gauche" ) && (x>0) ){ snake="<"; x=x-1; } if ((sens== "haut" ) && (y>0) ){ snake="^"; y=y-1; } if ((sens== "bas" ) && (y<1) ){ snake="v"; y=y+1; } |
4- Détection de collision avec la nourriture
1 2 3 4 5 |
if ((x==x1)&&(y==y1)) { // Une position aléatoire est générée lorsque le serpent mange. x1=random(0,15); y1=random(0,1); } |
Voici le programme Arduino complet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-joystick */ #include <LiquidCrystal_I2C.h> #define VRX_PIN A2 // Arduino pin connected to VRX pin #define VRY_PIN A3 // Arduino pin connected to VRY pin #define swPin 2 int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis LiquidCrystal_I2C lcd(0x27, 20, 4); int x,y; // coordonnées du snake int x1,y1; //coordonnées du Food String snake,food; String sens="droite"; int X_joystick,Y_joystick; void setup() { lcd.init(); // initialisation de l’afficheur x=0; y=0; x1=4; y1=0; snake=">"; food="o"; } void loop() { X_joystick = analogRead(VRX_PIN); Y_joystick = analogRead(VRY_PIN); lcd.backlight(); // active le rétro-éclairage lcd.clear(); // effacer le contenu de l’Afficheur LCD if ((X_joystick < 10) && (sens!="bas")) sens="haut"; if ((X_joystick > 500) && (sens!="haut")) sens="bas"; if ((Y_joystick < 10) && (sens!="gauche")) sens="droite"; if ((Y_joystick > 500)&& (sens!="droite")) sens="gauche"; if ((sens== "droite" ) && (x<15) ){ snake=">"; x=x+1; } if ((sens== "gauche" ) && (x>0) ){ snake="<"; x=x-1; } if ((sens== "haut" ) && (y>0) ){ snake="^"; y=y-1; } if ((sens== "bas" ) && (y<1) ){ snake="v"; y=y+1; } if ((x==x1)&&(y==y1)) { x1=random(0,15); y1=random(0,1); } lcd.setCursor(x1,y1); lcd.print(food); lcd.setCursor(x,y); lcd.print(snake); delay(1000); lcd.clear(); } |
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info