Innholdsfortegnelse:

NeoPixels Matrix : Snake Game: 4 trinn
NeoPixels Matrix : Snake Game: 4 trinn

Video: NeoPixels Matrix : Snake Game: 4 trinn

Video: NeoPixels Matrix : Snake Game: 4 trinn
Video: ESP32 powered WS2812B LED Matrix [Part 3] Breakout and snake added! 2024, Juli
Anonim
NeoPixels Matrix: Snake Game
NeoPixels Matrix: Snake Game

Husker du fremdeles slangespillet vi spilte på spillboksen eller mobilen vår i barndommen? I dag skal vi lære å lage et slangespill med 8*8 NeoPixels Matrix. Vi velger Arduino uno som kontrollsenter og Joystick breakout -modul for å kontrollere slangen.

Trinn 1: Komponentliste:

Maskinvare:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Fleksibel 64 RGB LED 8*8 NeoPixels Matrix

1 X Joystick breakout -modul BKOUT_MD01

3 X guidelinje

Programvare:

Arduino IDE

Trinn 2: Maskinvaretilkobling

Koble NeoPixels til pin D2.

"X" på Joystick breakout -modul koble pin A0 på Arduino UNO -kort, "Y" koble pin A1, "K" koble pin A2.

Trinn 3: Programmering

P#inkluderer

#define PIN 2 // Output Pin #define MAX_LED 64 // Mengde perle uint32_t c; int a = 0, tall; usignert røye huan = 0, ci = 0; usignert tegn u = 40; // Skriftstørrelsen på ordgruppen usignerte tegn x = 0; usignert røye Farge [3]; usignert 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] = // Angi ordet som skal sendes {{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 },}; usignert røye viser poengsum [8] [8]; int hastighetS = 400; // Innledende hastighet på slange int score; // Spill score int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Koordinat for mat int SX, SY; // Koordinat av slangehode int KEY, K; int Aktivert; // Aktiver å starte spillet char sx [64] på nytt; // Koordinat for slangekropps sy [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = tilfeldig (0, 7); FY = tilfeldig (0, 7); for (int i = 0; i <3+score; i ++) // Forhindre matvisning på slangekroppen {if (FX == sx && FY == sy ) gå til A; }} void myDelay (unsigned int Time) {// I forsinkelsesperioden for slangebevegelser må vi gjøre noe som matglitter og lese retningen til joystick for (int t = 1; t 950 && KEY! = 5) { K = 8; } annet hvis (yValue <50 && KEY! = 8) {K = 5; } annet hvis (xValue 950 && KEY! = 4) {K = 6; }}} // Her kan du sammenligne om tastaturets retning er motsatt retning av slangen. Hvis det er motsatt, så gi opp tastaturet. /************************************************* ************************************************* ************************************************* ************************************************* ********/ void gameover () {// Når Gameover -programmet er stoppet, trykker du på den sentrale knappen for å starte spillet på nytt. usignert røyeverdi, y; Farge [0] = tilfeldig (3, 18); // Sett farge. Parameter er R G B, område 0-255. Farge [1] = tilfeldig (3, 18); Farge [2] = tilfeldig (3, 18); c = stripe. Farge (farge [1], farge [0], farge [2]); verdi = score / 10; verdi = verdi * 4; y = 0; for (tall = verdi; tall <verdi+4; tall ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = character [number] [vertical]; } y ++; } verdi = poengsum % 10; verdi = verdi * 4; for (tall = verdi; tall <verdi+4; tall ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = character [number] [vertical]; } y ++; } for (usignert tegn horisontalt = 0; horisontalt <8; horisontalt ++) {for (usignert tegn vertikal = 0; vertikal <8; vertikal ++) {if (displayscore [horisontal] [vertikal] == 1) // Bedøm om lyset er på. {strip.setPixelColor (lys [horisontal] [vertikal], c); } ellers strip.setPixelColor (lys [horisontal] [vertikal], 0); }} strip.show (); // Send dataforsinkelse (5000); K = 0; // Tilbakestill styrespaken sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Tilbakestill slangekoordinat score = 0; // Tilbakestill spillresultatets hastighet S = 400; // Den opprinnelige hastigheten på slangen} ugyldig oppsett () {Serial.begin (9600); // Initialize library strip.begin (); // Send data. Standard fargen på hvert punkt som 0. Så hvert punkt blir ikke belyst i begynnelsen. strip.show (); K = 0; // Tilbakestill retningen til joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Tilbakestill slangekoordinat score = 0; // Tilbakestill spillresultat Farge [0] = tilfeldig (3, 18); // Sett farge. Parameter er R G B, område 0-255. Farge [1] = tilfeldig (3, 18); Farge [2] = tilfeldig (3, 18); c = stripe. Farge (farge [1], farge [0], farge [2]); // Grønn Rød Blå // Sett farge for (tall = 0; tall <24; tall ++) {strip.setPixelColor (gå [nummer], c); } strip.show (); // Send dataforsinkelse (2000); TILFELDIG(); // Produser mat} void mobile () {KEY = K; // Hver bevegelse av slange får retningsendringen for en gangs skyld. hvis (KEY == 8) // Slange oppover bevegelse {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; hvis (sy [0] <0) // Gå utover grensen og fortsett på den andre siden sy [0] = 7; } annet hvis (KEY == 5) // Slange nedover bevegelse {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; hvis (sy [0]> 7) // Gå utover grensen og fortsett på den andre siden sy [0] = 0; } annet hvis (KEY == 4) // Slange venstre bevegelse {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; hvis (sx [0] <0) // Gå utover grensen og fortsett på den andre siden sx [0] = 7; } annet hvis (KEY == 6) // Slange til høyre bevegelse {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; hvis (sx [0]> 7) // Gå utover grensen og fortsett på den andre siden sx [0] = 0; } // Flytt slangekroppen med knapp} tomrom viser () {for (nummer = 0; tall <64; tall ++) // Fjern skjermen {strip.setPixelColor (tall, 0); } strip.show (); Farge [0] = 40; // Sett farge. Parameter er R G B, område 0-255. Farge [1] = 0; Farge [2] = 0; c = stripe. Farge (farge [1], farge [0], farge [2]); // Grønn Rød Blå // Sett farge x = lys [FX] [FY]; // Vis food strip.setPixelColor (x, c); Farge [0] = tilfeldig (3, 18); // Sett farge. Parameter er R G B, område 0-255. Farge [1] = tilfeldig (3, 18); Farge [2] = tilfeldig (3, 18); c = stripe. Farge (farge [1], farge [0], farge [2]); // Grønn Rød Blå // Sett farge for (int i = 2 + score; i> 0; i--) // Vis slangekroppen {x = lys [sx [sy ; strip.setPixelColor (x, c); } Farge [0] = 0; // Sett farge. Parameter er R G B, område 0-255. Farge [1] = 40; Farge [2] = 0; c = stripe. Farge (farge [1], farge [0], farge [2]); // Grønn Rød Blå // Sett farge x = lys [sx [0] [sy [0]; // Vis stripe med slangehode.setPixelColor (x, c); strip.show (); // Send data} void loop () {mobile (); myDelay (speedS); // Innenfor () er forsinkelsestid. viser (); SX = sx [0]; SY = sy [0]; // Få koordinat for slangehode for (int i = 1; i <= 2+score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Døm om slangehodet rørte ved kroppen. Hvis den berøres, kan du videresende til GameOver. hvis (SY == FY && SX == FX) {RANDOM (); score ++; Farge [0] = 40; // Sett farge. Parameter er R G B, område 0-255. Farge [1] = 0; Farge [2] = 0; c = stripe. Farge (farge [1], farge [0], farge [2]); // Grønn Rød Blå // Sett farge x = lys [FX] [FY]; // Vis food strip.setPixelColor (x, c); strip.show (); // Send data hvis (! (poengsum % 5)) {// Oppnå slangehastighet i henhold til poengsummen. Hver 5 mat som spises får du 100 ms. speedS = speedS - 50; hvis (speedS <150) // Den nedre grensen er 200 ms. Hvis hastigheten er lavere enn 200 ms, forblir hastigheten 200 ms. hastighet S = 150; }}} // Bedøm om det blir spist mat. Hvis slange spiste mat, så pluss score og regenerer mat tilfeldig. }

Eksperimentresultat

Trinn 4: Eksperimentresultat

Relative avlesninger:

FreaksBot Bluetooth -bil

Tenn det første perlen på 8*8 NeoPixels Matrix med Arduino

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

Fredagens produktpost: LED Music Frequency Spectrum Display Soldering Kit

Bruk ElecFreaks Micro: bit Tinker Kit for å lage et smart lys

Anbefalt: