terça-feira, 4 de setembro de 2012

Restauração do Código

Olá a todos!!!

Estive estudando maneiras de tornar o código visto no post anterior mais limpo e encapsulado. Para tal, modifiquei a estrutura antiga do código para uma nova utilizando alguns conhecimentos que possuía em construções de engines para jogos.

Só para contextualizar, o código anterior baseava-se numa estratégia em que certas classes facilitavam a organização de alguns blocos de código para o "GameLoop" que estava na main. São elas:
  • Renderer;
  • Peao;
  • Cenario;
  • S_Behavior;
  • Menu;
  • Power.
E na main, o código era dividido em duas funções, sendo uma delas responsável por gerenciar o Super Meele e a outra o Trick or Treat. Com isso já é possível perceber os erros grotescos de planejamento de projeto realizados. Os erros mais visíveis são descritos abaixo:
  • A maioria das classes não representam objetos do jogo;
  • O código parece mais um C disfarçado do que um código orientado a objetos;
  • Programa-se para implementações e não para interfaces;
  • Não se encapsulou o que varia;
Já diz o meu velho conhecido Vinicius Mendonça: "Se você vê seus códigos anteriores e acha que você programava bem, você deve começar a se preocupar". Logo, não podemos chamar a versão anterior de jogo, mas sim de um milagre que funciona na base da fé. 

Bem, confesso que não sou uma pessoa apegada à religião o suficiente para seguir aquela abordagem sem piores riscos, então resolvi botar a mão na massa e criar uma nova estrutura para o projeto. Na nova abordagem temos:

  • Uma classe que inicializa a janela e as classes base e contém a estrutura do GameLoop (GameManager);
  • Uma classe para renderização que recebe uma matriz com as transformações e coordenadas do objeto e o desenha na tela de acordo com a câmera ou não (Renderer);
  • Uma classe exclusiva para controle da câmera (Câmera2D);

O novo GameLoop utiliza uma abordagem baseada em telas e polimorfimo. Ou seja, é responsabilidade da tela atual retornar ela mesma enquanto o usuário não estiver saido desta, e retornar outra tela ou até mesmo nenhuma tela para que o jogador vá para a tela correspondente ou, no ultimo caso, saia do jogo.

Tendo um código baseado em telas, fica fácil encapsular as diversas partes do jogo, pois temos Menu, Creditos, GameOver, JogoTrickOrTreat, Abertura, dentre outras telas que podem ser facilmente programadas utilizando a abordagem.

No próximo post falarei sobre a implementação da Abertura, Menu e Cenário realizadas para o novo código. Até lá...

Nenhum comentário:

Postar um comentário

Obrigado pela Participação!!!