Jogo de matriz Snake LED 16x16
Componentes e suprimentos
| | × | 1 | |
| RGB LED Pixel Matrix, NeoPixel NeoMatrix | | × | 1 | |
| Fios de jumpers (genérico) | | × | 1 | |
| Joystick analógico (genérico) | | × | 1 | |
| | × | 1 | |
Sobre este projeto
Olá! Estou aprendendo oportunidades de arduino. E decidi copiar o clássico jogo de arcade da cobra do meu antigo nokia. Então aqui está.
Usei matriz LED 16x16, joystick e Arduino UNO. não foi fácil, cada led está conectado de forma consistente. Portanto, a lógica de movimento é um pouco complicada.
Aqui você pode controlar o personagem da cobra. Coma alguma comida saborosa, cresça e morra. O código do programa está pronto para ser atualizado.
Se divirta e aproveite. Se você gosta, não pense duas vezes para assinar meu youtube e instagram :) Eles estão em russo, mas vou fazer legendas em breve.
Código
Código C / C ++
#include // configurações da matriz # define NUM_LEDS 256 # define DATA_PIN 3 # define BRIGHTNESS 8 // configurações do joystick # define pinX A2 // ось X джойстика # define pinY A1 // ось Y джойстика # define swPin 2 // кнопка джойстикаint snake [256]; // array de elementos de cobraint snakeSize =2; // tamanho real da cobra int snakeSpeed =500; int row; // linha numberint col; // coluna numberint lastDirection =135; // inicia directionint i, newDirection, OlddX =1, OlddY, f; int red, green, blue, fred, fgreen, fblue; // leds colorsCRGB [NUM_LEDS]; void setup () {red =random (0, 255); verde =aleatório (0, 255); azul =aleatório (0, 255); fred =aleatório (127, 255); fgreen =aleatório (127, 255); f azul =aleatório (127, 255); Serial.begin (9600); pinMode (pinX, INPUT); pinMode (pinY, INPUT); pinMode (swPin, INPUT); digitalWrite (swPin, HIGH); FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); para (i =0; i <=255; i ++) {cobra [i] =0; } para (i =0; i <=snakeSize; i ++) {snake [i] =lastDirection + i; } f =aleatório (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; } if (dY ==0 &&dX ==0 &&OlddY! =dY) {dY =OlddY; } int newDirection =last; if (dX! =0) {// movendo na direção X if (linha &1) {if (col ==0 &&dX ==1) {newDirection =last -15; } else if (col ==15 &&dX ==-1) {newDirection =last +15; } else newDirection =last + dX; // четная} else {if (col ==0 &&dX ==1) {newDirection =last +15; } else if (col ==15 &&dX ==-1) {newDirection =last -15; } else newDirection =last - dX; // не четная}} if (dY <0) {// movendo na direção Y PARA BAIXO 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) {// movendo na direção Y UP if (row ==0 &&dY ==1) {newDirection =255 - col;} else if (row &1) {newDirection =last - (última - 16 * linha) - (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) {death (); }} FastLED.clear (); para (i =tamanho da cobra; i> =1; i -) {cobra [i] =cobra [i-1]; } snake [0] =snakeDirection; para (i =0; i <=255; i ++) {if (cobra [i]) {leds [cobra [i]]. setRGB (vermelho, verde, azul); }} FastLED.show (); linha =(int) (snakeDirection / 16); // número da linha if (linha &1) {col =(linha + 1) * 16 - snakeDirection - 1; } else {col =snakeDirection - linha * 16; } return snakeDirection;} void food (int comido) {if (comido ==f) {snakeSize ++; f =aleatório (0, 255); vermelho =fred; verde =fgreen; blue =fblue; fred =aleatório (0, 255); fgreen =aleatório (0, 255); f azul =aleatório (0, 255); snakeSpeed =snakeSpeed / 1.1; } else {leds [f] .setRGB (fred, fgreen, fblue); FastLED.show (); }} void death () {snakeSize =2; snakeSpeed =500; vermelho =255; verde =0; azul =0; } void color (boolean sw) {if (! sw) {red =random (0,255); verde =aleatório (0,255); azul =aleatório (0,255); }} void loop () {color (digitalRead (swPin)); newDirection =Snakedirection (lastDirection, analogRead (pinX), analogRead (pinY)); lastDirection =snakeMove (newDirection); comida (nova direção); atraso (snakeSpeed);}
Esquemas