Jogo Pixel Chaser
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
|
Sobre este projeto
Eu costumava ser um desenvolvedor de jogos, e um dos santo grails no desenvolvimento de jogos para celular é fazer o jogo definitivo de "um toque".
Eu queria ver se eu poderia fazer um jogo incrível de "física" com um clique usando um microcontrolador, um botão e alguma forma de feedback visual.
Apresentando PIXEL CHASER!
É uma construção bastante fácil, então vamos direto ao assunto!
De que peças precisamos?
Precisamos do seguinte:
- Arduino Nano (ou qualquer microcontrolador com 2 pinos IO disponíveis)
- Anel ou faixa RGB "NeoPixel"
- Botão momentâneo
- resistor de 10k
- placas de ensaio
- fios
Etapa 1
Coloque o Nano em uma extremidade da placa de ensaio com o conector USB na extremidade.
Etapa 2
Coloque o botão na outra extremidade da placa de ensaio, o mais próximo possível da borda para que seja fácil de chegar.
Etapa 3
Adicione o resistor de 10k entre um dos lados do botão e o trilho GND da placa de ensaio. Este será o estado padrão BAIXO do botão. Usamos um resistor para garantir que não haja curto entre VCC e GND quando o botão é pressionado, pois isso pode danificar o microcontrolador e outros componentes.
Etapa 4
Conecte um fio de jumper do lado oposto do botão ao trilho VCC. O botão ficará alto quando for pressionado.
Etapa 5
Conecte um fio de jumper do lado GND do botão para D3 no Nano. Leremos D3 para determinar o estado do botão.
Etapa 6
Conecte a tira / anel RGB à placa de ensaio. Conecte o fio VCC ao barramento de alimentação VCC, o fio GND ao barramento de alimentação GND e o fio DI (entrada de dados) ao D4 no Nano. Estaremos controlando os pixels com D4.
Etapa 7
Conecte um jumper de fio do pino 5 V no Nano ao barramento de alimentação VCC e, em seguida, conecte um fio jumper do pino GND no Nano ao barramento de alimentação GND.
Etapa 8
Carregue o código e jogue!
Espero que tenham gostado desse projeto!
Você pode encontrar mais projetos divertidos como este no meu canal do YouTube.
Siga-me:
http://twitter.com/unexpectedmaker
https://www.facebook.com/unexpectedmaker/
https://www.instagram.com/unexpectedmaker/
https://www.patreon.com/unexpectedmaker
https://www.tindie.com/stores/seonr/
Código
- Jogo Pixel Chaser - Código Arduino
Jogo Pixel Chaser - Código Arduino Arduino
Adicione este código no Arduino e siga as instruções de construção!/ * ---------------------------------- ----------------------------------------- Jogo Pixel Chaser - v1.0.0 - 24 /03/2019.AUTHOR/LICENSE:Criado por Seon Rozenblum - [email protected] Licença de copyright 2016:GNU GPL v3 http://www.gnu.org/licenses/gpl-3.0.htmlLINKS:Blog:inesperadomaker.comYOUTUBE:youtube .com / c /pectedmakerDISCLAIMER:Este software é fornecido "como está", sem suporte técnico e sem garantia, expressa ou implícita, quanto à sua utilidade para qualquer finalidade. OBJETIVO:Este controlador é o software executado no Reflow Master controlador de torradeira fabricado por Unexpected MakerHISTORY:24/03/2019 v1.0.0 - Versão inicial. NOTA:Este é um trabalho em andamento ...------------------- -------------------------------------------------- ------ * /// Precisamos dessas bibliotecas instaladas a partir do gerenciador de biblioteca # include#include "OneButton.h" // Qual GPIO é a faixa conectada a # define PIXELPIN 4 // Quantos Ne oPixels na faixa # define NUMPIXELS 24 // A qual GPIO o botão está conectado? #define BUTTON_TAP 3 // Inicialize o botão, com um botão lowOneButton padrãoTAP (BUTTON_TAP, false); // Inicialize o pixel stripAdafruit_NeoPixel pixels =Adafruit_NeoPixel (NeoPixel pixels =Adafruit_NeoPixel , PIXELPIN, NEO_GRB + NEO_KHZ800); // Um monte de variáveisint playerIndex =-1; int playerIndexTrail =-1; int playerDirection =1; float nextMove =0; float currentPlayerSpeed =150; contagem regressiva longa sem sinal =0; int inimigoIndex =- 1; int coinIndex =-1; int score =0; int bestScore =0; int lastScore =0; bool gameOver =false; void setup () {// torna o pino do botão um pinMode de entrada (BUTTON_TAP, INPUT); // Atribui funções de clique ao botão buttonTAP.attachClick (singleClick); buttonTAP.attachLongPressStart (longClick); // Inicialize a faixa e defina seu brilho para 20% pixels.begin (); pixels.setBrightness (20); // define uma contagem regressiva de 2 segundos antes que o jogador apareça e comece a se mover contagem regressiva =millis () + 2000;} void loop () {// A cada ciclo, precisamos marcar o estado do botão buttonTAP.tick (); // Se o jogo estiver no estado game over, saia do loop mais cedo if (gameOver) return; // Define o estado de exibição de pixel do nível // Isso define a posição do inimigo e a posição da moeda SetLevel (); // aguarde um segundo para o jogador ficar pronto if (countdown> millis ()) {pixels.show (); Retorna; } // Toda a exibição do jogador, movimento e lógica do jogo estão aqui DisplayPlayer (); // Isso envia a cor de pixel atualizada para o hardware. pixels.show ();} // Limpa o nível, definindo todos os pixels para blackvoid ClearLevel () {for (int i =0; i =0) pixels.setPixelColor (playerIndexTrail, pixels.Color (0, 0, 0)); if (playerIndex> =0) {pixels.setPixelColor (playerIndex, pixels.Color (0, 100, 0)); playerIndexTrail =playerIndex; } // Mova o jogador em sua direção atual playerIndex + =playerDirection; // Envolva o jogador nas bordas da faixa if (playerIndex <0) playerIndex =NUMPIXELS - 1; else if (playerIndex ==NUMPIXELS) playerIndex =0; pixels.setPixelColor (playerIndex, pixels.Color (0, 255, 0)); // O jogador acertou a moeda? // Em caso afirmativo, aumente a pontuação, redefina a moeda e as posições inimigas e limpe o nível // Próximo loop o SetLevel () irá redefinir o inimigo e a moeda // A velocidade do jogador também é aumentada para cada moeda atingida se (playerIndex ==coinIndex) {inimigoIndex =-1; coinIndex =-1; pontuação ++; currentPlayerSpeed =constrain (currentPlayerSpeed - 10, 50, 150); ClearLevel (); pixels.setPixelColor (playerIndex, pixels.Color (0, 255, 0)); } // O jogador atingiu o inimigo? // Definir a última / melhor pontuação e cancelar o jogo else if (playerIndex ==inimigoIndex) {lastScore =score; if (pontuação> =bestScore) bestScore =pontuação; Fim de jogo(); gameOver =true; inimigoIndex =-1; coinIndex =-1; playerIndex =-1; }}} // Botão único clickvoid singleClick () {// Nenhuma entrada até que o jogador esteja visível if (countdown> millis ()) return; // muda a direção do jogador playerDirection =-playerDirection;} // Botão longo clickvoid longClick () {// Alterna o estado do jogo // Se o jogo acabou, inicia o jogo, caso contrário cancela um jogo em andamento gameOver =! gameOver; if (gameOver) {inimigoIndex =-1; coinIndex =-1; playerIndex =-1; currentPlayerSpeed =150; ClearLevel (); } else {ClearLevel (); pontuação =0; currentPlayerSpeed =150; contagem regressiva =milis () + 2000; }}
Processo de manufatura
- Jogo Arduino Gyroscope com MPU-6050
- Dados digitais Arduino
- Jogo Arduino Pong - Tela OLED
- DIY 37 LED Roulette Game
- Controlador de jogo Arduino
- Jogo Arduino Touch Breakout
- Jogo Arduino Nano Tetris em Matriz 16x8 caseira
- Levitação eletromagnética repulsiva Arduino
- Jogo Dino automatizado usando arduino
- Arduino Home Controller ativado por Alexa