Bomberman H-8

Alunos:

  • Jorge Melegati
  • Leandro Lima
  • Yves Conselvan

ano/sem: 2008/2o.
data do laboratório (num. da semana) : 17/12/2008

Introdução

Como projeto para o exame de CES-22, nosso grupo realizou a criação de um jogo em 2D, ambientado no alojamento dos alunos do ITA e inspirado por recentes acontecimentos nesse lugar.

No jogo, o usuário pode se deslocar por vários quartos (cheios de bizus de veteranos), corredores e também lançar bombas. Há também um modo de jogo em rede, no qual dois adversários tentam eliminar um ao outro com as bombas.

Detalhamento do projeto

A linguagem utilizada para a criação do jogo foi a liguagem de programação D. Optamos por escolher uma linguagem mais obscura para aumentar o nivel de complexidade do trabalho. Vale ressaltar que não há muitos recursos disponíveis na internet para essa linguagem (além de ser extremamente dificil achar "D" em buscas). Sua semelhança com C++ em alguns aspectos possibilitou que nós utilizássemos algumas bibliotecas dessa liguagem (Derelict - SDL) como ponto de partida para o projeto. Utilizamos a versão 1.0 de D por causa de compatibilidade com o Derelict.

Derelict é um conjunto de bindings (forma de ter acesso a algumas funções de bibliotecas não nativas da linguagem) pra algumas bibliotecas. A bilbioteca multimídia SDL foi extremamente útil, pois ela nos municiou de vários recursos para criar as classes como as superfícies da parte gráfica, os eventos (para mouse e teclado) e as fontes para o menu e caixas de texto.

O código do programa possui boa portabilidade (pode ser compilado tanto em Linux quanto em Windows)

Endereço para o repositório SVN:

https://bomb-h.svn.sourceforge.net/svnroot/bomb-h

Pacotes:

Smallxml:

Nesse pacote foram implementadas as classes referentes a esse parser xml, cujo objetivo foi melhor interpretar o arquivo xml dado sua complexidade. No arquivo xml (config.xml) ficam as principais configuracoes do jogo como, por exemplo, tamanho da tela e posicao de objetos. O parser xml foi obtido no site http://www.dsource.org (site para projetos open source em D).

Engine:

Aqui estão as principais classes relativas ao jogo. A Engine provê um sistema com baixo acoplamento com o resto. Inclusive, pode ser aprefeiçoada para se tornar um framework, pois a partir de um xml e das classes principais, a engine pode ser utilizada como um aplataforma de criação de jogos 2D. Na classe engine foi usado o padrão de projeto Singleton, pois somente uma instância da engine seria permitida ao rodar o programa. Além disso, há também o padrão Decorator em Tile, Factory Method em ObjetoFactory, Strategy em TecladoBehaviour e Facade em Engine. Sem dúvida, esse foi o pacote mais complexo, demandando mais esforço, no qual os padrões puderam ser aplicados com extensividade.

UML_engine.JPG
Fig. 1 - Diagrama de classes

Rede:

Nesse pacote, estão as classes que possibilitam a utilização do jogo na modalidade Multiplayer. Basta, para isso, sabermos o IP do computador a ser conectado e entrarmos com essa informação no Menu Principal. Os padrão utilizados foram Observer (em ConnectionObserver e StreamObserver) e Proxy.

UML_rede.JPG
Fig. 2 - Diagrama de classes

StateMachine:

A StateMachine utilizada no Lab 3 foi portada para linguagem D e utilizada como plataforma para a geração dos eventos que se enquadram em seus requisitos. Nas classes desse pacote, observamos o padrão Command (em StateCommand e EventCommand) e o padrão Observer na classe com o mesmo nome.

Menu

Botões, caixas de texto e outros recursos referentes ao Menu Principal.

UML_menu.JPG
Fig. 3 - Diagrama de classes

Jogo:

Aqui estão as classes referentes a objetos e ao cenário de uma forma geral. As peculiaridades de cada elemento foram tratados em classes distintas, visando o desacoplamento do código. Observamos o padrão Observer em Bomb e Decorator em Espaco.

UML_jogo.JPG
Fig. 4 - Diagrama de classes

Util:

No pacote Util estao presentes algumas classes de apoio às demais como direcao e fila.

Instalação / Compilação

Para rodar o jogo, basta seguir os seguintes passos:

- Baixar DMD v1.036
- Baixar e instalar Code::Blocks (ou outro ambiente de desenvolvimento compatível com a linguagem D)
- Configurar o caminho do diretório de instalação do DMD (No Code::Blocks fica em Compiler Settings)
- Baixar a biblioteca multimídia SDL
- Escolher o target e dar Build (verificando as bilbiotecas)

Foi possível criar um executável bem leve (aproximadamente 1,3 MB) mesmo com a biblioteca dinâmica.

Estatísticas do Desenvolvimento

O desenvolvimento do jogo foi realizado em várias e, para tal, monitoramos as atividades do grupo com relação a diversos aspectos do processo de desenvolvimento do jogo. Abaixo encontram-se os gráficos mostrando a evolução desses aspectos.

Tamanhos dos pacotes

directory_sizes.png
Fig. 5 - Tamanhos dos pacotes

Atividade por pacote - Jorge

directory_sizes_jorgeamg.png
Fig. 6 - Jorge

Atividade por pacote - Leandro

directory_sizes_leoliv.png
Fig. 7 - Leandro

Atividade por pacote - Yves

directory_sizes_yconselvan.png
Fig. 8 - Yves

Contagem de arquivos

file_count.png
Fig. 9 - Contagem de arquivos

Tamanho médio dos arquivos

file_size.png
Fig. 10 - Contagem de arquivos

Linhas de código do programa

loc_small.png
Fig.11 - Linhas de código do programa

Screenshots do jogo

Abaixo, encontram-se algumas imagens retiradas do jogo em execução:

walking.JPG
Fig. 12 - Bomberman passeando pelo H-8
walking_bomb.JPG
Fig. 13 - Bomberman encontra um lugar para jogar uma bomba
bomb_explosion.JPG
Fig. 14 - Explosão da bomba
multiplayer.JPG
Fig. 15 - Modo Multiplayer

Conclusão

Durante a criação desse jogo vários conceitos explorados na matérias puderam ser revistos e colocados em prática. Uma das maiores dificuldades encontradas foi a questão de como tornar o código o mais desacoplado possível. Quando o programa consiste em poucas classes, fica mais fácil administrar as composições e heranças. Com muitos pacotes e um número ainda maior de classes (mais de 50!), torna-se extremamente necessário organizar o código para que aumente a coesão e diminua o acoplamento. Os padrões de projetos utilizados em toda a extensão do programa sem dúvida auxiliaram nesse sentido (além de exercerem suas funcionalidades próprias).

Como aspectos importantes a serem melhorados nas próximas versões, podemos apontar:

- Diminuição na velocidade de movimentação da personagem, pois notamos que há uma sensibilidade muito grande com os comandos do teclado, que faz com que fique mais rápida do que o previsto.

- Inserção de mais objetos (e consequentemente mais classes) no cenário (como camas, armários, estantes, geladeira), enriquecendo o ambiente.

- Redefinição das texturas dos objetos já existentes para aumentar a autenticidade da experiência.

- Introdução de personagens controlados pela máquina para interagir com o usuário (provavelmente o mais difícil e demorado a ser implementado).

- Introdução de música de fundo e sons para certos eventos utilizando a biblioteca SDL_Mixer.

- Suporte a mais jogadores no modo Multiplayer.

Possivelmente, a estrutura da Engine possa vir a se tornar um framework pra a criação de jogos 2D, já que vários requisitos para tal já se encontram implementados.

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License