Inhoudsopgave:

NeoPixels Matrix (Snake Game: 4 stappen)
NeoPixels Matrix (Snake Game: 4 stappen)

Video: NeoPixels Matrix (Snake Game: 4 stappen)

Video: NeoPixels Matrix (Snake Game: 4 stappen)
Video: Snake on 16x16 NeoPixel Matrix 2024, November
Anonim
NeoPixels Matrix (Snake Game)
NeoPixels Matrix (Snake Game)

Herinner je je nog het slangenspel dat we in onze kindertijd op onze speeldoos of mobiel speelden? Vandaag gaan we leren hoe we een slangenspel kunnen maken met 8*8 NeoPixels Matrix. We kiezen Arduino uno als controlecentrum en Joystick breakout-module om de slang te besturen.

Stap 1: Onderdelenlijst:

Hardware:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Flexibele 64 RGB LED 8*8 NeoPixels Matrix

1 X Joystick breakout-module BKOUT_MD01

3 X-richtlijn:

Software:

Arduino IDE

Stap 2: Hardwareverbinding

Sluit NeoPixels aan op pin D2.

"X" op Joystick breakout-module sluit pin A0 aan op Arduino UNO-bord, "Y" sluit pin A1 aan, "K" sluit pin A2 aan.

Stap 3: Programmeren

P#include

#define PIN 2 //Output Pin #define MAX_LED 64 //Aantal kraal uint32_t c; int a = 0, getal; niet-ondertekend char huan = 0, ci = 0; niet-ondertekend char u = 40; // De lettergrootte van woordgroep unsigned char x = 0; niet-ondertekende char Kleur [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] = // Stel het te verzenden woord in {{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, 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-snelheidS = 400; // Beginsnelheid van snake int-score; // Spelscore int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coördinaat van voedsel int SX, SY; // Coördinaat van slangenkop int KEY, K; int Ingeschakeld; // Inschakelen om game char sx [64] opnieuw te starten; //Coördinaat van slangenlichaam char sy [64]; Adafruit_NeoPixel-strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM() { A: FX = willekeurig (0, 7); FY = willekeurig (0, 7); for (int i = 0; i < 3 + score; i++) // Voorkom dat voedsel op het lichaam van een slang wordt weergegeven { if (FX == sx && FY == sy) goto A; } } void myDelay (unsigned int Time) { // Tijdens de vertragingsperiode van slangbewegingen moeten we iets doen als voedselglitter en de richting van Joystick lezen voor (int t = 1; t 950 && KEY! = 5) { K = 8; } else if (yWaarde < 50 && KEY != 8) { K = 5; } else if (xWaarde 950 && KEY != 4) { K = 6; } } // Hier kunt u vergelijken of de richting van het toetsenbord tegengesteld is aan de bewegingsrichting van de slang. Als het tegenovergestelde is, geef dan het toetsenbord op. /************************************************** ************************************************** ************************************************** ************************************************** ********/ void gameover() { // Zodra het Gameover-programma is gestopt, drukt u op de centrale knop om het spel opnieuw te starten. niet-ondertekende char-waarde, y; Kleur [0] = willekeurig (3, 18); // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = willekeurig (3, 18); Kleur [2] = willekeurig (3, 18); c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); waarde = score / 10; waarde = waarde * 4; y = 0; for (getal = waarde; getal < waarde + 4; getal++) { for (unsigned char verticaal = 0; verticaal < 8; verticaal++) { displayscore[y][verticaal] = karakter[getal][verticaal]; } y++; } waarde = score % 10; waarde = waarde * 4; for (getal = waarde; getal < waarde + 4; getal++) { for (unsigned char verticaal = 0; verticaal < 8; verticaal++) { displayscore[y][verticaal] = karakter[getal][verticaal]; } y++; } for (unsigned char horizontal = 0; horizontal < 8; horizontal++) { for (unsigned char vertical = 0; vertical < 8; vertical++) { if (displayscore[horizontal][vertical] == 1) //Beoordeel of het licht staat aan. { strip.setPixelColor (licht [horizontaal] [verticaal], c); } else strip.setPixelColor (licht [horizontaal] [verticaal], 0); } } strip.show();//Stuur data vertraging (5000); K = 0; // Reset joystick richting sx [0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Reset slangencoördinaatscore = 0; // Reset spelscore snelheden S = 400; // De beginsnelheid van snake } void setup () { Serial.begin (9600); // Initialiseer bibliotheek strip.begin(); // Verstuur data. Standaard is de kleur van elk punt 0. Dus niet elk punt wordt aan het begin verlicht. strip.show(); K = 0; // Reset de richting van Joystick sx [0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Reset slangencoördinaatscore = 0; // Spelscore resetten Kleur [0] = willekeurig (3, 18); // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = willekeurig (3, 18); Kleur [2] = willekeurig (3, 18); c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen voor (nummer = 0; nummer <24; nummer ++) { strip.setPixelColor (go [nummer], c); } strip.show();// Verzend datavertraging (2000); WILLEKEURIG(); //Voedsel produceren } void mobile () { KEY = K; //Elke beweging van de slang verandert de richting voor één keer. if (KEY == 8) // Snake opwaartse beweging { 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) // Ga over de grens en ga aan de andere kant verder sy[0] = 7; } else if (KEY == 5) // Snake neerwaartse beweging { 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) // Ga voorbij de grens en ga verder aan de andere kant sy[0] = 0; } else if (KEY == 4) // Snake linkerbeweging { 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) // Ga voorbij de grens en ga verder aan de andere kant sx[0] = 7; } else if (KEY == 6) // Snake rechtse beweging { 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) // Ga voorbij de grens en ga verder aan de andere kant sx[0] = 0; } // Verplaats slanglichaam met knop } void displays() { for (number = 0; number <64; number++) // Clear the screen { strip.setPixelColor(number, 0); } strip.show(); Kleur [0] = 40; // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = 0; Kleur [2] = 0; c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen x = licht [FX][FY]; //Voedselstrip weergeven.setPixelColor (x, c); Kleur [0] = willekeurig (3, 18); // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = willekeurig (3, 18); Kleur [2] = willekeurig (3, 18); c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen voor (int i = 2 + score; i> 0; i--) //Slanglichaam weergeven {x = light[sx[sy; strip.setPixelColor(x, c); } Kleur[0] = 0; // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = 40; Kleur [2] = 0; c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen x = licht [sx[0][sy[0]; //Slangenkopstrip weergeven.setPixelColor (x, c); strip.show();//Stuur data} void loop() { mobile(); mijnVertraging(snelheden); // Within() is vertragingstijd. geeft weer(); SX = sx[0]; SY = sy[0]; // Haal de coördinaat van slangenkop op voor (int i = 1; i <= 2 + score; i++) { if (SX == sx && SY == sy) gameover(); } // Beoordeel of de kop van de slang zijn lichaam heeft aangeraakt. Indien aangeraakt, ga dan door naar GameOver. if (SY == FY && SX == FX) { RANDOM(); scoren ++; Kleur [0] = 40; // Kleur instellen. Parameter is R G B, bereik 0-255. Kleur [1] = 0; Kleur [2] = 0; c = strip. Kleur(Kleur[1], Kleur[0], Kleur[2]); // Groen Rood Blauw // Kleur instellen x = licht [FX][FY]; //Voedselstrip weergeven.setPixelColor (x, c); strip.show();//Stuur gegevens als (!(score % 5)) { // Versnel de slangsnelheid volgens de score. Versnel elke 5 voedingsmiddelen die worden gegeten, 100 ms. snelheidS = snelheidS - 50; if (speedS < 150) // De onderste limiet is 200 ms. Als de snelheid lager is dan 200 ms, blijft de snelheid 200 ms. snelheidS = 150; } } // Beoordeel of er gegeten wordt. Als de slang voedsel at, plus scores en willekeurig voedsel regenereren. }

Experimentresultaat

Stap 4: Experimentresultaat

Relatieve metingen:

FreaksBot Bluetooth-auto

Steek de eerste kraal aan op 8*8 NeoPixels Matrix met Arduino

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

Vrijdag Product Post: LED Music Frequency Spectrum Display Soldeerset

Gebruik ElecFreaks Micro:bit Tinker Kit om een Smart Light te maken

Aanbevolen: