Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Membuat Game Ular Arduino pada Matriks LED 8x8

Komponen dan Perlengkapan

Membuat Game Ular Arduino pada Matriks LED 8x8
Arduino Proto Shield
×1
Membuat Game Ular Arduino pada Matriks LED 8x8
Arduino UNO
×1
Joystick Analog (Generik)
Ini adalah joystick hitam biasa
×1
Membuat Game Ular Arduino pada Matriks LED 8x8
Kabel Jumper Laki-laki/Perempuan
×1
Membuat Game Ular Arduino pada Matriks LED 8x8
SparkFun LED Array - 8x7
Ini hanyalah matriks LED 8x8 biasa (bukan RGB)
×1

Aplikasi dan Layanan Online

Membuat Game Ular Arduino pada Matriks LED 8x8
Arduino IDE

Tentang Proyek Ini

Saya membuat konsol game keren dari rangka Meccanoid dan Erector set dan saya menggunakan kode Sergey Royz (CEK DISINI) dan saya menambahkan hal tambahan ke dalamnya dan meningkatkan kecepatan sehingga bergerak dengan halus. Saya tidak akan menjelaskan cara membuat rangka tetapi saya merekomendasikan Anda untuk membuat rangka Anda sendiri. Tapi Anda memerlukan rangka. Bersenang-senanglah dengan ini lakukan apa yang Anda inginkan. Saya HARAP ANDA SUKA PROYEK INI! Beri komentar jika Anda ada pertanyaan dan saya berharap dapat menjawabnya secepatnya dan jika Anda ada rekomendasi untuk proyek saya selanjutnya, tolong beri komentar dan beri tahu saya. Juga fritzing saya tidak berfungsi, jadi saya akan memberi tahu saja:

Skematik:

Pasang shield ke Arduino Uno sehingga Anda memiliki lebih banyak stok GND dan 5v tanpa menggunakan breadboard.

Matriks:

Joystick:

Kode

SnakeC/C++

Yang harus Anda lakukan hanyalah menyalin dan menempelkan kode

/** * Snake * Implementasi permainan ular klasik * di mana ular bergerak terus-menerus dan pemain * harus menghindari perpotongan dengan dirinya sendiri dan batas. * Ketika ular memakan makanan ia tumbuh dan sedikit mempercepat. * * 23 Jun 2016 * oleh Sergey Royz dan hunter Buzzell */ #include <LedControl.h> /* Pin Joystick */ #define VRX A0 #define VRY A1 #define SW 2 /* Pin Layar */ #define CLK 8 #define CS 9 #define DIN 10 #define SIZE 8 #define ADVANCE_DELAY 20 int snake[SIZE*SIZE][2]; int length; int food[2], v[2]; bool is_game_over = false; long current_time; long prev_advance; int blink_count; const short messageSpeed = 5; LedControl lc = LedControl(DIN, CLK, CS, 1); void init_game() { prev_advance = current_time = 0; blink_count = 3; int half = SIZE / 2; length = SIZE / 3; for (int i = 0; i < length; i++) { snake[i][0] = half - 1; snake[i][1] = half + i; } food[0] = half + 1; food[1] = half - 1; v[0] = 0; v[1] = -1; } void render() { for (int i = 0; i < length; i++) { lc.setLed(0, snake[i][0], snake[i][1], 1); } lc.setLed(0, food[0], food[1], 1); } void clearScreen() { for (int x = 0; x < SIZE; x++) { for (int y = 0; y < SIZE; y++) { lc.setLed(0, x, y, 0); } } } /** * menggerakkan ular ke depan * mengembalikan true jika permainan berakhir */ bool advance() { int head[2] = {snake[0][0] + v[0], snake[0][1] + v[1]}; if (head[0] < 0 || head[0] >= SIZE) { delay(1000); showGameOverMessage(); return true; } if (head[1] < 0 || head[1] >= SIZE) { delay(1000); showGameOverMessage(); return true; } for (int i = 0; i < length; i++) { if (snake[i][0] == head[0] && snake[i][1] == head[1]) { delay(1000); showGameOverMessage(); return true; } } bool grow = (head[0] == food[0] && head[1] == food[1]); if (grow) { length++; randomSeed(current_time); food[0] = random(SIZE); food[1] = random(SIZE); } for (int i = length - 1; i >= 0; i--) { snake[i + 1][0] = snake[i][0]; snake[i + 1][1] = snake[i][1]; } snake[0][0] += v[0]; snake[0][1] += v[1]; return false; } void setup() { pinMode(SW, INPUT_PULLUP); pinMode(VRX, INPUT); pinMode(VRY, INPUT); attachInterrupt(digitalPinToInterrupt(SW), restart, RISING); lc.shutdown(0, false); lc.setIntensity(0, 8); init_game(); render(); } void loop() { if (!is_game_over) { clearScreen(); render(); if (current_time - prev_advance > ADVANCE_DELAY) { is_game_over = advance(); prev_advance = current_time; } } else { while (blink_count > 0) { clearScreen(); delay(300); render(); delay(300); blink_count--; } } readControls(); current_time++; } void restart() { init_game(); is_game_over = false; } void readControls() { int dx = map(analogRead(VRX), 0, 906, 2, -2); int dy = map(analogRead(VRY), 0, 906, -2, 2); if (dx != 0) {dx = dx / abs(dx);} if (dy != 0) {dy = dy / abs(dy);} if (dy != 0 && v[0] != 0) { v[0] = 0; v[1] = dy; } if (dx != 0 && v[1] != 0) { v[0] = dx; v[1] = 0; } } const PROGMEM bool gameOverMessage[8][90] = { {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,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,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,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,0,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,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0} }; void showGameOverMessage() { for (int d = 0; d < sizeof(gameOverMessage[0]) - 7; d++) { for (int col = 0; col < 8; col++) { delay(messageSpeed); for (int row = 0; row < 8; row++) { // ini membaca byte dari PROGMEM dan menampilkannya di layar lc.setLed(0, row, col, pgm_read_byte(&(gameOverMessage[row][col + d]))); } } } } 

Proses manufaktur

  1. Pengontrol USB Game Arduino DIY – Buat Gamepad Tinggi Performa Sendiri
  2. Bangun Konsol Pong LED 24×16 dengan Arduino Nano & MAX7219
  3. Buat Game Tetris dengan Arduino Nano pada Matriks LED DIY 16×8
  4. Kontrol LED melalui Bluetooth dengan Arduino – Panduan DIY Sederhana
  5. Tampilan Pintu Matriks LED Interaktif dengan Sensor Gerak PIR – Ucapan Liburan Arduino
  6. Membuat Robot Quadruped Arduino Cerdas: Panduan Langkah demi Langkah
  7. Pixel Chaser: Game LED Interaktif Satu Ketukan dengan Arduino Nano
  8. Jam Flip Arduino dengan Matriks LED 8×8 – Proyek Jam Waktu Nyata DIY
  9. Pencampur Warna LED RGB Arduino – Proyek DIY Untuk Pemula
  10. Menguasai Matriks LED 8×8 dengan Arduino Uno: Panduan Langkah demi Langkah