Table des matières:

Matrice NeoPixels:Jeu Serpent : 4 Étapes
Matrice NeoPixels:Jeu Serpent : 4 Étapes

Vidéo: Matrice NeoPixels:Jeu Serpent : 4 Étapes

Vidéo: Matrice NeoPixels:Jeu Serpent : 4 Étapes
Vidéo: Arduino Neopixel Snake 2024, Novembre
Anonim
Matrice NeoPixels:Jeu Serpent
Matrice NeoPixels:Jeu Serpent

Vous souvenez-vous encore du jeu de serpent auquel nous jouions sur notre boîte de jeu ou sur notre mobile pendant notre enfance ? Aujourd'hui, nous allons apprendre à créer un jeu de serpent avec une matrice NeoPixels 8*8. Nous choisissons Arduino uno comme centre de contrôle et module de dérivation Joystick pour contrôler le serpent.

Étape 1: liste des composants:

Matériel:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Matrice NeoPixels Flexible 64 RGB LED 8 * 8

1 X module de dérivation Joystick BKOUT_MD01

3 X Ligne de guidage

Logiciel:

IDE Arduino

Étape 2: connexion matérielle

Connectez NeoPixels à la broche D2.

"X" sur le module de dérivation Joystick connecte la broche A0 sur la carte Arduino UNO, "Y" connecte la broche A1, "K" connecte la broche A2.

Étape 3: Programmation

P#inclure

#define PIN 2 //Broche de sortie #define MAX_LED 64 //Quantité de perle uint32_t c; int a = 0, nombre; car non signé huan = 0, ci = 0; caractère non signé u = 40; //La taille de la police du groupe de mots unsigned char x = 0; caractère non signé Couleur[3]; car non signé go = {2, 3, 4, 5, 9, 14, 17, 20, 22, 26, 27, 29, 34, 35, 36, 37, 41, 46, 49, 54, 58, 59, 60, 61}; //24 car light sans signe[8][8] = { {0, 1, 2, 3, 4, 5, 6, 7}, {15, 14, 13, 12, 11, 10, 9, 8}, {16, 17, 18, 19, 20, 21, 22, 23}, {31, 30, 29, 28, 27, 26, 25, 24}, {32, 33, 34, 35, 36, 37, 38, 39}, {47, 46, 45, 44, 43, 42, 41, 40}, {48, 49, 50, 51, 52, 53, 54, 55}, {63, 62, 61, 60, 59, 58, 57, 56}, }; unsigned char character[8] = //Définir le mot à envoyer { {0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, // 0 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, // 1 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 2 {0, 1, 1, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 3 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, // 4 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 5 {0, 1, 0, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 6 {0, 1, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, // 7 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 8 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 9 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, }; caractère non signé displaycore [8][8]; vitesseS int = 400; // Vitesse initiale du score int du serpent; // Score du jeu int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coordonnée de la nourriture int SX, SY; // Coordonnée de la tête de serpent int KEY, K; entier Activé; // Permet de redémarrer le jeu char sx[64]; //Coordonnée du corps du serpent char sy[64]; Bande Adafruit_NeoPixel = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM() { A: FX = random(0, 7); FY = aléatoire (0, 7); for (int i = 0; i < 3 + score; i++) // Empêcher l'affichage de nourriture sur le corps du serpent { if (FX == sx && FY == sy) goto A; } } void myDelay(unsigned int Time) { // Pendant la période de retard du mouvement du serpent, nous devons faire quelque chose comme des paillettes alimentaires et lire la direction du Joystick pour (int t = 1; t 950 && KEY != 5) { K = 8; } else if (yValue < 50 && KEY != 8) { K = 5; } else if (xValue 950 && KEY != 4) { K = 6; } } // Ici, vous pouvez comparer si la direction du clavier est opposée à la direction du mouvement du serpent. Si c'est en face, alors abandonnez le clavier. /****************************************************** ******************************************************** ************************************************** ******************************************************** ********/ void gameover() { // Une fois le programme Gameover arrêté, appuyez sur le bouton central pour relancer le jeu. valeur de caractère non signé, y; Couleur[0] = aléatoire(3, 18); // Définir la couleur. Le paramètre est R V B, plage 0-255. Couleur[1] = aléatoire (3, 18); Couleur[2] = aléatoire(3, 18); c = bande. Couleur(Couleur[1], Couleur[0], Couleur[2]); valeur = note/10; valeur = valeur * 4; y = 0; for (nombre = valeur; nombre < valeur + 4; nombre++) { for (caractère non signé vertical = 0; vertical < 8; vertical++) { displaycore[y][vertical] = character[nombre][vertical]; } y++; } valeur = note % 10; valeur = valeur * 4; for (nombre = valeur; nombre < valeur + 4; nombre++) { for (caractère non signé vertical = 0; vertical < 8; vertical++) { displaycore[y][vertical] = character[nombre][vertical]; } y++; } for (unsigned char horizontal = 0; horizontal < 8; horizontal++) { for (unsigned char vertical = 0; vertical < 8; vertical++) { if (displayscore[horizontal][vertical] == 1) // Juger si la lumière est sur. { strip.setPixelColor(light[horizontal][vertical], c); } else strip.setPixelColor(light[horizontal][vertical], 0); } } strip.show();//Envoyer le délai de données (5000); K = 0; // Réinitialiser la direction du joystick sx[0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Réinitialiser le score des coordonnées du serpent = 0; // Réinitialiser le score speedS = 400; // La vitesse initiale du serpent } void setup() { Serial.begin(9600); // Initialiser la bibliothèque strip.begin(); // Envoyer des données. La couleur par défaut de chaque point est 0. Ainsi, chaque point n'est pas illuminé au début. strip.show(); K = 0; // Réinitialise la direction du Joystick sx[0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Réinitialiser le score des coordonnées du serpent = 0; // Réinitialiser le score du jeu Colour[0] = random(3, 18); // Définir la couleur. Le paramètre est R V B, plage 0-255. Couleur[1] = aléatoire (3, 18); Couleur[2] = aléatoire(3, 18); c = bande. Couleur(Couleur[1], Couleur[0], Couleur[2]); //Vert Rouge Bleu // Définir la couleur pour (nombre = 0; nombre <24; nombre++) { strip.setPixelColor(go[nombre], c); } strip.show();// Délai d'envoi des données (2000); ALÉATOIRE(); //Produire de la nourriture } void mobile() { KEY = K; //Chaque mouvement du serpent fait changer de direction pour une fois. if (KEY == 8) // Mouvement ascendant du serpent { for (int i = 2 + score; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sy[0] = sy[0] - 1; if (sy[0] <0) // Aller au-delà de la frontière et continuer de l'autre côté sy[0] = 7; } else if (KEY == 5) // Mouvement vers le bas du serpent { for (int i = 2 + score; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sy[0] = sy[0] + 1; if (sy[0] > 7) // Aller au-delà de la frontière et continuer de l'autre côté sy[0] = 0; } else if (KEY == 4) // Mouvement vers la gauche du serpent { for (int i = 2 + score; i > 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sx[0] = sx[0] - 1; if (sx[0] <0) // Aller au-delà de la frontière et continuer de l'autre côté sx[0] = 7; } else if (KEY == 6) // Snake right move { for (int i = 2 + score; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sx[0] = sx[0] + 1; if (sx[0] > 7) // Aller au-delà de la frontière et continuer de l'autre côté sx[0] = 0; } // Déplacer le corps du serpent avec le bouton } void display() { for (number = 0; number <64; number++) // Effacer l'écran { strip.setPixelColor(number, 0); } strip.show(); Couleur[0] = 40; // Définir la couleur. Le paramètre est R G B, plage 0-255. Couleur[1] = 0; Couleur[2] = 0; c = bande. Couleur(Couleur[1], Couleur[0], Couleur[2]); //Vert Rouge Bleu // Définir la couleur x = light[FX][FY]; //Afficher la bande de nourriture.setPixelColor(x, c); Couleur[0] = aléatoire(3, 18); // Définir la couleur. Le paramètre est R G B, plage 0-255. Couleur[1] = aléatoire (3, 18); Couleur[2] = aléatoire(3, 18); c = bande. Couleur(Couleur[1], Couleur[0], Couleur[2]); //Vert Rouge Bleu // Définir la couleur pour (int i = 2 + score; i> 0; i--) // Afficher le corps du serpent { x = light[sx[sy; strip.setPixelColor(x, c); } Couleur[0] = 0; // Définir la couleur. Le paramètre est R G B, plage 0-255. Couleur[1] = 40; Couleur[2] = 0; c = bande. Couleur(Couleur[1], Couleur[0], Couleur[2]); //Vert Rouge Bleu // Définir la couleur x = light[sx[0][sy[0]; //Afficher la bande de tête de serpent.setPixelColor(x, c); strip.show();//Envoyer des données } void loop() { mobile(); monDélai(vitesseS); // Within() est le temps de retard. affiche(); SX = sx[0]; SY = sy[0]; // Récupère les coordonnées de la tête de serpent pour (int i = 1; i <= 2 + score; i++) { if (SX == sx && SY == sy) gameover(); } // Juge si la tête du serpent a touché son corps. Si vous le touchez, passez à GameOver. if (SY == FY && SX == FX) { RANDOM(); note ++; Couleur[0] = 40; // Définir la couleur. Le paramètre est R G B, plage 0-255. Couleur[1] = 0; Couleur[2] = 0; c = bande. Couleur(Couleur[1], Couleur[0], Couleur[2]); //Vert Rouge Bleu // Définir la couleur x = light[FX][FY]; //Afficher la bande de nourriture.setPixelColor(x, c); strip.show();//Envoyer les données if (!(score % 5)) { // Accélérer la vitesse du serpent en fonction du score. Tous les 5 aliments consommés, accélérez 100 ms. vitessesS = vitessesS - 50; if (speedS < 150) // La limite inférieure est de 200 ms. Si la vitesse est inférieure à 200ms, la vitesse reste à 200ms. vitessesS = 150; } } // Juge si la nourriture est mangée. Si le serpent a mangé de la nourriture, alors plus les scores et régénérez la nourriture au hasard. }

Résultat de l'expérience

Étape 4: résultat de l'expérience

Lectures relatives:

FreaksBot Voiture Bluetooth

Allumez la première perle sur une matrice NeoPixels 8 * 8 avec Arduino

Micro:bit Experiment 05: LED RVB -- Elecfreaks Mirco: cours du kit de démarrage bit

Article du vendredi sur le produit: Kit de soudure d'affichage de spectre de fréquence de musique à LED

Utilisez le kit ElecFreaks Micro:bit Tinker pour créer une lumière intelligente

Conseillé: