quarta-feira, 5 de setembro de 2012

Restauração Geral do Código Concluída

Olá a todos!!!

Consegui finalizar a restauração da parte do código que precisávamos. Esta parte envolve:

1- Uma classe de abertura do jogo, para que possam ser adicionados facilmente novas imagens de logo com efeitos diferentes de transição. Por enquanto, o único efeito disponível é o velho degrade, mas é possível facilmente se adicionar novos à estrutura, como um motion blur ou escala.

2- Uma tela de menu e créditos, para que eu pudesse testar a classe de renderização, bem como o sistema de telas.

3- Uma tela de jogo, contendo o cenário totalmente desenhado, para que eu percebesse as estruturas iniciais do jogo a serem desenvolvidas a partir daqui.

Demais implementações da interface antiga, como Super Meele, peões e animações serão adiadas para capítulos futuros, pois o objetivo a partir de agora será a implementação de uma classe concreta de jogador, que seja inteligente e fracamente ligada o suficiente para que possamos de modo fácil executar as conversas entre objetos jogadores a fim de melhor coordenar trocas de turno, ativação de habilidades, desvantagens, etc...

Enfim, há muito trabalho pela frente, mas a partir de agora nem um pouco deste passará a ser totalmente destinado à recuperação do código anterior, mas sim na programação de novas funcionalidades.

No próximo post estarei falando sobre as novas implementações do jogo que corrigem problemas da versão anterior. Até mais!

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á...

domingo, 2 de setembro de 2012

Desenvolvimento inicial do game

Olá a todos!!!

Já falamos sobre o Game Design e sobre os aspectos da arte do game. Agora só resta contextualizar o desenvolvimento inicial do game.

Para a disciplina de Oficina de Jogos II, desenvolvemos um prototipo digital deste game contendo cenário animado, tabuleiro sendo desenhado com culling, peões andando sobre o tabuleiro e as telas iniciais de menu e abertura básica.

Nessa época, eu desconhecia os prazeres do polimorfismo e os princípios de projeto necessários para manter um código limpo e modificável. Ou seja, a estrutura inicial programada do jogo não poderá ser aproveitada.

O jogo foi desenvolvido na linguagem C++ utilizando a Chien2D, uma engine didática desenvolvida pelo professor Radke.

Para mais informações sobre a versão, consultem o vídeo abaixo:

http://www.youtube.com/watch?v=OYvLxXRBlGg&feature=g-upl