Juego de matriz Snake LED 16x16
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Acerca de este proyecto
¡Hola! Estoy aprendiendo las oportunidades de arduino. Y decidí copiar el clásico juego de serpientes arcade de mi antiguo Nokia. Entonces, aquí está.
Usé matriz LED 16x16, joystick y Arduino UNO. No fue fácil porque cada led está conectado de forma coherente. Entonces, la lógica de movimientos es un poco complicada.
Aquí puedes controlar el personaje de la serpiente. Come algo sabroso, crece y muere. El código del programa está listo para actualizarse.
Que se divierta y disfrute. Si te gusta, no te lo pienses dos veces para suscribirte a mi youtube e instagram :) Están en ruso, pero haré los subtítulos muy pronto.
Código
- Código
Código C / C ++
#include// configuración de matriz # define NUM_LEDS 256 # define DATA_PIN 3 # define BRIGHTNESS 8 // configuración de joystick # define pinX A2 // ось X джойстика # define pinY A1 // ось Y джойстика # define swPin 2 // кнопка джойстикаint serpiente [256]; // conjunto de elementos de serpienteint snakeSize =2; // tamaño real de la serpiente int snakeSpeed =500; int row; // fila numberint col; // número de columna en lastDirection =135; // dirección de inicioint i, newDirection, OlddX =1, OlddY, f; int rojo, verde, azul, fred, fgreen, fblue; // leds de coloresCRGB [NUM_LEDS]; configuración vacía () {rojo =aleatorio (0, 255); verde =aleatorio (0, 255); azul =aleatorio (0, 255); fred =aleatorio (127, 255); fgreen =aleatorio (127, 255); fblue =aleatorio (127, 255); Serial.begin (9600); pinMode (pinX, ENTRADA); pinMode (pinY, ENTRADA); pinMode (swPin, ENTRADA); digitalWrite (swPin, HIGH); FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRILLO); para (i =0; i <=255; i ++) {serpiente [i] =0; } para (i =0; i <=tamaño de la serpiente; i ++) {serpiente [i] =última dirección + i; } f =aleatorio (0, 255); FastLED.show ();} int Snakedirection (int último, int dX, int dY) {dX =map (dX, 0, 1000, -1, 1); dY =mapa (dY, 0, 1000, -1, 1); if (dX ==0 &&dY ==0 &&OlddX! =dX) {dX =OlddX; } si (dY ==0 &&dX ==0 &&OlddY! =dY) {dY =OlddY; } int newDirection =last; if (dX! =0) {// moviéndose en la dirección X if (fila &1) {if (col ==0 &&dX ==1) {newDirection =last -15; } más si (col ==15 &&dX ==-1) {nuevaDirección =última +15; } else newDirection =last + dX; // четная} else {if (col ==0 &&dX ==1) {newDirection =last +15; } más si (col ==15 &&dX ==-1) {nuevaDirección =última -15; } else newDirection =last - dX; // не четная}} if (dY <0) {// moviéndose en la dirección Y ABAJO if (row ==15 &&dY ==-1) {newDirection =col;} else if (row &1) {newDirection =last + ( col * 2) +1; // четная} else {newDirection =last + (16-col-1) + (16-col); // не четная}} if (dY> 0) {// moviéndose en la dirección Y ARRIBA if (fila ==0 &&dY ==1) {newDirection =255 - col;} else if (fila &1) {newDirection =last - (último - 16 * fila) - (16 - col); // четная} else {newDirection =last - (col * 2) -1; // не четная}} OlddX =dX; OlddY =dY; return newDirection;} int snakeMove (int snakeDirection) {for (i =0; i <=255; i ++) {if (snake [i] ==snakeDirection) {muerte (); }} FastLED.clear (); para (i =tamaño de serpiente; i> =1; i -) {serpiente [i] =serpiente [i-1]; } snake [0] =snakeDirection; para (i =0; i <=255; i ++) {if (serpiente [i]) {leds [serpiente [i]]. setRGB (rojo, verde, azul); }} FastLED.show (); fila =(int) (snakeDirection / 16); // número de fila if (fila &1) {col =(fila + 1) * 16 - snakeDirection - 1; } else {col =snakeDirection - fila * 16; } return snakeDirection;} void food (int comido) {if (comido ==f) {snakeSize ++; f =aleatorio (0, 255); rojo =fred; verde =fverde; azul =fazul; fred =aleatorio (0, 255); fgreen =aleatorio (0, 255); fblue =aleatorio (0, 255); snakeSpeed =snakeSpeed / 1.1; } else {leds [f] .setRGB (fred, fgreen, fblue); FastLED.show (); }} muerte vacía () {tamaño de serpiente =2; snakeSpeed =500; rojo =255; verde =0; azul =0; } color vacío (booleano sw) {if (! sw) {rojo =aleatorio (0,255); verde =aleatorio (0,255); azul =aleatorio (0,255); }} bucle vacío () {color (digitalRead (swPin)); newDirection =Snakedirection (lastDirection, analogRead (pinX), analogRead (pinY)); lastDirection =snakeMove (nuevaDirección); comida (newDirection); delay (snakeSpeed);}
Esquemas
Proceso de manufactura
- Controlador de juego Arduino
- Juego Arduino Pong en Matrix 24x16 con MAX7219
- Arduino Nano Tetris Game en una matriz casera de 16x8
- ¡Arduino con Bluetooth para controlar un LED!
- Matriz LED + Pantalla de puerta con sensor de movimiento [Arduino Holiday]
- Arduino Cuadrúpedo
- Pixel Chaser Game
- Reloj Flip Arduino de matriz de un solo LED
- Mezclador de colores Arduino RGB
- Controlar una matriz de LED con Arduino Uno
- Juego DIY Arduino 1D Pong con tira de LED WS2812