Mündəricat:

NeoPixels Matrix: İlan Oyunu: 4 addım
NeoPixels Matrix: İlan Oyunu: 4 addım

Video: NeoPixels Matrix: İlan Oyunu: 4 addım

Video: NeoPixels Matrix: İlan Oyunu: 4 addım
Video: Arduino ile Yılan Oyunu Yaptık! 2024, Noyabr
Anonim
NeoPixels Matrix: İlan Oyunu
NeoPixels Matrix: İlan Oyunu

Uşaqlıqda oyun qutumuzda və ya mobil cihazımızda oynadığımız ilan oyununu hələ də xatırlayırsınızmı? Bu gün 8*8 NeoPixels Matrix ilə ilan oyununun necə ediləcəyini öyrənəcəyik. İdarə mərkəzi olaraq Arduino uno və ilanı idarə etmək üçün Joystick breakout modulu seçirik.

Addım 1: Komponentlərin siyahısı:

Avadanlıq:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Flexible 64 RGB LED 8*8 NeoPixels Matrix

1 X Joystick qırılma modulu BKOUT_MD01

3 X Bələdçi Xətti

Proqram təminatı:

Arduino IDE

Addım 2: Avadanlıq Bağlantısı

NeoPixelləri D2 pininə qoşun.

Arduino UNO lövhəsindəki Joystick qırılma modulundakı "X" pin A0, "Y" bağlama pimi A1, "K" birləşdirici pin A2.

Addım 3: Proqramlaşdırma

P#daxildir

#define PIN 2 // Çıxış Pin #dexine MAX_LED 64 // Boncuk miqdarı uint32_t c; int a = 0, ədəd; işarəsiz char huan = 0, ci = 0; işarəsiz char u = 40; // İmzasız söz qrupunun şrift ölçüsü char x = 0; işarəsiz simvol Rəng [3]; imzasız 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 işarəsiz işarə [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},}; işarəsiz simvol [8] = // Göndəriləcək sözü təyin edin {{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 },}; imzasız char displayscore [8] [8]; int sürətiS = 400; // ilan int hesabının ilkin sürəti; // int xValue oyun hesabı; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Qida koordinatı int SX, SY; // İlan başının koordinatı int KEY, K; int Enabled; // Oyunu yenidən başlatmağı aktiv et char sx [64]; // İlan bədəninin koordinatları char sy [64]; Adafruit_NeoPixel şeridi = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = təsadüfi (0, 7); FY = təsadüfi (0, 7); for (int i = 0; i <3+score; i ++) // Yılan bədənində qida görüntüsünün qarşısını almaq {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// İlan hərəkətinin gecikmə dövründə qida parıltısı kimi bir şey etməli və Joystickin istiqamətini oxumalıyıq (int t = 1; t 950 && KEY! = 5) { K = 8; } başqa if (yValue <50 && KEY! = 8) {K = 5; } başqa əgər (xValue 950 && KEY! = 4) {K = 6; }} // Burada klaviatura istiqamətinin ilanın hərəkət istiqaməti ilə zidd olub olmadığını müqayisə edə bilərsiniz. Bunun əksinədirsə, klaviaturadan imtina edin. /*********************************************** ************************************************ ************************************************ ************************************************ ********/ void gameover () {// Gameover proqramı dayandıqdan sonra oyunu yenidən başlatmaq üçün mərkəzi düyməni basın. işarəsiz char dəyəri, y; Rəng [0] = təsadüfi (3, 18); // Rəng təyin edin. Parametr R G B, 0-255 aralığındadır. Rəng [1] = təsadüfi (3, 18); Rəng [2] = təsadüfi (3, 18); c = strip. Color (Rəng [1], Rəng [0], Rəng [2]); dəyər = bal / 10; dəyər = dəyər * 4; y = 0; for (sayı = dəyər; sayı <dəyər+4; sayı ++) {üçün (işarəsiz char vertikal = 0; şaquli <8; dikey ++) {displayscore [y] [vertikal] = simvol [sayı] [dik]; } y ++; } dəyər = bal % 10; dəyər = dəyər * 4; for (sayı = dəyər; sayı <dəyər+4; sayı ++) {üçün (işarəsiz char vertikal = 0; şaquli <8; dikey ++) {displayscore [y] [vertikal] = simvol [sayı] [dik]; } y ++; } üçün (işarəsiz char üfüqi = 0; üfüqi <8; üfüqi ++) {üçün (işarəsiz simli şaquli = 0; şaquli <8; şaquli ++) {if (displayscore [horizontal] [vertical] == 1) // İşığın olub olmadığını mühakimə edin aktivdir. {strip.setPixelColor (işıq [üfüqi] [şaquli], c); } başqa strip.setPixelColor (işıq [üfüqi] [şaquli], 0); }} strip.show (); // Məlumat göndərmə gecikməsi (5000); K = 0; // Joystick istiqamətini sıfırlayın sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // İlan koordinat hesabını sıfırlayın = 0; // Oyunun hesab sürətini sıfırlayınS = 400; // ilanın ilkin sürəti} boşluq qurulması () {Serial.begin (9600); // Kitabxana strip.begin () başlatın; // Məlumat göndərin. Varsayılan olaraq hər bir nöqtənin rəngini 0 olaraq təyin edin. Yəni hər nöqtə əvvəlində işıqlandırılmır. strip.show (); K = 0; // Joystick sx istiqamətini sıfırlayın sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // İlan koordinat hesabını sıfırlayın = 0; // Oyun hesabını sıfırlayın Rəng [0] = təsadüfi (3, 18); // Rəng təyin edin. Parametr R G B, 0-255 aralığındadır. Rəng [1] = təsadüfi (3, 18); Rəng [2] = təsadüfi (3, 18); c = strip. Color (Rəng [1], Rəng [0], Rəng [2]); // Yaşıl Qırmızı Mavi // Rəng təyin edin (sayı = 0; sayı <24; sayı ++) {strip.setPixelColor (gedin [sayı], c); } strip.show (); // Məlumat göndərmə gecikməsi (2000); RANDOM (); // Yemək istehsal et} void mobile () {KEY = K; // İlanın hər hərəkəti istiqamətini birdəfəlik dəyişir. if (KEY == 8) // Yılanın yuxarıya doğru hərəkəti {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) // Sərhəddən kənara çıxın və digər tərəfdən davam edin sy [0] = 7; } if if (KEY == 5) // Snake downward motion {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) // Sərhəddən kənara çıxın və digər tərəfdən davam edin sy [0] = 0; } else if (KEY == 4) // İlanın sol hərəkəti {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) // Sərhədi keçin və digər tərəfdən davam edin sx [0] = 7; } if if (KEY == 6) // Snake right motion {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) // Sərhəddən kənara çıxın və digər tərəfdən davam edin sx [0] = 0; } // İlan gövdəsini düymə ilə hərəkət etdirin} void display () {for (number = 0; number <64; number ++) // Ekranı təmizləyin {strip.setPixelColor (sayı, 0); } strip.show (); Rəng [0] = 40; // Rəng təyin edin. Parametr R G B, 0-255 aralığındadır. Rəng [1] = 0; Rəng [2] = 0; c = strip. Color (Rəng [1], Rəng [0], Rəng [2]); // Yaşıl Qırmızı Mavi // Rəngi təyin edin x = işıq [FX] [FY]; // Qida şeridini göstərin.setPixelColor (x, c); Rəng [0] = təsadüfi (3, 18); // Rəng təyin edin. Parametr R G B, 0-255 aralığındadır. Rəng [1] = təsadüfi (3, 18); Rəng [2] = təsadüfi (3, 18); c = strip. Color (Rəng [1], Rəng [0], Rəng [2]); // Yaşıl Qırmızı Mavi // Rəng təyin edin (int i = 2 + skor; i> 0; i--) // İlan gövdəsini göstər {x = light [sx [sy ; strip.setPixelColor (x, c); } Rəng [0] = 0; // Rəng təyin edin. Parametr R G B, 0-255 aralığındadır. Rəng [1] = 40; Rəng [2] = 0; c = strip. Color (Rəng [1], Rəng [0], Rəng [2]); // Yaşıl Qırmızı Mavi // Rəngi təyin edin x = işıq [sx [0] [sy [0]; // İlan başının zolağını göstərin.setPixelColor (x, c); strip.show (); // Məlumat göndər} void loop () {mobile (); myDelay (speedS); // (ərzində) gecikmə vaxtıdır. göstərilir (); SX = sx [0]; SY = sy [0]; // ilan başının koordinatını alın (int i = 1; i <= 2+hesab; i ++) {if (SX == sx && SY == sy ) gameover (); } // İlan başının bədəninə dəyib -dəymədiyini mühakimə edin. Toxunduqda GameOver -ə keçin. əgər (SY == FY && SX == FX) {RANDOM (); bal ++; Rəng [0] = 40; // Rəng təyin edin. Parametr R G B, 0-255 aralığındadır. Rəng [1] = 0; Rəng [2] = 0; c = strip. Color (Rəng [1], Rəng [0], Rəng [2]); // Yaşıl Qırmızı Mavi // Rəngi təyin edin x = işıq [FX] [FY]; // Qida şeridini göstərin.setPixelColor (x, c); strip.show (); // Məlumat göndər (əgər (% 5 bal)) {// Hesabına görə ilan sürətini artır. Yediyiniz hər 5 yemək, 100 ms sürətlənir. sürət S = sürət S - 50; if (speedS <150) // Alt limit 200ms -dir. Sürət 200ms -dən aşağıdırsa, sürət 200ms olaraq qalır. sürət S = 150; }} // Yemək yeyilib yemədiyini mühakimə et. İlan yemək yeyirsə, üstəgəl puanları artırır və yeməyi təsadüfi olaraq canlandırır. }

Təcrübə Nəticəsi

Addım 4: Təcrübə Nəticəsi

Nisbi oxunuşlar:

FreaksBot Bluetooth Avtomobil

İlk Boncuğu Arduino ilə 8*8 NeoPixels Matrix -də yandırın

Mikro: bit Təcrübə 05: RGB LED - Elecfreaks Mirco: bit Başlanğıc Kit Kursu

Cümə Məhsul Yazısı: LED Musiqi Frekans Spektrli Ekran Lehim Kiti

Ağıllı İşıq etmək üçün ElecFreaks Micro: bit Tinker Kitindən istifadə edin

Tövsiyə: