Daftar Isi:

Matriks NeoPixels Game Ular: 4 Langkah
Matriks NeoPixels Game Ular: 4 Langkah

Video: Matriks NeoPixels Game Ular: 4 Langkah

Video: Matriks NeoPixels Game Ular: 4 Langkah
Video: 8x8 LED Matrix for Arduino 2024, November
Anonim
Matriks NeoPixels Game Ular
Matriks NeoPixels Game Ular

Apakah Anda masih ingat permainan ular yang kami mainkan di kotak permainan atau ponsel kami selama masa kecil kami? Hari ini kita akan belajar cara membuat game ular dengan 8*8 NeoPixels Matrix. Kami memilih Arduino uno sebagai pusat kendali dan modul pelarian Joystick untuk mengendalikan ular.

Langkah 1: Daftar Komponen:

Perangkat keras:

1 X Freduino UNO Rev2.2 MB_EFUNO

1 X Fleksibel 64 RGB LED 8*8 NeoPixels Matrix

1 X modul pelarian Joystick BKOUT_MD01

3 X Garis Panduan

Perangkat lunak:

Arduino IDE

Langkah 2: Koneksi Perangkat Keras

Hubungkan NeoPixels ke pin D2.

"X" pada modul joystick breakout sambungkan pin A0 pada board Arduino UNO, "Y" sambungkan pin A1, "K" sambungkan pin A2.

Langkah 3: Pemrograman

P#sertakan

