Taula de continguts:

NeoPixels Matrix Game Joc de serps: 4 passos
NeoPixels Matrix Game Joc de serps: 4 passos

Vídeo: NeoPixels Matrix Game Joc de serps: 4 passos

Vídeo: NeoPixels Matrix Game Joc de serps: 4 passos
Vídeo: ESP32 powered WS2812B LED Matrix [Part 3] Breakout and snake added! 2024, Juny
Anonim
NeoPixels Matrix Game Joc de serps
NeoPixels Matrix Game Joc de serps

Encara recordes el joc de serps que vam jugar a la nostra caixa o al mòbil durant la nostra infància? Avui aprendrem a fer un joc de serps amb NeoPixels Matrix 8 * 8. Escollim Arduino uno com a centre de control i mòdul de control de joystick per controlar la serp.

Pas 1: llista de components:

Maquinari:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Flexible 64 RGB LED 8 * 8 NeoPixels Matrix

1 X mòdul de trencament del joystick BKOUT_MD01

3 X línia de guia

Programari:

IDE Arduino

Pas 2: connexió de maquinari

Connecteu NeoPixels al pin D2.

"X" al mòdul de trencament del joystick connecta el pin A0 a la placa Arduino UNO, el pin A1 "Y", el pin A2 "K".

Pas 3: Programació

P # inclou

#define PIN 2 // Pin de sortida #define MAX_LED 64 // Quantitat de comptes uint32_t c; int a = 0, nombre; unsigned char huan = 0, ci = 0; unsigned char u = 40; // La mida del tipus de lletra del grup de paraules sense signar x = 0; Caràcter sense signar Color [3]; unsigned char 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 llums de caràcters sense signar [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},}; caràcter de caràcter sense signar [8] = // Estableix la paraula que s'enviarà {{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, 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 },}; unsigned char displayscore [8] [8]; int speedS = 400; // Velocitat inicial de la puntuació int de la serp; // Puntuació del joc int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coordenada dels aliments int SX, SY; // Coordenada del cap de serp int KEY, K; int Habilitat; // Activa el reinici del joc char sx [64]; // Coordenada del cos de la serp (64); Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = random (0, 7); FY = aleatori (0, 7); for (int i = 0; i <3 + score; i ++) // Eviteu la visualització dels aliments al cos de la serp {if (FX == sx && FY == sy ) aneu A; }} void myDelay (Temps int signat) {// Durant el període de retard del moviment de la serp, hem de fer alguna cosa com purpurina de menjar i llegir la direcció del joystick per a (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; }} // Aquí podeu comparar si la direcció del teclat és oposada a la direcció del moviment de la serp. Si és oposat, renuncieu al teclat. / ************************************************** *************************************************** **************************************************** *************************************************** ******** / void gameover () {// Un cop s'hagi aturat el programa Gameover, premeu el botó central per reiniciar el joc. valor de caràcter sense signar, y; Color [0] = aleatori (3, 18); // Estableix el color. El paràmetre és R G B, rang 0-255. Color [1] = aleatori (3, 18); Color [2] = aleatori (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); valor = puntuació / 10; valor = valor * 4; y = 0; for (número = valor; nombre <valor + 4; número ++) {per (caràcter sense signe vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = caràcter [número] [vertical]; } y ++; } valor = puntuació% 10; valor = valor * 4; for (número = valor; nombre <valor + 4; número ++) {per (caràcter sense signe vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = caràcter [número] [vertical]; } y ++; } for (unsigned char horizontal = 0; horizontal <8; horizontal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displayscore [horizontal] [vertical] == 1) // Jutgeu si la llum està activat. {strip.setPixelColor (clar [horitzontal] [vertical], c); } else strip.setPixelColor (clar [horitzontal] [vertical], 0); }} strip.show (); // Retard de les dades d’enviament (5000); K = 0; // Restableix la direcció del joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Restableix la puntuació de les coordenades de la serp = 0; // Restableix la velocitat de puntuació del joc S = 400; // La velocitat inicial de la serp} void setup () {Serial.begin (9600); // Inicialitzar la biblioteca strip.begin (); // Enviar dades. Per defecte, el color de cada punt és 0. Per tant, tots els punts no s’il·luminen al principi. strip.show (); K = 0; // Restableix la direcció del joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Restableix la puntuació de les coordenades de la serp = 0; // Restableix la puntuació del joc Color [0] = aleatori (3, 18); // Estableix el color. El paràmetre és R G B, rang 0-255. Color [1] = aleatori (3, 18); Color [2] = aleatori (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Verd Vermell Blau // Estableix el color per a (número = 0; número <24; nombre ++) {strip.setPixelColor (vés [número], c); } strip.show (); // Retard de les dades d’enviament (2000); RANDOM (); // Produir menjar} void mobile () {KEY = K; // Cada moviment de serp fa que la direcció canviï d’una vegada. if (CLAU == 8) // Moviment ascendent de la serp {for (int i = 2 + puntuació; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Aneu més enllà de la vora i continueu a l’altra banda sy [0] = 7; } else if (CLAU == 5) // Moviment descendent de la serp {for (int i = 2 + puntuació; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Aneu més enllà del límit i continueu a l’altra banda sy [0] = 0; } else if (KEY == 4) // Snake left left {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) // Aneu més enllà de la vora i continueu a l’altra banda sx [0] = 7; } else if (KEY == 6) // Moviment correcte de la serp {for (int i = 2 + puntuació; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Aneu més enllà de la vora i continueu a l’altra banda sx [0] = 0; } // Mou el cos de la serp amb el botó} void displays () {for (number = 0; number <64; number ++) // Esborreu la pantalla {strip.setPixelColor (number, 0); } strip.show (); Color [0] = 40; // Estableix el color. El paràmetre és R G B, rang 0-255. Color [1] = 0; Color [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verd Vermell Blau // Estableix el color x = clar [FX] [FY]; // Mostra el menjar strip.setPixelColor (x, c); Color [0] = aleatori (3, 18); // Estableix el color. El paràmetre és R G B, rang 0-255. Color [1] = aleatori (3, 18); Color [2] = aleatori (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Verd vermell Blau // Estableix el color per a (int i = 2 + puntuació; i> 0; i--) // Mostra el cos de la serp {x = light [sx [sy ; strip.setPixelColor (x, c); } Color [0] = 0; // Estableix el color. El paràmetre és R G B, rang 0-255. Color [1] = 40; Color [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verd Vermell Blau // Estableix el color x = clar [sx [0] [sy [0]; // Mostra el cap de serp strip.setPixelColor (x, c); strip.show (); // Enviar dades} bucle buit () {mòbil (); myDelay (speedS); // Dins de () és el temps de retard. displays (); SX = sx [0]; SY = sy [0]; // Obteniu la coordenada del cap de serp per a (int i = 1; i <= 2 + puntuació; i ++) {if (SX == sx && SY == sy ) gameover (); } // Jutgeu si el cap de serp va tocar el seu cos. Si el toqueu, reenvieu-lo a GameOver. if (SY == FY && SX == FX) {RANDOM (); puntuació ++; Color [0] = 40; // Estableix el color. El paràmetre és R G B, rang 0-255. Color [1] = 0; Color [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verd Vermell Blau // Estableix el color x = clar [FX] [FY]; // Mostra el menjar strip.setPixelColor (x, c); strip.show (); // Envia dades if (! (puntuació% 5)) {// Accelera la velocitat de la serp segons la puntuació. Cada 5 aliments menjats s’acceleren a 100 ms. speedS = speedS - 50; if (speedS <150) // El límit inferior és de 200 ms. Si la velocitat és inferior a 200 ms, la velocitat es manté de 200 ms. velocitatS = 150; }} // Jutgeu si es mengen aliments. Si la serp menjava menjar, més puntuacions i regenerar els aliments a l’atzar. }

Resultat de l'experiment

Pas 4: Resultat de l'experiment

Lectures relatives:

FreaksBot Bluetooth Car

Enceneu el First Bead a NeoPixels Matrix 8 * 8 amb Arduino

Micro: bit Experiment 05: LED RGB - Elecfreaks Mirco: bit Starter Kit Course

Divendres Publicació del producte: Kit de soldadura amb pantalla LED de freqüència d’espectre de música

Utilitzeu ElecFreaks Micro: bit Tinker Kit per fer una llum intel·ligent

Recomanat: