Mensagem

"Sonhar mais um sonho impossível, lutar quando é fácil ceder, vencer o inimigo invencível, negar quando a regra é vender."
Miguel de Cervantes.

"Os microprocessadores RISC funcionam a partir do princípio genial de se encarregar das coisas mais fáceis e deixar todas as partes difíceis para outras pessoas resolverem."
Douglas Adams.

uGame

   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