Indholdsfortegnelse:

NeoPixels Matrix : Snake Game: 4 trin
NeoPixels Matrix : Snake Game: 4 trin

Video: NeoPixels Matrix : Snake Game: 4 trin

Video: NeoPixels Matrix : Snake Game: 4 trin
Video: How to make Snake Game using Arduino Uno and 8x8 LED Matrix. (Controlled by joystick) 2024, Juli
Anonim
NeoPixels Matrix: Snake Game
NeoPixels Matrix: Snake Game

Kan du stadig huske slangespil, vi spillede på vores spilkasse eller mobil i vores barndom? I dag skal vi lære at lave et slangespil med 8*8 NeoPixels Matrix. Vi vælger Arduino uno som kontrolcenter og joystick -udbrudsmodul til at styre slangen.

Trin 1: Komponentliste:

Hardware:

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

Software:

Arduino IDE

Trin 2: Hardwareforbindelse

Tilslut NeoPixels til pin D2.

"X" på joystick -breakout -modul tilslut pin A0 på Arduino UNO -kort, "Y" connect pin A1, "K" connect pin A2.

Trin 3: Programmering

P#inkluderer

#define PIN 2 // Output Pin #define MAX_LED 64 // Mængde perle uint32_t c; int a = 0, tal; usigneret char huan = 0, ci = 0; usigneret tegn u = 40; // Skriftstørrelsen på ordgruppen usigneret tegn x = 0; usigneret fork Farve [3]; usigneret 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] = // Indstil det ord, der 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 },}; usigneret char viser score [8] [8]; int hastighedS = 400; // Indledende hastighed af slange int score; // Spilscore int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Koordinat for fødevarer int SX, SY; // Koordinat for slangehoved int KEY, K; int Aktiveret; // Aktiver for at genstarte game char sx [64]; // Koordinat for slangekropssy [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = tilfældig (0, 7); FY = tilfældig (0, 7); for (int i = 0; i <3+score; i ++) // Forhindre madvisning på slangekrop {if (FX == sx && FY == sy ) gå til A; }} void myDelay (unsigned int Time) {// I forsinkelsesperioden for slangebevægelse skal vi gøre noget som madglitter og læse joysticks retning for (int t = 1; t 950 && KEY! = 5) { K = 8; } ellers hvis (yValue <50 && KEY! = 8) {K = 5; } ellers hvis (xValue 950 && KEY! = 4) {K = 6; }}} // Her kan du sammenligne, om tastaturets retning er modsat slangens bevægelsesretning. Hvis det er modsat, skal du opgive tastaturet. /************************************************* ************************************************* ************************************************* ************************************************* ********/ void gameover () {// Når Gameover -programmet er stoppet, skal du trykke på den centrale knap for at genstarte spillet. usigneret kulværdi, y; Farve [0] = tilfældig (3, 18); // Indstil farve. Parameter er R G B, område 0-255. Farve [1] = tilfældig (3, 18); Farve [2] = tilfældig (3, 18); c = strimmel. Farve (farve [1], farve [0], farve [2]); værdi = score / 10; værdi = værdi * 4; y = 0; for (tal = værdi; tal <værdi+4; tal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = character [number] [vertical]; } y ++; } værdi = score % 10; værdi = værdi * 4; for (tal = værdi; tal <værdi+4; tal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = character [number] [vertical]; } y ++; } for (usigneret tegn vandret = 0; vandret <8; vandret ++) {for (usigneret tegn lodret = 0; lodret <8; lodret ++) {hvis (displayscore [vandret] [lodret] == 1) // Bedøm om lyset er tændt. {strip.setPixelColor (lys [vandret] [lodret], c); } ellers strip.setPixelColor (lys [vandret] [lodret], 0); }} strip.show (); // Send dataforsinkelse (5000); K = 0; // Nulstil joystickretning sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Nulstil slangekoordinat score = 0; // Nulstil game score speedS = 400; // Slangens starthastighed} hulrumsopsætning () {Serial.begin (9600); // Initialiser biblioteksstrimmel. Begynd (); // Send data. Standardfarven på hvert punkt som 0. Så hvert punkt belyses ikke i begyndelsen. strip.show (); K = 0; // Nulstil retningen for Joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Nulstil slangekoordinat score = 0; // Nulstil spilscore Farve [0] = tilfældig (3, 18); // Indstil farve. Parameter er R G B, område 0-255. Farve [1] = tilfældig (3, 18); Farve [2] = tilfældig (3, 18); c = strimmel. Farve (farve [1], farve [0], farve [2]); // Grøn Rød Blå // Indstil farve for (tal = 0; tal <24; tal ++) {strip.setPixelColor (gå [nummer], c); } strip.show (); // Send dataforsinkelse (2000); TILFÆLDIG(); // Producer mad} void mobile () {NØGLE = K; // Hver slangebevægelse får retningen til at ændre sig for en gangs skyld. hvis (KEY == 8) // Slangens opadgående bevægelse {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å ud over grænsen og fortsæt på den anden side sy [0] = 7; } ellers hvis (KEY == 5) // Slange nedadgående bevægelse {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å ud over grænsen og fortsæt på den anden side sy [0] = 0; } ellers hvis (KEY == 4) // Slange venstre bevægelse {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å ud over grænsen og fortsæt på den anden side sx [0] = 7; } ellers hvis (KEY == 6) // Slange til højre bevægelse {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å ud over grænsen og fortsæt på den anden side sx [0] = 0; } // Flyt slangekrop med knap} tomrum viser () {for (tal = 0; tal <64; tal ++) // Ryd skærmen {strip.setPixelColor (tal, 0); } strip.show (); Farve [0] = 40; // Indstil farve. Parameter er R G B, område 0-255. Farve [1] = 0; Farve [2] = 0; c = strimmel. Farve (farve [1], farve [0], farve [2]); // Grøn Rød Blå // Indstil farve x = lys [FX] [FY]; // Vis madstrimmel.setPixelColor (x, c); Farve [0] = tilfældig (3, 18); // Indstil farve. Parameter er R G B, område 0-255. Farve [1] = tilfældig (3, 18); Farve [2] = tilfældig (3, 18); c = strimmel. Farve (farve [1], farve [0], farve [2]); // Grøn Rød Blå // Indstil farve for (int i = 2 + score; i> 0; i--) // Vis slangekrop {x = light [sx [sy ; strip.setPixelColor (x, c); } Farve [0] = 0; // Indstil farve. Parameter er R G B, område 0-255. Farve [1] = 40; Farve [2] = 0; c = strimmel. Farve (farve [1], farve [0], farve [2]); // Grøn Rød Blå // Indstil farve x = lys [sx [0] [sy [0]; // Vis slangehovedstrimmel.setPixelColor (x, c); strip.show (); // Send data} void loop () {mobile (); myDelay (speedS); // Inden for () er forsinkelsestid. displays (); SX = sx [0]; SY = sy [0]; // Få koordinat for slangehoved for (int i = 1; i <= 2+score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Bedøm om slangehovedet rørte ved dets krop. Hvis det berøres, skal du derefter videresende til GameOver. hvis (SY == FY && SX == FX) {RANDOM (); score ++; Farve [0] = 40; // Indstil farve. Parameter er R G B, område 0-255. Farve [1] = 0; Farve [2] = 0; c = strimmel. Farve (farve [1], farve [0], farve [2]); // Grøn Rød Blå // Indstil farve x = lys [FX] [FY]; // Vis madstrimmel.setPixelColor (x, c); strip.show (); // Send data hvis (! (score % 5)) {// Accelererate slangehastighed i henhold til scoren. Hver 5 spiste mad, accelerer 100 ms. speedS = speedS - 50; hvis (speedS <150) // Den nederste grænse er 200 ms. Hvis hastigheden er lavere end 200 ms, forbliver hastigheden 200 ms. hastighed S = 150; }} // Bedøm, om der spises mad. Hvis slangen spiste mad, så plus score og regenerer mad tilfældigt. }

Eksperimentresultat

Trin 4: Eksperimentresultat

Relative læsninger:

FreaksBot Bluetooth bil

Tænd det første perle på 8*8 NeoPixels Matrix med Arduino

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

Fredagspost: LED musikfrekvensspektrum display lodningssæt

Brug ElecFreaks Micro: bit Tinker Kit til at lave et smart lys

Anbefalede: