Cuprins:

NeoPixels Matrix Game Joc Șarpe: 4 pași
NeoPixels Matrix Game Joc Șarpe: 4 pași

Video: NeoPixels Matrix Game Joc Șarpe: 4 pași

Video: NeoPixels Matrix Game Joc Șarpe: 4 pași
Video: Arduino-based 3D-printed mini retro arcade machine 2024, Iulie
Anonim
NeoPixels Matrix : Joc Șarpe
NeoPixels Matrix : Joc Șarpe

Vă mai amintiți jocul de șarpe pe care l-am jucat pe cutia noastră de joc sau pe mobil în timpul copilăriei noastre? Astăzi vom învăța cum să facem un joc de șarpe cu 8 * 8 NeoPixels Matrix. Alegem Arduino uno ca centru de control și modul Joystick Breakout pentru a controla șarpele.

Pasul 1: Lista componentelor:

Hardware:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X LED flexibil 64 RGB 8 * 8 NeoPixels Matrix

1 X Joystick Breakout module BKOUT_MD01

3 X Linia de ghidare

Software:

IDE Arduino

Pasul 2: Conexiune hardware

Conectați NeoPixels la pinul D2.

„X” pe modulul de separare a joystick-ului conectați pinul A0 pe placa Arduino UNO, „Y” conectați pinul A1, „K” conectați pinul A2.

Pasul 3: Programare

P # include

#define PIN 2 // Pin de ieșire #define MAX_LED 64 // Cantitatea de margele uint32_t c; int a = 0, număr; char sign huan = 0, ci = 0; nesemnat u = 40; // Dimensiunea fontului grupului de cuvinte fără semn char = 0; Culoare caractere nesemnate [3]; caractere nesemnate 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 lumină de caractere nesemnată [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},}; caractere de caractere nesemnate [8] = // Setați cuvântul de trimis {{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]; viteza intS = 400; // Viteza inițială a scorului șarpelui; // Scor joc int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coordonata alimentelor int SX, SY; // Coordonata capului de șarpe int CHEIE, K; int Activat; // Activați repornirea jocului char sx [64]; // Coordonata caracterului corpului șarpelui [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = random (0, 7); FY = aleatoriu (0, 7); for (int i = 0; i <3 + scor; i ++) // Preveniți afișarea alimentelor pe corpul șarpelui {if (FX == sx && FY == sy ) mergeți la A; }} void myDelay (unsigned int Time) {// În timpul perioadei de întârziere a mișcării șarpelui, trebuie să facem ceva de genul sclipici alimentar și să citim direcția Joystick pentru (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; }} // Aici puteți compara dacă direcția tastaturii este opusă direcției de mișcare a șarpelui. Dacă este opus, renunțați la tastatură. / ************************************************** ************************************************** ************************************************** ************************************************** ******** / void gameover () {// Odată ce programul Gameover sa oprit, apăsați butonul central pentru a reporni jocul. valoare de caracter nesemnată, y; Culoare [0] = aleatoriu (3, 18); // Setați culoarea. Parametrul este R G B, intervalul 0-255. Culoare [1] = aleatoriu (3, 18); Culoare [2] = aleatoriu (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); valoare = scor / 10; valoare = valoare * 4; y = 0; for (număr = valoare; număr <valoare + 4; număr ++) {pentru (caracter nesemnificat vertical = 0; vertical <8; vertical ++) {afișează [y] [vertical] = caracter [număr] [vertical]; } y ++; } valoare = scor% 10; valoare = valoare * 4; for (număr = valoare; număr <valoare + 4; număr ++) {pentru (caracter nesemnificat vertical = 0; vertical <8; vertical ++) {afișează [y] [vertical] = caracter [număr] [vertical]; } y ++; } for (unsigned char horizontal = 0; horizontal <8; horizontal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displayscore [horizontal] [vertical] == 1) // Judecă dacă lumina este pornit. {strip.setPixelColor (ușor [orizontal] [vertical], c); } else strip.setPixelColor (ușor [orizontal] [vertical], 0); }} strip.show (); // Trimitere date întârziere (5000); K = 0; // Resetați direcția joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Resetați scorul coordonatelor șarpelui = 0; // Resetați viteza scorului jocului S = 400; // Viteza inițială a șarpelui} void setup () {Serial.begin (9600); // Inițializați biblioteca strip.begin (); // Trimite date. Valoarea implicită a culorii fiecărui punct este 0. Deci, fiecare punct nu este iluminat la început. strip.show (); K = 0; // Resetați direcția Joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Resetați scorul coordonatelor șarpelui = 0; // Resetați scorul jocului Culoare [0] = aleatoriu (3, 18); // Setați culoarea. Parametrul este R G B, intervalul 0-255. Culoare [1] = aleatoriu (3, 18); Culoare [2] = aleatoriu (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Verde Roșu Albastru // Setați culoarea pentru (număr = 0; număr <24; număr ++) {strip.setPixelColor (mergeți [număr], c); } strip.show (); // Trimitere date întârziere (2000); ALEATORIU(); // Produceți alimente} void mobile () {KEY = K; // Fiecare mișcare a șarpelui schimbă direcția o dată. if (KEY == 8) // Mișcarea în sus a șarpelui {for (int i = 2 + scor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Treci dincolo de graniță și continuă pe cealaltă parte sy [0] = 7; } else if (KEY == 5) // Șarpe mișcare descendentă {for (int i = 2 + scor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Treceți dincolo de graniță și continuați pe cealaltă parte sy [0] = 0; } else if (KEY == 4) // Snake left movement {for (int i = 2 + scor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Treceți dincolo de graniță și continuați pe cealaltă parte sx [0] = 7; } else if (KEY == 6) // Snake right movement {for (int i = 2 + scor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Treceți dincolo de graniță și continuați pe cealaltă parte sx [0] = 0; } // Mutați corpul șarpelui cu butonul} afișează gol () {pentru (număr = 0; număr <64; număr ++) // Ștergeți ecranul {strip.setPixelColor (număr, 0); } strip.show (); Culoare [0] = 40; // Setați culoarea. Parametrul este R G B, intervalul 0-255. Culoare [1] = 0; Culoare [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Roșu Albastru // Setați culoarea x = lumină [FX] [FY]; // Afișați food strip.setPixelColor (x, c); Culoare [0] = aleatoriu (3, 18); // Setați culoarea. Parametrul este R G B, intervalul 0-255. Culoare [1] = aleatoriu (3, 18); Culoare [2] = aleatoriu (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Verde Roșu Albastru // Setați culoarea pentru (int i = 2 + scor; i> 0; i--) // Afișați corpul șarpelui {x = light [sx [sy ; strip.setPixelColor (x, c); } Culoare [0] = 0; // Setați culoarea. Parametrul este R G B, intervalul 0-255. Culoare [1] = 40; Culoare [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Roșu Albastru // Setați culoarea x = light [sx [0] [sy [0]; // Afișați strip head head de șarpe.setPixelColor (x, c); strip.show (); // Trimite date} void loop () {mobil (); myDelay (speedS); // În termen de () este timpul de întârziere. afișează (); SX = sx [0]; SY = sy [0]; // Obțineți coordonatele capului de șarpe pentru (int i = 1; i <= 2 + scor; i ++) {if (SX == sx && SY == sy ) gameover (); } // Judecă dacă capul de șarpe și-a atins corpul. Dacă este atins, treceți la GameOver. if (SY == FY && SX == FX) {RANDOM (); scor ++; Culoare [0] = 40; // Setați culoarea. Parametrul este R G B, intervalul 0-255. Culoare [1] = 0; Culoare [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Roșu Albastru // Setați culoarea x = luminos [FX] [FY]; // Afișați food strip.setPixelColor (x, c); strip.show (); // Trimiteți date dacă (! (scor% 5)) {// Accelerați viteza șarpelui în funcție de scor. La fiecare 5 alimente consumate, se adaugă 100 ms. speedS = speedS - 50; if (speedS <150) // Limita inferioară este de 200ms. Dacă viteza este mai mică de 200ms, viteza rămâne 200ms. vitezaS = 150; }} // Judecă dacă mâncarea este consumată. Dacă șarpele a mâncat alimente, atunci plus scoruri și regenerarea alimentelor la întâmplare. }

Rezultatul experimentului

Pasul 4: Rezultatul experimentului

Citiri relative:

FreaksBot Bluetooth Car

Aprindeți First Bead pe 8 * 8 NeoPixels Matrix cu Arduino

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

Afișare produs vineri: Set de lipire cu afișaj cu spectru de frecvență cu muzică LED

Utilizați ElecFreaks Micro: bit Tinker Kit pentru a crea o lumină inteligentă

Recomandat: