İçindekiler:

NeoPixels Matrix:Yılan Oyunu: 4 Adım
NeoPixels Matrix:Yılan Oyunu: 4 Adım

Video: NeoPixels Matrix:Yılan Oyunu: 4 Adım

Video: NeoPixels Matrix:Yılan Oyunu: 4 Adım
Video: Arduino Snake Game 2024, Kasım
Anonim
NeoPixels Matrix: Yılan Oyunu
NeoPixels Matrix: Yılan Oyunu

Çocukluğumuzda oyun kutumuzda veya cep telefonumuzda oynadığımız yılan oyununu hala hatırlıyor musunuz? Bugün 8*8 NeoPixels Matrix ile yılan oyunu yapmayı öğreneceğiz. Kontrol merkezi olarak Arduino uno'yu ve yılanı kontrol etmek için Joystick koparma modülünü seçiyoruz.

Adım 1: Bileşenler Listesi:

Donanım:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Esnek 64 RGB LED 8*8 NeoPiksel Matrisi

1 X Joystick koparma modülü BKOUT_MD01

3 X Kılavuz Çizgisi

Yazılım:

Arduino IDE'si

2. Adım: Donanım Bağlantısı

NeoPixels'i D2 pinine bağlayın.

Joystick koparma modülündeki "X", Arduino UNO kartındaki A0 pinini bağlayın, "Y" pin A1, "K" pin A2'yi bağlayın.

Adım 3: Programlama

P#dahil

#define PIN 2 //Çıkış Pimi #define MAX_LED 64 //Bead miktarı uint32_t c; int a = 0, sayı; işaretsiz char huan = 0, ci = 0; imzasız karakter u = 40; //kelime grubunun yazı tipi boyutu unsigned char x = 0; imzasız karakter Renk[3]; imzasız karakter git = {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 karakter[8] = //Gönderilecek kelimeyi ayarla { {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 }, }; unsigned char displaycore [8][8]; int hızS = 400; // Yılanın başlangıç hızı int puanı; // Oyun puanı int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Gıda koordinatı int SX, SY; // Yılan başının koordinatı int KEY, K; int Etkin; // Oyunu yeniden başlatmayı etkinleştir char sx[64]; //Yılan gövdesi char koordinatı sy[64]; Adafruit_NeoPixel şeridi = Adafruit_NeoPixel(MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM() { A: FX = rastgele(0, 7); FY = rastgele(0, 7); for (int i = 0; i < 3 + puan; i++) //Yılan gövdesinde yiyecek gösterimini engelle { if (FX == sx && FY == sy) goto A; } } void myDelay(unsigned int Time) { // Yılan hareketinin gecikme süresi boyunca, yiyecek parıltısı gibi bir şey yapmamız ve Joystick'in yönünü (int t = 1; t 950 && KEY != 5) için okumamız gerekiyor. K = 8; } else if (yValue < 50 && KEY != 8) { K = 5; } else if (xValue 950 && KEY != 4) { K = 6; } } // Burada tuş takımının yönünün yılan hareket yönünün tersi olup olmadığını karşılaştırabilirsiniz. Ters ise, tuş takımını bırakın. /******************************************************** ******************************************************* ************************************************************ ******************************************************* ********/ void gameover() { // Gameover programı durduğunda, oyunu yeniden başlatmak için ortadaki düğmeye basın. işaretsiz karakter değeri, y; Renk[0] = rastgele(3, 18); // Renk ayarla. Parametre R G B, 0-255 aralığı. Renk[1] = rastgele(3, 18); Renk[2] = rastgele(3, 18); c = strip. Color(Renk[1], Renk[0], Renk[2]); değer = puan / 10; değer = değer * 4; y = 0; for (sayı = değer; sayı < değer + 4; sayı++) { for (unsigned char dikey = 0; dikey < 8; dikey++) { displaycore[y][dikey] = karakter[sayı][dikey]; } y++; } değer = puan % 10; değer = değer * 4; for (sayı = değer; sayı < değer + 4; sayı++) { for (unsigned char dikey = 0; dikey < 8; dikey++) { displaycore[y][dikey] = karakter[sayı][dikey]; } y++; } for (unsigned char yatay = 0; yatay < 8; yatay++) { for (unsigned char dikey = 0; dikey < 8; dikey++) { if (displayscore[yatay][dikey] == 1) //Işık olup olmadığına karar verin açık. { strip.setPixelColor(hafif[yatay][dikey], c); } else strip.setPixelColor(hafif[yatay][dikey], 0); } } strip.show();//Veri gecikmesi gönder(5000); K = 0; // Joystick yönünü sıfırla sx[0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Yılan koordinat puanını sıfırla = 0; // Oyun puanı hızını sıfırlaS = 400; // Yılanın ilk hızı } void setup() { Serial.begin(9600); // Kitaplığı başlat strip.begin(); // Veri gönder. Her noktanın rengini varsayılan olarak 0 olarak ayarlayın. Yani başlangıçta her nokta aydınlatılmaz. şerit.göster(); K = 0; // Joystick yönünü sıfırla sx[0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Yılan koordinat puanını sıfırla = 0; // Oyun puanını sıfırla Renk[0] = rastgele(3, 18); // Renk ayarla. Parametre R G B, 0-255 aralığı. Renk[1] = rastgele(3, 18); Renk[2] = rastgele(3, 18); c = strip. Color(Renk[1], Renk[0], Renk[2]); //Yeşil Kırmızı Mavi // için rengi ayarla (sayı = 0; sayı <24; sayı++) { strip.setPixelColor(go[sayı], c); } strip.show();// Veri gecikmesi gönder(2000); RASTGELE(); //Yiyecek üret } void mobile() { ANAHTAR = K; //Yılanın her hareketi bir kez yön değiştirir. if (ANAHTAR == 8) // Yukarı yılan hareketi { for (int i = 2 + puan; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sy[0] = sy[0] - 1; if (sy[0] <0) // Sınırın ötesine geçin ve diğer taraftan devam edin sy[0] = 7; } else if (ANAHTAR == 5) // Yılan aşağı doğru hareket { for (int i = 2 + puan; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sy[0] = sy[0] + 1; if (sy[0] > 7) // Sınırın ötesine geçin ve diğer taraftan devam edin sy[0] = 0; } else if (ANAHTAR == 4) // Yılan sola hareket { for (int i = 2 + puan; i > 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sx[0] = sx[0] - 1; if (sx[0] <0) // Sınırın ötesine geçin ve diğer taraftan devam edin sx[0] = 7; } else if (ANAHTAR == 6) // Sağa yılan hareketi { for (int i = 2 + puan; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sx[0] = sx[0] + 1; if (sx[0] > 7) // Sınırın ötesine geçin ve diğer taraftan devam edin sx[0] = 0; } // Yılan gövdesini düğme ile hareket ettirin } void display() { for (sayı = 0; sayı <64; sayı++) //Ekranı temizle { strip.setPixelColor(sayı, 0); } şerit.göster(); Renk[0] = 40; // Rengi ayarla. Parametre R G B, 0-255 aralığı. Renk[1] = 0; Renk[2] = 0; c = strip. Color(Renk[1], Renk[0], Renk[2]); //Yeşil Kırmızı Mavi // Rengi ayarla x = açık[FX][FY]; //Yiyecek şeridini göster.setPixelColor(x,c); Renk[0] = rastgele(3, 18); // Rengi ayarla. Parametre R G B, 0-255 aralığı. Renk[1] = rastgele(3, 18); Renk[2] = rastgele(3, 18); c = strip. Color(Renk[1], Renk[0], Renk[2]); //Yeşil Kırmızı Mavi // için rengi ayarla (int i = 2 + puan; i> 0; i--) //Yılan gövdesini göster { x = light[sx[sy; strip.setPixelColor(x,c); } Renk[0] = 0; // Rengi ayarla. Parametre R G B, 0-255 aralığı. Renk[1] = 40; Renk[2] = 0; c = strip. Color(Renk[1], Renk[0], Renk[2]); //Yeşil Kırmızı Mavi // Rengi ayarla x = ışık[sx[0][sy[0]; //Yılan başı şeridini göster.setPixelColor(x,c); strip.show();//Veri gönder } void loop() { mobile(); myDelay(hızS); // İçinde() gecikme süresidir. görüntüler(); SX = sx[0]; SY = sy[0]; // (int i = 1; i <= 2 + puan; i++) için yılan başının koordinatını alın { if (SX == sx && SY == sy) gameover(); } // Yılanın başının vücuduna değip değmediğini değerlendirin. Dokunulursa GameOver'a iletin. if (SY == FY && SX == FX) { RANDOM(); puan ++; Renk[0] = 40; // Rengi ayarla. Parametre R G B, 0-255 aralığı. Renk[1] = 0; Renk[2] = 0; c = strip. Color(Renk[1], Renk[0], Renk[2]); //Yeşil Kırmızı Mavi // Rengi ayarla x = açık[FX][FY]; //Yiyecek şeridini göster.setPixelColor(x,c); strip.show();//Veri gönder if (!(puan % 5)) { // Skora göre yılan hızını hızlandır. Yenilen her 5 gıda 100ms hızlanır. hızS = hızS - 50; if (speedS < 150) // Alt limit 200ms'dir. Hız 200ms'den düşükse, hız 200ms olarak kalır. hızS = 150; } } // Yiyeceklerin yenip yenilmediğine karar verin. Yılan yemek yerse, artı puan alır ve yiyecekleri rastgele yeniler. }

Deney Sonucu

4. Adım: Deney Sonucu

Göreceli Okumalar:

FreaksBot Bluetooth Araba

Arduino ile 8*8 NeoPixels Matrix'te İlk Boncuk'u Işıklandırın

Micro:bit Experiment 05: RGB LED -- Elecfreaks Mirco: bit Başlangıç Seti Kursu

Cuma Ürün Gönderisi: LED Müzik Frekans Spektrum Ekran Lehimleme Kiti

Akıllı Bir Işık Oluşturmak için ElecFreaks Micro:bit Tinker Kit'i kullanın

Önerilen: