maio 222007
 
Estava conversando com um amigo sobre desenvolvimento de jogos, quando lembrei do bom e velho SpaceShooter, e o quão ficou “abafado” com o lançamento e a oficialização da última versão a 1.4 por causa causa do CDLivre[4] e do evento FLISOL.
Pois bem, aproveito a oportunidade agora para falar um pouco mais da experiência que o SpaceShooter me deu, além da diversão gerada tanto pela programação como pelo jogo em si.

História

Spaceshooter pra quem não conhece, é um divisor de águas para mim, ele inaugurou minha “nova geração” de jogos, agora produzidos com o framework GBF[5]. É um jogo simples e fácil no clássico estilo shoot’up, o qual foi muito venerado na época dos consoles Nes/SNes/Mega, tendo como base a temática de Star Trek.
O jogador tem como objetivo salvar seu planeta da extinção, e para isso deverá destruir a grande ameaça a nave Base Borg (Cubo Borg). Para poder enfrentar este desafio, o jogador contará com 04 naves estrelares, onde cada uma está melhor adaptada para as diversas zonas, além de contar com um arsenal de phaser e de alguns poucos torpedos. Para sua defesa deverá contar com sua habilidade, a velocidade dos motores de warp, além da força de seus escudos.
O jogo possui 07 fases, onde o jogador terá que enfrentar campos de asteróides, naves inimigas de várias raças, minas espaciais, e diversos outros desafios. Sua missão é destruir a ameaça cibernética, evitando assim que a extinção da raça humana.


Ficha Técnica

Aprendizado

O SpaceShooter, acabou sendo pra mim um grande laboratório, foram creio que quase 2 anos de desenvolvido, mas isso não quer dizer que o SpaceShooter é um jogo complexo ou que foi difícil de ser criado, muito pelo contrario, graças a sua simplicidade consegui superar tantas mudanças, sendo elas:
IDE, o inicio do SpaceShooter, se confundi que o inicio do framework GBF, os dois praticamente foram criados juntos, e se auto influenciaram, passei por muitas IDE, desde proprietárias a diversas soluções livres, só para ter uma idéia nesse projeto trabalhei com:
E minha opção em busca da unificação dos mundos foi o CodeBlocks, onde de fato consegui criar um projeto e utiliza-lo tanto no Linux quanto no MS-Windows, pois as outras IDEs, mesmo as que tinham versões para os dois S.O me obrigavam a criar projetos para cada S.O.
Sistema Operacional, o inicio do meu projeto se deu com MS Windows, e o Linux era utilizado apenas para compilação, e conforme fui me envolvendo com o Software Livre, pude conhecer mais a fundo o Linux e as ferramentas que eu poderia utilizar, graças a utilização de uma IDE completa para os dois mundos, pude inverter minha situação e ter como meu ambiente de trabalho e de uso domestico o Linux e ter o MS Windows apenas para compilação e testes, creio que graças as características do projeto consegui fazer essa migração de SO sem muitos problemas, porém tive que me adaptar as diversas rotinas que o Linux começava a me apresentar, pois eu queria de fato retirar o máximo possível das características do meu hardware e isso envolveu tempo e estudo, porém hoje estou satisfeito utilizando Linux em casa (Slackware 11.0 e comecei a testar o Ubuntu).

Uma coisa que pude constatar, ambiente mais robusto que o Linux e suas ferramentas não creio que tenha, era comum quando tentava depurar alguma coisa no MS Windows ter problemas ou a aplicação abortar, debugar jogos é complicado, e mesmo usando profilers ou qualquer outra ferramenta que tente ajudar a entender como o programa funciona no MS Windows a coisa ficava sempre muito complicada. Sem falar que se consegui compilar e rodar no Linux sem problema a chance de compilar e funcionar no MS Windows é alta, agora o contrario é complicado.

UML, comecei o projeto do GBF com o Power Designer, uma ferramenta proprietária de modelagem UML e de banco de dados, porém era complicado manter o código sincronizado, pois era necessário codificar dentro da ferramenta o corpo dos métodos, e não era fácil e pior que o suporte a estruturas do C++ não era muito bom (enumerações, structs, typedef), fiquei algum tempo utilizando ela, até que ficou inviável manter o projeto codificando e testando e copiando as implementações para a ferramenta, a engenharia reversa não funciona (ou se funcionava era uma porcaria, faz tanto tempo que não lembro), acabou tendo um lacuna muito grande entre os últimos modelos e o código implementado.
Achei que era hora de procurar outras ferramentas, achei uma chamada jumli[12], era uma ferramenta freeware e tinha versões para Linux e Ms Windows, era melhor que o Power Designer, porém possuía alguma limitação que não me recordo muito bem, sei que não me atendia como eu gostaria, creio que tinha algo relacionado com enumerações ou struct, e mais uma vez cai numa lacuna de tempo entre modelo e implementação monstruosa.

Por fim, consegui achar uma ferramenta francesa chamada BoUML, a qual gostei muito, era leve, prática e muito eficiente, atendia quase que perfeitamente minhas necessidades, sem falar que o desenvolver era muito acessível, troquei algumas mensagens no fórum com ele, e minhas dificuldades foram resolvidas, e chegou até ser implementado uma das minha solicitações que era referente aos includes de outras classes ficarem apenas no header(.h) e não no arquivo fonte (cpp), para isso foi criado uma marcação especial que definia isso, ou seja, é uma ferramenta que recomendo, sem falar que com ela é possível mesclar várias coisas comuns em C++ para produzirem a saída conforme eu queria, no caso jogar vários enums, structs num único arquivo, bastava apenas na parte de deploy informar o “artefato de destino”.

Hoje o modelo do SpaceShooter e do GBF estão mais próximos da implementação porém não posso garantir a fidelidade do modelo do SpaceShooter, porém pretendo nas próximas semanas atualizar e finalizar de vez o projeto.

Técnicas, além de tudo isso tive oportunidades de criar novos mecanismos pro framework GBF, além de desenvolver e aprender novas técnicas, das quais posso destacar:

  • Classes para gerenciadores de recursos: Audio, Imagens, Teclado, Joystick;
  • Classes para interface: Menus, Teclado Virtual (aqueles usados nos jogos de consoles)
  • Classes para efeitos especiais como sistema de partículas;
  • Classes para Sprite, Layers, Personagens;
  • Utilização de Sockets via SDL_net para envio e recebimento de dados com um servidor (na verdade uma página em php que tem acesso a um banco MySQL)
  • Utilização de designer patterns para criação do GBF e do SpaceShooter;
Após dois anos de intenso trabalho, ou quase, pois tive muitos períodos que não encostava em nenhuma linha de código desses projetos, consegui concluir este ano o SpaceShooter e entrega-lo para a comunidade, liberando seu source e agora, passando um pouco da experiência vivenciada com o seu desenvolvimento. Espero que esse relato possa ajudar ou direcionar os interessados em conhecer um pouco mais sobre desenvolvimento de jogos.

T+!
Vida Longa e Próspera!

———————————————-

Referência
[1] PJMOO no Código Livre – http://codigolivre.org.br/projects/pjmoo/
[2] Site SpaceShooter – http://pjmoo.codigolivre.org.br/site/spaceshooter/
[3] Wiki SpaceShooter – http://pjmoo.codigolivre.org.br/wiki/index.php/SpaceShooter
[4] CDLivre – http://cdlivre.codigolivre.org.br
[5] Framework GBF – http://pjmoo.codigolivre.org.br/wiki/index.php/GBF
[6] SDL – http://www.libsdl.org
[7] CodeBlocks – http://www.codeblocks.org
[8] BoUML – http://bouml.free.fr
[9] DevCPP – http://www.bloodshed.net/devcpp.html
[10] Eclipse CDT – http://www.eclipse.org/cdt
[11] KDevelop – http://www.kdevelop.org
[12] Jumli – http://www.jumli.de

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(requerido)

(requerido)