Índice:

Jogo de rochas espaciais do Arduino: 3 etapas
Jogo de rochas espaciais do Arduino: 3 etapas

Vídeo: Jogo de rochas espaciais do Arduino: 3 etapas

Vídeo: Jogo de rochas espaciais do Arduino: 3 etapas
Vídeo: METEORO ATINGINDO A LUA 🌙😱 #shorts 2024, Julho
Anonim
Jogo de rochas espaciais do Arduino
Jogo de rochas espaciais do Arduino

Quer sejam jogados em um computador, em um telefone, em um console de jogo ou em uma caixa independente, muitos videogames incluem um elemento de evitar obstáculos. Claro, pode haver pontos ganhos por coletar tokens ou encontrar seu caminho através de um labirinto, mas tenha certeza de que provavelmente há algo no jogo cujo único propósito é impedi-lo de fazer isso. O primeiro videogame foi o Pong, mas depois disso os jogos mais populares foram coisas como “Asteroids” ou “Pac-Man”. Uma variação mais recente seria o jogo simples, mas viciante de “Flappy Birds”.

Recentemente, vi que alguém havia feito uma versão simples de dois níveis de “Flappy Bird” que era reproduzida em um LCD 1602 comum. Achei que isso seria algo que os netos poderiam gostar, então decidi fazer minha própria variação do zero. A versão 1602 tem apenas dois níveis, então decidi usar um LCD 2004 (20x4) para aumentar um pouco a dificuldade de jogo. Também optei por torná-lo mais parecido com “Asteroids”, fazendo com que o jogador guiasse uma “nave” através de um labirinto de “rochas espaciais”. Mesmo se você não estiver interessado em construir o jogo, pode haver alguns elementos do software que você pode usar em um de seus próprios projetos.

Etapa 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

O hardware pode ser baseado em praticamente qualquer versão do Arduino. Fiz a prototipagem usando um Nano e depois gravei o código em um chip ATMega328. Esse é o mesmo chip usado no Nano, mas usá-lo sozinho permite uma construção mais compacta e menor consumo de energia. Como você pode ver, eu construí o circuito em uma pequena placa de ensaio que se encaixa no módulo LCD. O outro aspecto diferente é que o Nano roda a 16 MHz usando um cristal externo, mas optei por usar o oscilador de 8 MHz integrado para o chip ATMega328. Isso economiza peças e energia.

O LCD 2004 faz interface com o Arduino da mesma forma que um LCD 1602. Uma diferença interessante está no endereçamento dos locais de exibição. Obviamente, há uma diferença porque existem quatro linhas em vez de duas, mas, em 2004, a terceira linha é uma extensão da primeira linha e a quarta linha é uma extensão da segunda linha. Em outras palavras, se você tivesse um programa de teste que acabou de enviar uma sequência de caracteres para o LCD, o 21º caractere aparecerá no início da terceira linha e o 41º caractere retornará ao início da primeira linha. Eu uso essa característica no software para dobrar efetivamente o comprimento do labirinto.

Decidi fazer minha versão com bateria, então usei uma bateria 18650 Li-ion comum de 3,6 volts. Isso exigiu que eu adicionasse uma pequena placa para permitir a recarga de USB e outra pequena placa para aumentar a tensão da bateria para 5 volts para o LCD e o chip ATMega. As fotos mostram os módulos que usei, mas também existem módulos multifuncionais que realizam as duas funções.

Etapa 2: Software

O software é o mesmo para o chip Nano e ATMega328. A única diferença está no método de programação. Eu uso minha própria versão barebones do software 1602 LCD e o software LCD neste projeto é baseado nisso. Eu precisava adicionar recursos para lidar com as linhas extras da tela de 2004 e também adicionar rotinas para mudar a tela. A mudança de exibição fornece o efeito de movimento das “rochas” após o “navio”.

Conforme mencionado anteriormente, as linhas 1 e 3 formam uma fila circular e as linhas 2 e 4 também. Isso significa que após 20 turnos, as linhas 1 e 3 são trocadas e as linhas 2 e 4 são trocadas. Após 40 turnos, as linhas estão de volta às suas posições originais. Por causa desse comportamento, o labirinto original de 20 caracteres torna-se completamente diferente quando as linhas trocam. Isso tornou a vida interessante quando tentei formar um labirinto. Eu finalmente abri uma planilha do Excel para que pudesse traçar o caminho sem ter que mudar constantemente o software. O software fornecido aqui tem duas versões do labirinto (uma está comentada) para que você possa escolher a que deseja ou criar a sua própria.

Originalmente, eu queria que fosse simples o suficiente para que os netos mais novos pudessem jogar, mas também queria que tivesse algum desafio extra se eles (ou outra pessoa) se tornassem muito bons nisso. O jogo começa com a taxa de mudança definida em 1 segundo. A taxa de tique interna é de 50ms, o que significa que existem 20 intervalos durante os quais os botões para cima / para baixo podem ser pressionados. Na verdade, um botão pressionado consome 2 tiques porque um intervalo de 50ms é usado para detectar a pressão e outro intervalo de 50ms é usado para aguardar a liberação. Com o labirinto padrão, o número máximo de pressionamentos necessários antes do próximo turno é três. A maneira simples de aumentar a dificuldade do jogo é encurtar o tempo entre os turnos, de forma que algumas linhas de código façam exatamente isso à medida que a pontuação aumenta. A taxa de deslocamento é definida para acelerar em 50 ms a cada 20 turnos, com a taxa mínima limitada a 500 ms. É fácil alterar esses parâmetros.

Além de alterar a taxa de deslocamento, a lógica primária do software é mover a “nave” e determinar se a “nave” colidiu com uma “rocha”. Essas funções tiram proveito do array “rock / space” definido e também do array que define os locais de memória no display. A contagem de deslocamento corresponde ao comprimento da linha do LCD (0-19) e é usada como um índice para essas matrizes. A lógica é um tanto complicada pelo fato de que as linhas trocam a cada 20 contagens de turnos. Lógica semelhante é usada para determinar a posição do “navio”, que pode estar em qualquer uma das quatro linhas.

A pontuação de cada jogada é simplesmente a contagem do número de turnos ocorridos e a pontuação mais alta é salva no microcontrolador interno EEROM. A biblioteca EEPROM é usada para fazer as leituras e gravações nesta memória. As rotinas disponíveis permitem leituras / gravações de byte único e leituras / gravações de valores de ponto flutuante. Um valor de 0xA5 é armazenado na primeira localização EEROM para indicar que uma pontuação alta foi salva. Se esse valor estiver presente na inicialização, o valor do ponto flutuante para a pontuação mais alta será lido e exibido. Se o valor 0xA5 não estiver presente, então uma rotina é chamada para inicializar a pontuação mais alta para um valor de 1. Essa mesma rotina é chamada se um reset da pontuação mais alta for desejado. A pontuação mais alta é redefinida para um valor de 1 mantendo pressionado um dos botões para cima / para baixo e, em seguida, pressionando momentaneamente o botão de reinicialização.

Etapa 3: jogar o jogo

Jogando o jogo
Jogando o jogo
Jogando o jogo
Jogando o jogo

Quando a alimentação é aplicada, a pontuação atual mais alta é exibida. Depois que a pontuação mais alta é exibida, o labirinto de “pedras” e o “navio” são exibidos e o jogo começa alguns segundos depois. Quando o “navio” atinge uma “pedra”, a mensagem “CRASH E QUEIMADA” pisca algumas vezes antes de exibir o placar do jogo. Se uma nova pontuação máxima for feita, essa mensagem também será exibida. Um novo jogo é iniciado pressionando o botão de reset.

Recomendado: