Sommario:

NeoPixel Matrix:Gioco del serpente: 4 passaggi
NeoPixel Matrix:Gioco del serpente: 4 passaggi

Video: NeoPixel Matrix:Gioco del serpente: 4 passaggi

Video: NeoPixel Matrix:Gioco del serpente: 4 passaggi
Video: Come collegare un led RGB ad Arduino #25 2024, Dicembre
Anonim
NeoPixel Matrix:Gioco del serpente
NeoPixel Matrix:Gioco del serpente

Ricordi ancora il gioco del serpente che abbiamo giocato sulla nostra scatola di gioco o sul cellulare durante la nostra infanzia? Oggi impareremo come creare un gioco di serpenti con NeoPixel Matrix 8*8. Scegliamo Arduino uno come centro di controllo e modulo di breakout del Joystick per controllare il serpente.

Passaggio 1: elenco dei componenti:

Hardware:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X 64 LED RGB flessibili 8 * 8 matrice NeoPixel

1 X Joystick modulo breakout BKOUT_MD01

3 X Linee Guida

Software:

Arduino IDE

Passaggio 2: connessione hardware

Collega NeoPixel al pin D2.

"X" sul modulo di breakout del Joystick collega il pin A0 sulla scheda Arduino UNO, "Y" collega il pin A1, "K" collega il pin A2.

Passaggio 3: programmazione

P#include

#define PIN 2 //Output Pin #define MAX_LED 64 //Quantità di cordone uint32_t c; int a = 0, numero; unsigned char huan = 0, ci = 0; carattere senza segno u = 40; //La dimensione del carattere del gruppo di parole unsigned char x = 0; carattere non firmato Colore[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 unsigned char light[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] = //Imposta la parola da inviare { {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 velocitàS = 400; // Velocità iniziale del punteggio di snake int; // Punteggio di gioco int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coordinata dell'alimento int SX, SY; // Coordinata della testa di serpente int KEY, K; int Abilitato; // Abilita il riavvio del gioco char sx[64]; //Coordinate del corpo del serpente char sy[64]; Striscia Adafruit_NeoPixel = Adafruit_NeoPixel(MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void CASUALE() { A: FX = casuale(0, 7); FY = casuale(0, 7); for (int i = 0; i < 3 + punteggio; i++) //Previene la visualizzazione del cibo sul corpo del serpente { if (FX == sx && FY == sy) goto A; } } void myDelay(unsigned int Time) { // Durante il periodo di ritardo del movimento del serpente, dobbiamo fare qualcosa come il cibo glitterato e leggere la direzione del Joystick for (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; } } // Qui puoi confrontare se la direzione della tastiera è opposta alla direzione di movimento del serpente. Se è il contrario, rinuncia alla tastiera. /************************************************** ************************************************** ************************************************** ************************************************** ********/ void gameover() { // Una volta terminato il programma Gameover, premi il pulsante centrale per riavviare il gioco. valore di carattere senza segno, y; Colore[0] = casuale(3, 18); // Imposta colore. Il parametro è R G B, intervallo 0-255. Colore[1] = casuale(3, 18); Colore[2] = casuale(3, 18); c = striscia. Colore(Colore[1], Colore[0], Colore[2]); valore = punteggio / 10; valore = valore * 4; y = 0; for (numero = valore; numero < valore + 4; numero++) { for (carattere senza segno verticale = 0; verticale < 8; verticale++) { displayscore[y][verticale] = carattere[numero][verticale]; } y++; } valore = punteggio % 10; valore = valore * 4; for (numero = valore; numero < valore + 4; numero++) { for (carattere senza segno verticale = 0; verticale < 8; verticale++) { displayscore[y][verticale] = carattere[numero][verticale]; } y++; } for (unsigned char orizzontale = 0; orizzontale < 8; orizzontale++) { for (unsigned char vertical = 0; verticale < 8; verticale++) { if (displayscore[orizzontale][verticale] == 1) //Giudica se la luce è acceso. { strip.setPixelColor(light[horizontal][vertical], c); } else strip.setPixelColor(light[horizontal][vertical], 0); } } strip.show();//Invia ritardo dati(5000); K = 0; // Reimposta direzione Joystick sx[0] = 2; sx[1] = 1; sx[2] = 0; si[0] = 1; si[1] = 1; si[2] = 1; // Reimposta il punteggio delle coordinate del serpente = 0; // Reimposta la velocità del punteggio di giocoS = 400; // La velocità iniziale di snake } void setup() { Serial.begin(9600); // Inizializza la libreria strip.begin(); // Invia i dati. Predefinito il colore di ogni punto come 0. Quindi ogni punto non è illuminato all'inizio. strip.show(); K = 0; // Reimposta la direzione del Joystick sx[0] = 2; sx[1] = 1; sx[2] = 0; si[0] = 1; si[1] = 1; si[2] = 1; // Reimposta il punteggio delle coordinate del serpente = 0; // Resetta il punteggio del gioco Colour[0] = random(3, 18); // Imposta colore. Il parametro è R G B, intervallo 0-255. Colore[1] = casuale(3, 18); Colore[2] = casuale(3, 18); c = striscia. Colore(Colore[1], Colore[0], Colore[2]); //Verde Rosso Blu // Imposta il colore per (numero = 0; numero <24; numero++) { strip.setPixelColor(go[numero], c); } strip.show();// Invia ritardo dati(2000); A CASO(); //Produci cibo } void mobile() { KEY = K; //Ogni movimento del serpente fa cambiare direzione per una volta. if (KEY == 8) // Snake movimento verso l'alto { for (int i = 2 + punteggio; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sy[0] = sy[0] - 1; if (sy[0] <0) // Supera il confine e continua dall'altra parte sy[0] = 7; } else if (KEY == 5) // Snake movimento verso il basso { for (int i = 2 + punteggio; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sy[0] = sy[0] + 1; if (sy[0] > 7) // Supera il confine e continua dall'altra parte sy[0] = 0; } else if (KEY == 4) // Movimento sinistro del serpente { for (int i = 2 + punteggio; i > 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sx[0] = sx[0] - 1; if (sx[0] <0) // Supera il confine e continua dall'altra parte sx[0] = 7; } else if (KEY == 6) // Snake movimento a destra { for (int i = 2 + punteggio; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sx[0] = sx[0] + 1; if (sx[0] > 7) // Supera il confine e continua dall'altra parte sx[0] = 0; } // Sposta il corpo del serpente con il pulsante } void display() { for (numero = 0; numero <64; numero++) // Cancella lo schermo { strip.setPixelColor(numero, 0); } strip.show(); Colore[0] = 40; // Imposta il colore. Il parametro è R G B, intervallo 0-255. Colore[1] = 0; Colore[2] = 0; c = striscia. Colore(Colore[1], Colore[0], Colore[2]); //Verde Rosso Blu // Imposta colore x = light[FX][FY]; //Visualizza il cibo strip.setPixelColor(x, c); Colore[0] = casuale(3, 18); // Imposta il colore. Il parametro è R G B, intervallo 0-255. Colore[1] = casuale(3, 18); Colore[2] = casuale(3, 18); c = striscia. Colore(Colore[1], Colore[0], Colore[2]); //Verde Rosso Blu // Imposta il colore per (int i = 2 + punteggio; i> 0; i--) //Visualizza il corpo del serpente { x = light[sx[sy; strip.setPixelColor(x, c); } Colore[0] = 0; // Imposta il colore. Il parametro è R G B, intervallo 0-255. Colore[1] = 40; Colore[2] = 0; c = striscia. Colore(Colore[1], Colore[0], Colore[2]); //Verde Rosso Blu // Imposta colore x = light[sx[0][sy[0]; //Mostra la testa di serpente strip.setPixelColor(x, c); strip.show();//Invia dati } void loop() { mobile(); mioRitardo(velocità); // Entro() è il tempo di ritardo. mostra(); SX = sx[0]; SY = sy[0]; // Ottieni la coordinata della testa di serpente for (int i = 1; i <= 2 + punteggio; i++) { if (SX == sx && SY == sy) gameover(); } // Giudica se la testa di serpente ha toccato il suo corpo. Se toccato, inoltra a GameOver. if (SY == FY && SX == FX) { RANDOM(); punteggio ++; Colore[0] = 40; // Imposta il colore. Il parametro è R G B, intervallo 0-255. Colore[1] = 0; Colore[2] = 0; c = striscia. Colore(Colore[1], Colore[0], Colore[2]); //Verde Rosso Blu // Imposta colore x = light[FX][FY]; //Visualizza il cibo strip.setPixelColor(x, c); strip.show();//Send data if (!(score % 5)) { // Accelera la velocità del serpente in base al punteggio. Ogni 5 cibi mangiati, accelera di 100 ms. velocitàS = velocitàS - 50; if (speedS < 150) // Il limite inferiore è 200 ms. Se la velocità è inferiore a 200 ms, la velocità rimane di 200 ms. velocitàS = 150; } } // Giudica se il cibo viene mangiato. Se il serpente ha mangiato cibo, allora più punteggi e rigenera il cibo in modo casuale. }

Risultato dell'esperimento

Passaggio 4: risultato dell'esperimento

Letture relative:

FreaksBot Bluetooth Car

Accendi il primo tallone su 8*8 NeoPixel Matrix con Arduino

Micro:bit Esperimento 05: LED RGB -- Corso Elecfreaks Mirco: bit Starter Kit

Friday Product Post: Kit di saldatura per display a spettro di frequenza musicale a LED

Usa ElecFreaks Micro:bit Tinker Kit per creare una luce intelligente

Consigliato: