Tartalomjegyzék:

NeoPixels Matrix : Kígyójáték: 4 lépés
NeoPixels Matrix : Kígyójáték: 4 lépés

Videó: NeoPixels Matrix : Kígyójáték: 4 lépés

Videó: NeoPixels Matrix : Kígyójáték: 4 lépés
Videó: Pixel Dust on RGB Matrix displays 2024, Július
Anonim
NeoPixels Matrix : Kígyójáték
NeoPixels Matrix : Kígyójáték

Emlékszel még a kígyójátékra, amelyet gyerekkorunkban a játékdobozunkon vagy a mobilunkon játszottunk? Ma megtanuljuk, hogyan lehet kígyójátékot készíteni 8*8 NeoPixels Matrix segítségével. Az Arduino uno -t választjuk vezérlőközpontként, és a Joystick breakout modult a kígyó irányítására.

1. lépés: Alkatrészek listája:

Hardver:

1 X Freaduino UNO Rev.2.2 MB_EFUNO

1 X Rugalmas 64 RGB LED 8*8 NeoPixels Matrix

1 X Joystick kitörő modul BKOUT_MD01

3 X Útvonal

Szoftver:

Arduino IDE

2. lépés: Hardvercsatlakozás

Csatlakoztassa a NeoPixeleket a D2 tűhöz.

"X" a joystick megszakító modulon csatlakoztassa az A0 tűt az Arduino UNO kártyán, "Y" csatlakoztassa az A1 tűt, "K" csatlakoztassa az A2 tűt.

3. lépés: Programozás

P#tartalmazza

#define PIN 2 // Kimeneti PIN #define MAX_LED 64 // Gyöngyök mennyisége uint32_t c; int a = 0, szám; előjel nélküli char huan = 0, ci = 0; előjel nélküli karakter u = 40; // A szócsoport betűméret unsigned char x = 0; előjel nélküli karakter Szín [3]; előjel nélküli karakter = {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 előjel nélküli 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] = // A küldendő szó beállítása {{0, 1, 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 },}; előjel nélküli karakteres kijelző eredmény [8] [8]; int sebességS = 400; // A kígyó kezdeti sebessége int pontszám; // Játék pontszám int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Az élelmiszer koordinátája int SX, SY; // Kígyófej koordinátája int KEY, K; int Engedélyezve; // A játék újraindításának engedélyezése char sx [64]; // A kígyótest koordinátája char sy [64]; Adafruit_NeoPixel csík = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = random (0, 7); FY = véletlenszerű (0, 7); for (int i = 0; i <3+score; i ++) // Az étel megjelenítésének megakadályozása a kígyó testén {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// A kígyómozgás késleltetési időszakában olyasmit kell tennünk, mint az étel csillogása, és el kell olvasnunk a Joystick irányát (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; }} // Itt összehasonlíthatja, hogy a billentyűzet iránya ellentétes -e a kígyómozgás irányával. Ha ellentétes, akkor adja fel a billentyűzetet. /************************************************* ************************************************** ************************************************** ************************************************** ********/ void gameover () {// Miután a Gameover program leállt, nyomja meg a központi gombot a játék újraindításához. előjel nélküli karakterérték, y; Szín [0] = véletlenszerű (3, 18); // Állítsa be a színt. A paraméter R G B, tartomány 0-255. Szín [1] = véletlenszerű (3, 18); Szín [2] = véletlenszerű (3, 18); c = csík. Szín (Szín [1], Szín [0], Szín [2]); érték = pontszám / 10; érték = érték * 4; y = 0; for (szám = érték; szám <érték+4; szám ++) {esetén (előjel nélküli karakter függőleges = 0; függőleges <8; függőleges ++) {displaycore [y] [vertical] = karakter [szám] [függőleges]; } y ++; } érték = pontszám % 10; érték = érték * 4; for (szám = érték; szám <érték+4; szám ++) {esetén (előjel nélküli karakter függőleges = 0; függőleges <8; függőleges ++) {displaycore [y] [vertical] = karakter [szám] [függőleges]; } y ++; } for (unsigned char vízszintes = 0; vízszintes <8; vízszintes ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displaycore [vízszintes] [függőleges] == 1) // Döntse el, hogy a fény be van kapcsolva. {strip.setPixelColor (világos [vízszintes] [függőleges], c); } else strip.setPixelColor (világos [vízszintes] [függőleges], 0); }} strip.show (); // Adatküldés késleltetése (5000); K = 0; // Joystick irány visszaállítása sx [0] = 2; sx [1] = 1; sx [2] = 0; v [0] = 1; v [1] = 1; v [2] = 1; // A kígyókoordináta -pontszám visszaállítása = 0; // A játék pontszámának visszaállítása speedS = 400; // A kígyó kezdeti sebessége} void setup () {Serial.begin (9600); // Könyvtárcsík inicializálása.begin (); // Adatok küldése. Alapértelmezés szerint minden pont színe 0. Így minden pont nem világít az elején. strip.show (); K = 0; // A Joystick irányának visszaállítása sx [0] = 2; sx [1] = 1; sx [2] = 0; v [0] = 1; v [1] = 1; v [2] = 1; // A kígyókoordináta -pontszám visszaállítása = 0; // A játék pontszámának visszaállítása Szín [0] = véletlenszerű (3, 18); // Állítsa be a színt. A paraméter R G B, tartomány 0-255. Szín [1] = véletlenszerű (3, 18); Szín [2] = véletlenszerű (3, 18); c = csík. Szín (Szín [1], Szín [0], Szín [2]); // Zöld Piros Kék // Szín beállítása a (szám = 0; szám <24; szám ++) {strip.setPixelColor (go [szám], c); } strip.show (); // Adatküldés késleltetése (2000); VÉLETLEN(); // Élelmiszer előállítása} void mobile () {KEY = K; // A kígyó minden mozdulata egyszer megváltoztatja az irányt. if (KULCS == 8) // Kígyó felfelé irányuló mozgás {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; v = v [i - 1]; } v [0] = v [0] - 1; if (sy [0] <0) // Menjen túl a határon, és folytassa a másik oldalon sy [0] = 7; } else if (KULCS == 5) // Kígyó lefelé irányuló mozgás {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; v = v [i - 1]; } v [0] = v [0] + 1; if (sy [0]> 7) // Lépjen túl a határon, és folytassa a másik oldalon sy [0] = 0; } else if (KULCS == 4) // Kígyó bal oldali mozgása {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; v = v [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Menjen túl a határon, és folytassa a másik oldalon sx [0] = 7; } else if (KULCS == 6) // Kígyó jobb mozgása {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; v = v [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Lépjen túl a határon, és folytassa a másik oldalon sx [0] = 0; } // Kígyótest mozgatása gombbal} void display () {for (szám = 0; szám <64; szám ++) // A képernyő törlése {strip.setPixelColor (szám, 0); } strip.show (); Szín [0] = 40; // Szín beállítása. A paraméter R G B, tartomány 0-255. Szín [1] = 0; Szín [2] = 0; c = csík. Szín (Szín [1], Szín [0], Szín [2]); // Zöld Piros Kék // Szín beállítása x = világos [FX] [FY]; // Élelmiszercsík megjelenítése.setPixelColor (x, c); Szín [0] = véletlenszerű (3, 18); // Szín beállítása. A paraméter R G B, tartomány 0-255. Szín [1] = véletlenszerű (3, 18); Szín [2] = véletlenszerű (3, 18); c = csík. Szín (Szín [1], Szín [0], Szín [2]); // Zöld Piros Kék // Szín beállítása (int i = 2 + score; i> 0; i--) // Kígyótest megjelenítése {x = világos [sx [sy ; strip.setPixelColor (x, c); } Szín [0] = 0; // Szín beállítása. A paraméter R G B, tartomány 0-255. Szín [1] = 40; Szín [2] = 0; c = csík. Szín (Szín [1], Szín [0], Szín [2]); // Zöld Piros Kék // Szín beállítása x = világos [sx [0] [sy [0]; // Kígyófej csík megjelenítése.setPixelColor (x, c); strip.show (); // Adatok küldése} void loop () {mobile (); myDelay (speedS); // ( -n belül) késleltetési idő. megjeleníti (); SX = sx [0]; SY = sy [0]; // A kígyófej koordinátájának lekérése (int i = 1; i <= 2+score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Írd meg, hogy a kígyófej hozzáért -e a testéhez. Ha megérinti, akkor tovább a GameOver -hez. if (SY == FY && SX == FX) {RANDOM (); pontszám ++; Szín [0] = 40; // Szín beállítása. A paraméter R G B, tartomány 0-255. Szín [1] = 0; Szín [2] = 0; c = csík. Szín (Szín [1], Szín [0], Szín [2]); // Zöld Piros Kék // Szín beállítása x = világos [FX] [FY]; // Élelmiszercsík megjelenítése.setPixelColor (x, c); strip.show (); // Adatok küldése, ha (! (pontszám % 5)) {// Gyűjtse össze a kígyó sebességét a pontszám szerint. Minden 5 elfogyasztott étel 100 ms -ot tesz ki. speedS = speedS - 50; if (speedS <150) // Az alsó határ 200 ms. Ha a sebesség kisebb, mint 200 ms, a sebesség 200 ms marad. sebességS = 150; }} // Írd meg, hogy megeszik -e az ételt. Ha a kígyó ételt evett, akkor plusz pontszámok és véletlenszerűen regenerálja az ételt. }

Kísérlet eredménye

4. lépés: A kísérlet eredménye

Relatív értékek:

FreaksBot Bluetooth autó

Gyújtsa meg az első gyöngyöt a 8*8 NeoPixels mátrixon Arduino segítségével

Micro: bit Kísérlet 05: RGB LED - Elecfreaks Mirco: bit Starter Kit Course

Pénteki termékposzt: LED zenei frekvencia spektrum kijelző forrasztó készlet

Az ElecFreaks Micro: bit Tinker Kit segítségével intelligens fényt hozhat létre

Ajánlott: