Este
projeto foi desenvolvido para a programação básica de jogos, foi baseado em um
projeto que encontrei em um site japones
(http://nicotak.com/avr/ledgame.html). O hardware emprega 4 matrizes de 8x8 LEDs
(pixel quadrado) e o 74HC595 para a expansão de I/O, o circuito pode ser visto
aqui. Infelizmente a placa de circuito impresso foi
desenvolvida com um erro na posição das matrizes de LEDs (tenho certa culpa no
processo). Dessa forma, necessitei fazer uma placa de correção. Assim, não
estou disponibilizando o seu desenho (se alguém o desejar, é só me escrever).
Fiz um
programa básico onde realizo a varredura da matriz de LEDs dentro de uma
interrupção do timer do ATmega328 (microcontrolador utilizado), o que
resultou em torno de 750 bytes de programação.
A matriz de LEDs é mapeada no programa por
um vetor de 16 posições com 16 bits cada (unsigned int), o que permite a
qualquer momento escrever em qualquer pixel da matriz. Por incrível que possa
parecer, dada a estrutura da matriz, utilizar variáveis de 16 bits em
detrimento as de 8 bits (no caso do ATmega), resultou em um código mais
eficiente.
Também fiz algumas rotinas de som, o que
permite tocar algumas notas músicais de forma simples.
Como gosto de aproveitar o hardware, acabei
incluindo um sensor de tempertura (LM35). Dessa forma, utilizo um filtro de
média móvel de 64 amostras para a suavização da leitura.
O programa demo é quase uma pintura, pelo
menos nas funcionalidades básicas, vale a pena analisá-lo (download aqui).
Desenvolvi o jogo da cobra, adaptação
daquele antigo jogo de celular onde uma cobrinha vai comento os pixels e
aumentado de tamanho. Nessa parte da programação, a coisa já ficou mais confusa
e menos otimizada. Criei um vetor que armazena as coodenadas XY da cabeça da
cobra a cada passo e permite aumentar e movimentar a cobra. No vídeo
abaixo é possível ver a funcionalidade do jogo.
Em resumo, a necessidade de desenvolver
algoritmos diferentes de acordo com o jogo é bem desafiadora, e sem dúvida, é
necessário um bom projeto para um jogo bem programado.
Um aprendizado dessa brincadeira: quanto
mais elegante forem as funcões desenvolvidas, mais fácil é criar o
restante da programação, a lógica do jogo.
Nenhum comentário:
Postar um comentário