Tabla de contenido:

Matriz de NeoPixels: Juego de serpientes: 4 pasos
Matriz de NeoPixels: Juego de serpientes: 4 pasos

Video: Matriz de NeoPixels: Juego de serpientes: 4 pasos

Video: Matriz de NeoPixels: Juego de serpientes: 4 pasos
Video: JUEGO SNAKE MATRIZ 8 X 8 - ARDUINO 2024, Noviembre
Anonim
Matriz de NeoPixels: juego de serpientes
Matriz de NeoPixels: juego de serpientes

¿Todavía recuerdas el juego de serpientes que jugamos en nuestra caja de juegos o móvil durante nuestra infancia? Hoy vamos a aprender a hacer un juego de serpientes con 8 * 8 NeoPixels Matrix. Elegimos Arduino uno como el centro de control y el módulo de ruptura de Joystick para controlar la serpiente.

Paso 1: Lista de componentes:

Hardware:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Matriz Flexible de 64 RGB LED 8 * 8 NeoPixels

1 X Módulo de ruptura de joystick BKOUT_MD01

3 X línea de guía

Software:

IDE de Arduino

Paso 2: Conexión de hardware

Conecte NeoPixels al pin D2.

"X" en el módulo de conexión del Joystick conecta el pin A0 en la placa Arduino UNO, "Y" conecta el pin A1, "K" conecta el pin A2.

Paso 3: programación

P # incluye

#define PIN 2 // Output Pin #define MAX_LED 64 // Cantidad de cordón uint32_t c; int a = 0, número; char sin signo huan = 0, ci = 0; carácter sin firmar u = 40; // El tamaño de fuente del grupo de palabras unsigned char x = 0; char sin firmar Color [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 caracteres sin firmar 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},}; carácter de carácter sin signo [8] = // Establecer la palabra que se enviará {{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 },}; displaycore de caracteres sin firmar [8] [8]; int speedS = 400; // Velocidad inicial de la puntuación int de la serpiente; // Puntuación del juego int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coordinación de alimentos int SX, SY; // Coordenada de la cabeza de serpiente int KEY, K; int habilitado; // Activar para reiniciar el juego char sx [64]; // Coordenada del cuerpo de la serpiente char sy [64]; Tira de Adafruit_NeoPixel = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = aleatorio (0, 7); FY = aleatorio (0, 7); for (int i = 0; i <3 + score; i ++) // Evita que la comida se muestre en el cuerpo de la serpiente {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Durante el período de retraso del movimiento de la serpiente, tenemos que hacer algo como brillo de comida y leer la dirección del Joystick para (int t = 1; t 950 && KEY! = 5) { K = 8; } más si (yValue <50 && CLAVE! = 8) {K = 5; } más si (xValue 950 && CLAVE! = 4) {K = 6; }} // Aquí puede comparar si la dirección del teclado es opuesta a la dirección del movimiento de la serpiente. Si es opuesto, abandone el teclado. / ********************************************** *********************************************** ************************************************ ************************************************ ******** / void gameover () {// Una vez que el programa Gameover se detuvo, presione el botón central para reiniciar el juego. valor de carácter sin firmar, y; Color [0] = aleatorio (3, 18); // Establecer color El parámetro es R G B, rango 0-255. Color [1] = aleatorio (3, 18); Color [2] = aleatorio (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); valor = puntuación / 10; valor = valor * 4; y = 0; for (número = valor; número <valor + 4; número ++) {for (carácter sin signo vertical = 0; vertical <8; vertical ++) {displaycore [y] [vertical] = carácter [número] [vertical]; } y ++; } valor = puntuación% 10; valor = valor * 4; for (número = valor; número <valor + 4; número ++) {for (carácter sin signo vertical = 0; vertical <8; vertical ++) {displaycore [y] [vertical] = carácter [número] [vertical]; } y ++; } for (unsigned char horizontal = 0; horizontal <8; horizontal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displayscore [horizontal] [vertical] == 1) // Juzgar si la luz Está encendido. {strip.setPixelColor (claro [horizontal] [vertical], c); } else strip.setPixelColor (claro [horizontal] [vertical], 0); }} strip.show (); // Retraso de envío de datos (5000); K = 0; // Restablecer la dirección del joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Restablecer la puntuación de las coordenadas de la serpiente = 0; // Restablecer el puntaje del juego speedS = 400; // La velocidad inicial de snake} void setup () {Serial.begin (9600); // Inicializar la biblioteca strip.begin (); // Enviar datos. Por defecto, el color de cada punto es 0. Por lo tanto, no todos los puntos están iluminados al principio. strip.show (); K = 0; // Restablece la dirección del Joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Restablecer la puntuación de las coordenadas de la serpiente = 0; // Restablecer la puntuación del juego Color [0] = aleatorio (3, 18); // Establecer color El parámetro es R G B, rango 0-255. Color [1] = aleatorio (3, 18); Color [2] = aleatorio (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Verde Rojo Azul // Establecer color para (número = 0; número <24; número ++) {strip.setPixelColor (go [número], c); } strip.show (); // Retraso de envío de datos (2000); ALEATORIO(); // Producir comida} void mobile () {KEY = K; // Cada movimiento de la serpiente hace que la dirección cambie por una vez. if (CLAVE == 8) // Movimiento ascendente de la serpiente {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) // Ir más allá del borde y continuar en el otro lado sy [0] = 7; } else if (CLAVE == 5) // Movimiento descendente de la serpiente {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) // Ir más allá del borde y continuar en el otro lado sy [0] = 0; } else if (CLAVE == 4) // Movimiento de serpiente a la izquierda {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) // Ir más allá del borde y continuar en el otro lado sx [0] = 7; } else if (CLAVE == 6) // Movimiento de serpiente a la derecha {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) // Ir más allá del borde y continuar en el otro lado sx [0] = 0; } // Mueve el cuerpo de la serpiente con el botón} void displays () {for (number = 0; number <64; number ++) // Limpia la pantalla {strip.setPixelColor (number, 0); } strip.show (); Color [0] = 40; // Establecer color. El parámetro es R G B, rango 0-255. Color [1] = 0; Color [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Rojo Azul // Establecer color x = claro [FX] [FY]; // Mostrar tira de comida.setPixelColor (x, c); Color [0] = aleatorio (3, 18); // Establecer color. El parámetro es R G B, rango 0-255. Color [1] = aleatorio (3, 18); Color [2] = aleatorio (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Verde Rojo Azul // Establecer color para (int i = 2 + score; i> 0; i--) // Mostrar cuerpo de serpiente {x = light [sx [sy ; strip.setPixelColor (x, c); } Color [0] = 0; // Establecer color. El parámetro es R G B, rango 0-255. Color [1] = 40; Color [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Rojo Azul // Establecer color x = claro [sx [0] [sy [0]; // Mostrar la tira de cabeza de serpiente.setPixelColor (x, c); strip.show (); // Enviar datos} void loop () {mobile (); myDelay (speedS); // Dentro de () es el tiempo de retraso. muestra (); SX = sx [0]; SY = sy [0]; // Obtener la coordenada de la cabeza de la serpiente para (int i = 1; i <= 2 + score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Juzga si la cabeza de serpiente tocó su cuerpo. Si lo toca, reenvíe a GameOver. if (SY == FY && SX == FX) {RANDOM (); puntuación ++; Color [0] = 40; // Establecer color. El parámetro es R G B, rango 0-255. Color [1] = 0; Color [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Rojo Azul // Establecer color x = claro [FX] [FY]; // Mostrar tira de comida.setPixelColor (x, c); strip.show (); // Enviar datos if (! (score% 5)) {// Acelerar la velocidad de la serpiente de acuerdo con el puntaje. Cada 5 alimentos ingeridos, acelera 100 ms. speedS = speedS - 50; if (speedS <150) // El límite inferior es 200ms. Si la velocidad es inferior a 200 ms, la velocidad permanece en 200 ms. speedS = 150; }} // Juzga si se come comida. Si la serpiente comió comida, entonces más puntuaciones y regenerará la comida al azar. }

Resultado del experimento

Paso 4: resultado del experimento

Lecturas relativas:

Coche Bluetooth FreaksBot

Encienda la primera cuenta en la matriz NeoPixels de 8 * 8 con Arduino

Experimento 05 de Micro: bit: LED RGB - Curso de Kit de inicio de Elecfreaks Mirco: bit

Friday Product Post: Kit de soldadura de pantalla de espectro de frecuencia musical LED

Utilice ElecFreaks Micro: bit Tinker Kit para hacer una luz inteligente

Recomendado: