Isi kandungan:

NeoPixels Matrix : Permainan Ular: 4 Langkah
NeoPixels Matrix : Permainan Ular: 4 Langkah

Video: NeoPixels Matrix : Permainan Ular: 4 Langkah

Video: NeoPixels Matrix : Permainan Ular: 4 Langkah
Video: CUSTOM 4 x 4 LED MATRIX using ESP32 / Arduino / Powerbank / neopixels / LEDs 2024, November
Anonim
NeoPixels Matrix : Permainan Ular
NeoPixels Matrix : Permainan Ular

Adakah anda masih ingat permainan ular yang kami mainkan di kotak permainan atau telefon bimbit kami semasa kecil? Hari ini kita akan belajar bagaimana membuat permainan ular dengan 8 * 8 NeoPixels Matrix. Kami memilih Arduino uno sebagai pusat kawalan dan modul breakout Joystick untuk mengawal ular.

Langkah 1: Senarai Komponen:

Perkakasan:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Fleksibel 64 RGB LED 8 * 8 NeoPixels Matrix

1 X modul breakout Joystick BKOUT_MD01

Garis Panduan 3 X

Perisian:

Arduino IDE

Langkah 2: Sambungan Perkakasan

Sambungkan NeoPixels ke pin D2.

"X" pada modul breakout Joystick menyambungkan pin A0 pada papan Arduino UNO, "Y" pin penyambung A1, "K" menyambung pin A2.

Langkah 3: Pengaturcaraan

P # sertakan

#define PIN 2 // Pin Output #define MAX_LED 64 // Kuantiti manik uint32_t c; int a = 0, nombor; char huan yang tidak ditandatangani = 0, ci = 0; char u yang tidak bertanda = 40; // Saiz fon kumpulan kata tidak ditandatangani char x = 0; Warna char yang tidak ditandatangani [3]; char unsigned = {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 lampu char yang tidak ditandatangani [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},}; watak char yang tidak ditandatangani [8] = // Tetapkan perkataan yang akan dihantar {{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 },}; markah paparan char yang tidak ditandatangani [8] [8]; int speedS = 400; // Kelajuan awal skor int ular; // Skor permainan int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Koordinat makanan int SX, SY; // Koordinat kepala ular ke KUNCI, K; int Diaktifkan; // Aktifkan untuk memulakan semula permainan char sx [64]; // Koordinat badan am ular [64]; Adafruit_NeoPixel strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); batal RANDOM () {A: FX = rawak (0, 7); FY = rawak (0, 7); untuk (int i = 0; i <3 + skor; i ++) // Cegah paparan makanan pada badan ular {if (FX == sx && FY == sy ) goto A; }} batal myDelay (Waktu tidak ditandatangani) {// Dalam tempoh kelewatan pergerakan ular, kita harus melakukan sesuatu seperti makanan bergemerlapan dan membaca arah Joystick untuk (int t = 1; t 950 && KEY! = 5) { K = 8; } lain jika (yValue <50 && KEY! = 8) {K = 5; } lain jika (xValue 950 && KEY! = 4) {K = 6; }} // Di sini anda dapat membandingkan sama ada arah papan kekunci bertentangan dengan arah pergerakan ular. Sekiranya berlawanan, maka hentikan pad kekunci. / ************************************************* ************************************************** ************************************************** ************************************************** ******** / batal permainan () {// Setelah program Gameover dihentikan, tekan butang tengah untuk memulakan semula permainan. nilai char yang tidak ditandatangani, y; Warna [0] = rawak (3, 18); // Tetapkan warna. Parameter adalah R G B, julat 0-255. Warna [1] = rawak (3, 18); Warna [2] = rawak (3, 18); c = jalur. Warna (Warna [1], Warna [0], Warna [2]); nilai = skor / 10; nilai = nilai * 4; y = 0; untuk (number = value; number <value + 4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displaycore [y] [menegak] = watak [nombor] [menegak]; } y ++; } nilai = skor% 10; nilai = nilai * 4; untuk (number = value; number <value + 4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displaycore [y] [menegak] = watak [nombor] [menegak]; } y ++; } untuk (char unsigned horizontal = 0; horizontal <8; horizontal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displaycore [horizontal] [vertical] == 1) // Menentukan sama ada cahaya dihidupkan. {strip.setPixelColor (cahaya [mendatar] [menegak], c); } strip.setPixelColor yang lain (cahaya [mendatar] [menegak], 0); }} strip.show (); // Hantar kelewatan data (5000); K = 0; // Tetapkan semula arah Joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Tetapkan semula skor koordinat ular = 0; // Tetapkan semula kelajuan skor permainanS = 400; // Kelajuan awal ular} penyediaan kosong () {Serial.begin (9600); // Memulakan perpustakaan strip.begin (); // Hantar data. Lalai warna setiap titik sebagai 0. Oleh itu setiap titik tidak diterangi pada awalnya. strip.show (); K = 0; // Tetapkan semula arah Joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Tetapkan semula skor koordinat ular = 0; // Tetapkan semula skor permainan Warna [0] = rawak (3, 18); // Tetapkan warna. Parameter adalah R G B, julat 0-255. Warna [1] = rawak (3, 18); Warna [2] = rawak (3, 18); c = jalur. Warna (Warna [1], Warna [0], Warna [2]); // Hijau Merah Biru // Tetapkan warna untuk (number = 0; number <24; number ++) {strip.setPixelColor (go [number], c); } strip.show (); // Hantar data kelewatan (2000); RANDOM (); // Menghasilkan makanan} kekosongan bergerak () {KEY = K; // Setiap pergerakan ular membuat arah berubah sekali. if (KEY == 8) // Pergerakan ular ke atas {untuk (int i = 2 + skor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Melangkaui sempadan dan terus di seberang sy [0] = 7; } lain jika (KEY == 5) // Gerakan ke bawah ular {untuk (int i = 2 + skor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Melangkaui sempadan dan terus di seberang sy [0] = 0; } lain jika (KEY == 4) // Pergerakan kiri ular {untuk (int i = 2 + skor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Melangkaui sempadan dan teruskan di seberang sx [0] = 7; } lain jika (KEY == 6) // Gerakan kanan ular {untuk (int i = 2 + skor; i> 0; i--) {sx = sx [i - 1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Melangkaui sempadan dan terus di sisi lain sx [0] = 0; } // Gerakkan badan ular dengan butang} paparan kosong () {untuk (number = 0; number <64; number ++) // Kosongkan skrin {strip.setPixelColor (number, 0); } strip.show (); Warna [0] = 40; // Tetapkan warna. Parameter adalah R G B, julat 0-255. Warna [1] = 0; Warna [2] = 0; c = jalur. Warna (Warna [1], Warna [0], Warna [2]); // Hijau Merah Biru // Tetapkan warna x = cahaya [FX] [FY]; // Paparkan jalur makanan.setPixelColor (x, c); Warna [0] = rawak (3, 18); // Tetapkan warna. Parameter adalah R G B, julat 0-255. Warna [1] = rawak (3, 18); Warna [2] = rawak (3, 18); c = jalur. Warna (Warna [1], Warna [0], Warna [2]); // Hijau Merah Biru // Tetapkan warna untuk (int i = 2 + skor; i> 0; i--) // Paparkan badan ular {x = cahaya [sx [sy ; strip.setPixelColor (x, c); } Warna [0] = 0; // Tetapkan warna. Parameter adalah R G B, julat 0-255. Warna [1] = 40; Warna [2] = 0; c = jalur. Warna (Warna [1], Warna [0], Warna [2]); // Hijau Merah Biru // Tetapkan warna x = cahaya [sx [0] [sy [0]; // Paparkan jalur kepala ular.setPixelColor (x, c); strip.show (); // Hantar data} gelung kosong () {mudah alih (); myDelay (speedS); // Dalam () adalah masa kelewatan. paparan (); SX = sx [0]; SY = sy [0]; // Dapatkan koordinat kepala ular untuk (int i = 1; i <= 2 + skor; i ++) {if (SX == sx && SY == sy ) gameover (); } // Hakim sama ada kepala ular menyentuh badannya. Sekiranya disentuh, teruskan ke GameOver. jika (SY == FY && SX == FX) {RANDOM (); skor ++; Warna [0] = 40; // Tetapkan warna. Parameter adalah R G B, julat 0-255. Warna [1] = 0; Warna [2] = 0; c = jalur. Warna (Warna [1], Warna [0], Warna [2]); // Hijau Merah Biru // Tetapkan warna x = cahaya [FX] [FY]; // Paparkan jalur makanan.setPixelColor (x, c); strip.show (); // Hantar data jika (! (skor% 5)) {// Mempercepat kelajuan ular mengikut skor. Setiap 5 makanan dimakan, suhu 100ms. speedS = speedS - 50; if (speedS <150) // Had bawah adalah 200ms. Sekiranya kelajuan lebih rendah daripada 200ms, kelajuan tetap 200ms. kelajuanS = 150; }} // Hakim sama ada makanan dimakan. Sekiranya ular makan makanan, maka tambah skor dan buat semula makanan secara rawak. }

Keputusan Eksperimen

Langkah 4: Hasil Percubaan

Bacaan relatif:

Kereta Bluetooth FreaksBot

Nyalakan Manik Pertama pada 8 * 8 NeoPixels Matrix dengan Arduino

Mikro: bit Percubaan 05: RGB LED - Elecfreaks Mirco: bit Starter Kit Course

Pos Produk Jumaat: Kit Pematerian Paparan Spektrum Frekuensi Muzik LED

Gunakan ElecFreaks Micro: bit Tinker Kit untuk Membuat Lampu Pintar

Disyorkan: