• maironw Mairon S. Wolniewicz
    2018-11-27 10:58:23 -0200 Thumb picture

    Desenvolvendo um jogo em um microcontrolador - Parte 2

    Então, eu havia prometido no outro post que eu ia explicar um pouco como eu estava desenvolvendo um jogo em C que iria rodar em um microcontrolador em uma  tela de um Nokia 5110.

    Eis que eu acabei não falando nada mais sobre justamente por estar ocupado terminando esse e outros projetos da faculdade.

    Voltei, sem um tutorial de como programar o negócio todo, mas trouxe um trailer do jogo (bobinho, mas era parte da avaliação uahsuha) e todo o código fonte no github, que tem comentários o suficiente para quem estiver interessado:

    https://github.com/MaironW/Wings-of-Cucco

    The Legend of Zelda

    Plataforma: NES
    2695 Jogadores
    130 Check-ins

    27
  • maironw Mairon S. Wolniewicz
    2018-09-29 11:30:20 -0300 Thumb picture

    Desenvolvendo um jogo em um microcontrolador - Parte 1

    Medium 3675067 featured image

    Faz um tempo que eu não frequento o Alvanista. Da última vez em que estive por aqui com mais participação, eu meio que estava tentando fazer um jogo para computador. O mais legal? Na época eu não fazia ideia de como programar e devido aos mais diversos motivos o projeto nunca foi pra frente. Um deles foi minha entrada na faculdade, onde acabei tomando como minha área favorita justamente a programação.

    Uma das disciplinas optativas que curso é a de Microcontroladores. Pra quem não saca, um Arduino é um microcontrolador. E pra quem não conhece nem ele, dá pra dizer resumidamente que um microcontrolador é um dispositivo compacto com um processador e a opção de enviar e receber sinais, útil o suficiente para ser embarcado em muitos projetos de engenharia.

    Para deixar claro, o microcontrolador que eu estou usando é um Tiva C Launchpad. Entrarei no mérito de suas configurações quando necessário.

    Diferente de programar software simples para um sistema operacional qualquer, ao programar em um microcontrolador você tem a preocupação de resolver problemas utilizando registradores. Sabe quando alguém fala que computação se resume a 0 e 1? O que a gente faz aqui é praticamente dizer para o processador o que vai valer 0 e o que vai valer 1, e ter como resposta toda uma lógica de ações que ele vai realizar.

    Como intermediário entre um código escrito na linguagem C dizendo para a placa o que fazer e esses comandos binários que ela interpreta, o algoritmo é lido na linguagem Assembly, mais próxima de como o computador entende as coisas do que como o ser humano faz.

    Sabe o que também era programado em Assembly? Jogos de Game Boy. Seja Super Mario Land, Pokémon Red/Blue e Zelda Link's Awakening. Todos foram criados do zero com essa linguagem em mente.

    O desafio proposto a mim foi, utilizando o Tiva C, uma matriz de botões 4x4 e uma tela do clássico celular Nokia 5110, montar um jogo convincente o suficiente para ser aprovado na disciplina. Nada mais justo, partindo de critérios como simplicidade, nostalgia e principalmente semelhança, eu criar minha própria versão de um jogo de Game Boy para o microcontrolador. O escolhido foi The Legend of Zelda.

    Essa é a tela que eu devo utilizar. Ela possui duas grandes limitações: sua resolução é de apenas 84x48 pixels e ela é monocromática, mostrando apenas os pixels ligados ou desligados. Comparando ao GB, ele possui resolução de 160x144 pixels e consegue mostrar 4 escalas de cinza na tela.

    O intuito inicial do jogo é fazer algo o mais próximo de The Legend of Zelda Link's Awakening, mas provavelmente apenas sendo possível atacar e perder vida para os inimigos, sem dungeons.

    Primeiro vou falar da parte mais legal: mostrar as coisas na tela.

    Como parâmetro, utilizei o spritesheet original de Link's Awakening e de ambos os Oracles.

    Meu código, escrito em C, não consegue carregar uma imagem no formato bmp e simplesmente colocar ela na tela. O processo vai um pouco além disso.

    Primeiro, é necessário remover as cores da imagem. Apenas as cores preto e branco serão interpretadas.

    Para minha tela, o que tiver a cor preta, valerá como 0, enquanto branco valerá como 1. Essa lógica também serve para dizer quais pixels da tela estarão desligados (0) e ligados (1).

    Portanto, se eu quero que um sprite apareça com seus contornos em preto na tela, devo desenhá-lo ao contrário no computador.

    Essa é a imagem que eu devo reproduzir, num formato bitmap de 16 bits. Para minha tela interpretar, contudo, eu devo transformá-la em um vetor hexadecimal com as informações de pixel ligado ou desligado. A imagem do Link olhando para a esquerda é usada no meu código na forma:

    Sem entrar no mérito do processo de como a função da tela trata esses números, basta dizer para ela mostrar "link_left_1" nas posições x e y desejadas, e meu personagem aparece na tela.

    Em outros posts eu pretendo explicar um pouco mais da lógica por trás tanto do gameplay e dos botões quanto da própria disposição de coisas na tela, que devido ao pequeno tamanho, se torna um desafio.

    No momento eu tenho como versão de testes a seguinte aplicação:

    Parte 2.

    The Legend of Zelda: Link's Awakening

    Plataforma: Gameboy
    1261 Jogadores
    19 Check-ins

    53
    • Micro picture
      emphighwind · 3 meses atrás · 2 pontos

      Massa, programação não é o meu forte, mas eu sempre acho interessante de ver estes projetos DIY, não conhecia este Tiva C ai, os únicos microcontroladores que eu mexi direito e arranho alguma coisa foram o próprio ATmega do arduino e o ESP8266.

    • Micro picture
      tiagotrigger · 3 meses atrás · 2 pontos

      Que demais, tá ficando legal. Quero ver pronto, boa sorte com o projeto. o/

    • Micro picture
      msvalle · 3 meses atrás · 2 pontos

      Parabéns pelo projeto, e sucesso no desenvolvimento!
      @alvadevs

Carregar mais postagens

Continuar lendo → Reduzir ←
Carregando...