#define PIN 2 //Output Pin #define MAX_LED 64 //Jumlah manik uint32_t c; int a = 0, bilangan; char huan yang tidak ditandatangani = 0, ci = 0; unsigned char u = 40; //Ukuran font grup kata unsigned char x = 0; Warna karakter yang tidak ditandatangani[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] = //Mengatur kata yang akan dikirim { {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 kecepatanS = 400; // Kecepatan awal skor int ular; // Skor permainan int xValue; // JoyStick-X int yValue; // JoyStick-Y int zNilai; // JoyStick-Z int FX, FY; // Koordinat makanan int SX, SY; // Koordinat kepala ular int KEY, K; int Diaktifkan; // Aktifkan untuk memulai ulang game char sx[64]; //Koordinat karakter tubuh ular[64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel(MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM() { A: FX = acak(0, 7); FY = acak(0, 7); for (int i = 0; i < 3 + score; i++) //Mencegah tampilan makanan pada tubuh ular { if (FX == sx && FY == sy) goto A; } } void myDelay(unsigned int Time) { // Selama periode delay pergerakan ular, kita harus melakukan sesuatu seperti food glitter dan membaca arah Joystick untuk (int t = 1; t 950 && KEY != 5) { K = 8; } else if (yNilai < 50 && KUNCI != 8) { K = 5; } else if (xValue 950 && KUNCI != 4) { K = 6; } } // Di sini Anda dapat membandingkan apakah arah keypad berlawanan dengan arah gerakan ular. Jika sebaliknya, maka lepaskan keypad. /************************************************* ************************************************** ************************************************** ************************************************** ********/ void gameover() { // Setelah program Gameover berhenti, tekan tombol tengah untuk memulai kembali game. nilai karakter yang tidak ditandatangani, y; Warna[0] = acak(3, 18); // Atur warna. Parameter adalah R G B, rentang 0-255. Warna[1] = acak(3, 18); Warna[2] = acak(3, 18); c = strip. Warna(Warna[1], Warna[0], Warna[2]); nilai = skor / 10; nilai = nilai * 4; y = 0; for (angka = nilai; angka < nilai + 4; angka++) { for (unsigned char vertikal = 0; vertikal < 8; vertikal++) { displaycore[y][vertikal] = karakter[angka][vertikal]; } y++; } nilai = skor % 10; nilai = nilai * 4; for (angka = nilai; angka < nilai + 4; angka++) { for (unsigned char vertikal = 0; vertikal < 8; vertikal++) { displaycore[y][vertikal] = karakter[angka][vertikal]; } y++; } for (unsigned char horizontal = 0; horizontal < 8; horizontal++) { for (unsigned char vertikal = 0; vertikal < 8; vertikal++) { if (displayscore[horizontal][vertical] == 1) //Menilai apakah cahaya aktif. { strip.setPixelColor(cahaya[horizontal][vertikal], c); } else strip.setPixelColor(cahaya[horizontal][vertikal], 0); } } strip.show();//Kirim data delay(5000); K = 0; // Atur ulang arah Joystick sx[0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Atur ulang skor koordinat ular = 0; // Setel ulang kecepatan skor gameS = 400; // Kecepatan awal ular } void setup() { Serial.begin(9600); // Inisialisasi strip perpustakaan.begin(); // Kirim data. Default warna setiap titik sebagai 0. Jadi setiap titik tidak menyala di awal. strip.tampilkan(); K = 0; // Atur ulang arah Joystick sx[0] = 2; sx[1] = 1; sx[2] = 0; sy[0] = 1; sy[1] = 1; sy[2] = 1; // Atur ulang skor koordinat ular = 0; // Setel ulang skor permainan Warna[0] = acak(3, 18); // Atur warna. Parameter adalah R G B, rentang 0-255. Warna[1] = acak(3, 18); Warna[2] = acak(3, 18); c = strip. Warna(Warna[1], Warna[0], Warna[2]); //Hijau Merah Biru // Atur warna untuk (angka = 0; angka <24; angka++) { strip.setPixelColor(go[angka], c); } strip.show();// Kirim data delay(2000); ACAK(); //Menghasilkan makanan } void mobile() { KEY = K; //Setiap gerakan ular membuat arah berubah sekali. if (KEY == 8) // Gerakan ular ke atas { for (int i = 2 + skor; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sy[0] = sy[0] - 1; if (sy[0] <0) // Melewati batas dan melanjutkan ke sisi lain sy[0] = 7; } else if (KEY == 5) // Gerakan ular ke bawah { for (int i = 2 + skor; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sy[0] = sy[0] + 1; if (sy[0] > 7) // Melampaui batas dan melanjutkan ke sisi lain sy[0] = 0; } else if (KEY == 4) // Gerakan ke kiri ular { for (int i = 2 + skor; i > 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sx[0] = sx[0] - 1; if (sx[0] <0) // Melampaui batas dan melanjutkan ke sisi lain sx[0] = 7; } else if (KEY == 6) // Gerakan ke kanan ular { for (int i = 2 + skor; i> 0; i--) { sx = sx[i - 1]; sy = sy[i - 1]; } sx[0] = sx[0] + 1; if (sx[0] > 7) // Melampaui batas dan melanjutkan ke sisi lain sx[0] = 0; } // Gerakkan tubuh ular dengan tombol } void display() { for (angka = 0; angka <64; angka++) //Hapus layar { strip.setPixelColor(angka, 0); } strip.tampilkan(); Warna[0] = 40; // Setel warna. Parameternya adalah R G B, rentang 0-255. Warna[1] = 0; Warna[2] = 0; c = strip. Warna(Warna[1], Warna[0], Warna[2]); //Hijau Merah Biru // Setel warna x = cahaya[FX][FY]; //Menampilkan strip makanan.setPixelColor(x, c); Warna[0] = acak(3, 18); // Setel warna. Parameternya adalah R G B, rentang 0-255. Warna[1] = acak(3, 18); Warna[2] = acak(3, 18); c = strip. Warna(Warna[1], Warna[0], Warna[2]); //Hijau Merah Biru // Mengatur warna untuk (int i = 2 + skor; i> 0; i--) //Menampilkan tubuh ular { x = light[sx[sy; strip.setPixelColor(x, c); } Warna[0] = 0; // Setel warna. Parameternya adalah R G B, rentang 0-255. Warna[1] = 40; Warna[2] = 0; c = strip. Warna(Warna[1], Warna[0], Warna[2]); //Hijau Merah Biru // Setel warna x = cahaya[sx[0][sy[0]; //Menampilkan strip kepala ular.setPixelColor(x, c); strip.show();//Kirim data } void loop() { mobile(); myDelay(kecepatanS); // Dalam() adalah waktu tunda. menampilkan(); SX = sx[0]; SY = sy[0]; // Dapatkan koordinat kepala ular untuk (int i = 1; i <= 2 + skor; i++) { if (SX == sx && SY == sy) gameover(); } // Nilai apakah kepala ular menyentuh tubuhnya. Jika disentuh, maka teruskan ke GameOver. if (SY == FY && SX == FX) { RANDOM(); skor ++; Warna[0] = 40; // Setel warna. Parameternya adalah R G B, rentang 0-255. Warna[1] = 0; Warna[2] = 0; c = strip. Warna(Warna[1], Warna[0], Warna[2]); //Hijau Merah Biru // Setel warna x = terang[FX][FY]; //Menampilkan strip makanan.setPixelColor(x, c); strip.show();//Kirim data if (!(skor % 5)) { // Percepat kecepatan ular sesuai dengan skor. Setiap 5 makanan yang dimakan, percepat 100ms. kecepatanS = kecepatanS - 50; if (speedS < 150) // Batas bawah adalah 200ms. Jika kecepatan lebih rendah dari 200ms, kecepatan tetap 200ms. kecepatan S = 150; } } // Menilai apakah makanan sudah dimakan. Jika ular memakan makanan, maka nilai plus dan regenerasi makanan secara acak. }

Hasil Eksperimen

Langkah 4: Hasil Eksperimen

Bacaan Relatif:

Mobil Bluetooth FreaksBot

Nyalakan Manik Pertama pada 8*8 NeoPixels Matrix dengan Arduino

Mikro:bit Eksperimen 05: LED RGB -- Elefreaks Mirco: Kursus Kit Pemula bit

Posting Produk Jumat: Kit Solder Tampilan Spektrum Frekuensi Musik LED

Gunakan ElecFreaks Micro:bit Tinker Kit untuk Membuat Lampu Cerdas

Direkomendasikan: