Índice:

Matriz NeoPixels : Jogo da Serpente: 4 Passos
Matriz NeoPixels : Jogo da Serpente: 4 Passos
Anonim
Matriz NeoPixels : Jogo da Cobra
Matriz NeoPixels : Jogo da Cobra

Você ainda se lembra do jogo da cobra que jogávamos em nossa caixa de jogos ou celular durante a nossa infância? Hoje vamos aprender como fazer um jogo de cobra com 8 * 8 NeoPixels Matrix. Escolhemos o Arduino uno como o centro de controle e o módulo Joystick breakout para controlar a cobra.

Etapa 1: Lista de componentes:

Hardware:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X flexível 64 RGB LED 8 * 8 NeoPixels Matrix

Módulo de breakout de 1 X Joystick BKOUT_MD01

3 X Guia de Linha

Programas:

IDE Arduino

Etapa 2: Conexão de Hardware

Conecte os NeoPixels ao pino D2.

"X" no módulo de breakout do Joystick conecte o pino A0 na placa Arduino UNO, "Y" conecte o pino A1, "K" conecte o pino A2.

Etapa 3: Programação

P # inclui

#define PIN 2 // Output Pin #define MAX_LED 64 // Quantidade de cordão uint32_t c; int a = 0, número; huan char sem sinal = 0, ci = 0; caractere sem sinal u = 40; // O tamanho da fonte do grupo de palavras unsigned char x = 0; Cor de carvão sem sinal [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 unsigned char 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},}; unsigned char character [8] = // Defina a palavra a ser enviada {{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 },}; unsigned char displayscore [8] [8]; velocidade interna S = 400; // Velocidade inicial da cobra int score; // Pontuação do jogo int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Coordenada da comida int SX, SY; // Coordenada da cabeça da cobra int KEY, K; int Enabled; // Habilita para reiniciar o jogo char sx [64]; // Coordenada do corpo da cobra char sy [64]; Tira Adafruit_NeoPixel = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); vazio RANDOM () {A: FX = aleatório (0, 7); FY = aleatório (0, 7); for (int i = 0; i <3 + pontuação; i ++) // Impedir a exibição de comida no corpo da cobra {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Durante o período de atraso do movimento da cobra, temos que fazer algo como purpurina alimentar e ler a direção do Joystick para (int t = 1; t 950 && KEY! = 5) { K = 8; } else if (yValue <50 && KEY! = 8) {K = 5; } else if (xValue 950 && KEY! = 4) {K = 6; }} // Aqui você pode comparar se a direção do teclado é oposta à direção de movimento da cobra. Se for o oposto, desista do teclado. / ************************************************** ************************************************** *************************************************** *************************************************** ******** / void gameover () {// Assim que o programa Gameover parar, pressione o botão central para reiniciar o jogo. valor de char unsigned, y; Cor [0] = aleatório (3, 18); // Defina a cor. O parâmetro é R G B, intervalo 0-255. Cor [1] = aleatório (3, 18); Cor [2] = aleatório (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); valor = pontuação / 10; valor = valor * 4; y = 0; for (number = value; number <value + 4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displaycore [y] [vertical] = character [number] [vertical]; } y ++; } valor = pontuação% 10; valor = valor * 4; for (number = value; number <value + 4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displaycore [y] [vertical] = character [number] [vertical]; } y ++; } for (unsigned char horizontal = 0; horizontal <8; horizontal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displayscore [horizontal] [vertical] == 1) // Julgue se a luz está ligado. {strip.setPixelColor (claro [horizontal] [vertical], c); } else strip.setPixelColor (light [horizontal] [vertical], 0); }} strip.show (); // Atraso no envio de dados (5000); K = 0; // Redefine a direção do Joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Redefine a pontuação da coordenada da cobra = 0; // Reinicia a pontuação do jogo speedS = 400; // A velocidade inicial da cobra} void setup () {Serial.begin (9600); // Inicializa a biblioteca strip.begin (); // Envie dados. O padrão da cor de cada ponto é 0. Portanto, nem todos os pontos são iluminados no início. strip.show (); K = 0; // Reinicia a direção do Joystick sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Redefine a pontuação da coordenada da cobra = 0; // Reinicia a pontuação do jogo Color [0] = random (3, 18); // Defina a cor. O parâmetro é R G B, intervalo 0-255. Cor [1] = aleatório (3, 18); Cor [2] = aleatório (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Verde Vermelho Azul // Definir cor para (número = 0; número <24; número ++) {strip.setPixelColor (go [número], c); } strip.show (); // Atraso no envio de dados (2000); ALEATÓRIA(); // Produzir comida} void mobile () {KEY = K; // Cada movimento da cobra faz com que a direção mude uma vez. if (KEY == 8) // Movimento para cima da cobra {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) // Vá além da fronteira e continue do outro lado sy [0] = 7; } else if (KEY == 5) // Movimento para baixo da cobra {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) // Vá além da fronteira e continue do outro lado sy [0] = 0; } else if (KEY == 4) // Movimento para a esquerda da cobra {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) // Vai além da fronteira e continua do outro lado sx [0] = 7; } else if (KEY == 6) // Movimento correto da cobra {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) // Vá além da fronteira e continue do outro lado sx [0] = 0; } // Mova o corpo da cobra com o botão} void displays () {for (número = 0; número <64; número ++) // Limpa a tela {strip.setPixelColor (número, 0); } strip.show (); Cor [0] = 40; // Definir cor. O parâmetro é R G B, intervalo 0-255. Cor [1] = 0; Cor [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Vermelho Azul // Definir cor x = luz [FX] [FY]; // Exibe food strip.setPixelColor (x, c); Cor [0] = aleatório (3, 18); // Definir cor. O parâmetro é R G B, intervalo 0-255. Cor [1] = aleatório (3, 18); Cor [2] = aleatório (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Verde Vermelho Azul // Definir cor para (int i = 2 + pontuação; i> 0; i--) // Exibir corpo da cobra {x = luz [sx [sy ; strip.setPixelColor (x, c); } Cor [0] = 0; // Definir cor. O parâmetro é R G B, intervalo 0-255. Cor [1] = 40; Cor [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Vermelho Azul // Definir cor x = luz [sx [0] [sy [0]; // Exibe a cabeça de cobra strip.setPixelColor (x, c); strip.show (); // Enviar dados} void loop () {mobile (); myDelay (speedS); // Dentro de () é o tempo de atraso. exibe (); SX = sx [0]; SY = sy [0]; // Obter a coordenada da cabeça da cobra para (int i = 1; i <= 2 + pontuação; i ++) {if (SX == sx && SY == sy ) gameover (); } // Julgue se a cabeça da cobra tocou seu corpo. Se for tocado, encaminhe para GameOver. if (SY == FY && SX == FX) {RANDOM (); pontuação ++; Cor [0] = 40; // Definir cor. O parâmetro é R G B, intervalo 0-255. Cor [1] = 0; Cor [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Verde Vermelho Azul // Definir cor x = luz [FX] [FY]; // Exibe food strip.setPixelColor (x, c); strip.show (); // Enviar dados if (! (pontuação% 5)) {// Acelerar a velocidade da cobra de acordo com a pontuação. A cada 5 alimentos consumidos, acelere 100 ms. velocidadeS = velocidadeS - 50; if (speedS <150) // O limite inferior é 200ms. Se a velocidade for inferior a 200ms, a velocidade permanece 200ms. velocidadeS = 150; }} // Julgue se os alimentos são consumidos. Se a cobra comeu comida, então mais pontuações e regenerar comida aleatoriamente. }

Resultado da Experiência

Etapa 4: Resultado da Experiência

Leituras relativas:

FreaksBot Bluetooth Car

Acenda o primeiro grânulo em 8 * 8 NeoPixels Matrix com Arduino

Micro: bit Experimento 05: RGB LED - Elecfreaks Mirco: bit Starter Kit Course

Postagem de produto de sexta-feira: Kit de solda de display de espectro de frequência musical LED

Use ElecFreaks Micro: bit Tinker Kit para fazer uma luz inteligente

Recomendado: