Sci Full dEX

Alunos:

* Bruno César Alves
* Diogo de Albuquerque Cassimiro
* Felipe Correia de Moraes
* Pedro de Sousa Cau Ramos Salles

2008/2o.
17/12/2008

Introdução

O Sci Full dEX é um jogo para windows de guerra de naves espaciais. Neste jogo cada jogador controla uma nave com o objetivo de destruir as naves dos demais jogadores. O jogo se passa em uma base abandonada no espaço, na ausência de gravidade e com destroços flutuando em seu interior.

Descrição Técnica

Uma das idéias do jogo é dar ao jogador a sensação de estar realmente no espaço, ou seja, em total ausência de gravidade, com movimento inercial e não sendo possível ter referencia de onde é "pra cima" e onde é " pra baixo". O jogo funciona em tempo real, ou seja, não é baseado em turnos, o que deixa o jogo bem dinâmico.

A linguagem utilizada foi C#, para que se pudesse utilizar a biblioteca XNA GameStudio da Microsoft, que foi a base do projeto.
O XNA é uma engine para jogos que ja engobla renderização gráfica, som , input, rede e física básica. Devido à limitações do sistema de rede do XNA (ele requer a criação de um usuário no XBOX Live) foi usada a biblioteca de rede de C# LidGren , que se mostrou muito eficiente, além de prática. Como o XNA possui somente física simples (praticamente só colision detection) foi necessário uma biblioteca externa para que a física espacial do jogo ficasse realista. Para isso foi usado o JigLibX, que é um porte pra C# da biblioteca de física JigLib que é em C++.

Para a modelagem 3D foi usado o modelador 3D Studio Max, cujos modelos podem ser exportados para o formato .X e .FBX que são os usados pelo XNA.

Programação

A seguir temos o diagrama de classes do projeto:

ClassDiagram1.png

Para a mudança de telas foi usando o padrão strategy, ao invez de usar um state machine que comumente é usado. Este padrão foi util pois deixou a mudança de telas bem organizada. O padrão singleton foi usado nas classes Config, GuiManager e Base, que são classes que em faz sentindo ter somente uma instância.

A idéia do sistema de rede foi baseado no sistema do Counter Strike: um computador cria o server e já inicia uma partida sozinho. Os outros computadores buscam na rede por servers criados e ao encontrar se conectam a ele e passam a integrar à partida. A qualquer momento um jogador pode entrar ou sair. O server tem o controle de todos os objetos do cenário (ou seja, controle da fisica) e da nave do jogador do server. A todo momento, cada client envia para o server a posiçao, a orientação, a velocidade linear e a velocidade angular para o server, para que este calcule a fisica e repasse o cenario atualizado para todos os clients. Os inputs nao sao enviados, pois como o calculo da fisica é influenciado pelo frame rate de cada pc, os resultados do input seriam diferentes em cada maquina e nao seria possivel uma sincronia.

O sistema de camera adotado foi de terceira pessoa , em que esta é posicionada atraz da nave. Para efeito de suavidade, a posição da camera não é definida atraz na nave, e sim o target da camera é definido atraz da nave, a camera a todo momento se descoloca em direção ao target com velocidade proporcional à distancia entre a camera o target.

O sistema de som e input são classes com somente metodos e variaveis estaticas, para que se obtenha acesso global e como são classes simples, não se considerou necessário a utilização do padrão singleton.

Divisão das Tarefas:

As tarefas para a concretização do projeto foram divididas de maneira equilibrada e ficou da seguinte maneira:

Bruno Cesar: sistema de som, jogabilidade (inputs) e sistema de GUI
Diogo de Albuquerque: sistema de rede ,fisica e estruturação do código
Felipe Correa: sistema de camera, jogabilidade
Pedro Cau: sistema de GUI, fisica e estruturação do código

Screenshots

screenshot1.jpg

Fig1. Tela de abertura do Sci Full dEX

screenshot2.jpg

Fig2. Inicio de uma partida

screenshot3.jpg

Fig3. O jogador passeando pelo cenario

screenshot4.jpg

Fig4. O jogador e uma nave inimiga em rede

Como baixar, compilar e rodar

O codigo do jogo esta salvo no repositorio do google code http://code.google.com/p/jogoxna/, e o endereço do SVN é https://jogoxna.googlecode.com/svn , onde o codigo fonte, os contents e as dependencias podem ser baixadas pelo programa de subversion.

Para compilar são necessario os seguintes programas: Microsoft Visual Studio 2005 (nao serve o 2008) com o Service Pack 1 do Visual Studio, e o kit de desenvolvimento do XNA Game Studio 2.0, que pode ser baixado neste link: download XNA Game Studio 2.0

Em seguida abra o arquivo de solution Game.sln , compile e rode.

Para jogar basta dar host game, digitar o nome do server.

Controles:
-Seta pra cima: roda pra baixo
-seta pra baixo: roda pra cima
-Seta pra esquerda: roda pra esquerda
-Seta pra direita: roda pra direita
-W: acelera
-S: reverse
-A: rola pra esquerda
-D: rola pra direita
-Espaço: atira
-Esc: sai e retorna ao menu

Conclusão

Durante a produção deste projeto foi possivel compreender, aplicar e aperfeiçoar os varios conceitos de programação orientada a objetos vistos durante o curso,e portanto se mostrou uma atividade muito produtiva. Alem disso, se mostrou criativa e rica, unindo os conceitos do curso com a diversão dos jogos de computador e à arte grafica.
Quando se trata de um programa grande como esse, torna-se imprescindível um codigo bem organizado e coeso, para que não se perca o controle sobre o andamento do projeto, e para isso que os padrões de projetos se tornarem extremamente importantes.
O projeto contou com várias dificuldades. Referente à OO foi escontrar a melhor estruturação das classes iniciais para que todo o projeto se tornasse bem organizado. Em relação às bibliotecas usadas, a inexistencia de documentação sobre a biblioteca de fisica JigLibX tornou sua aplicação mais dificil, sendo necessario a compreensão do codigo de um programa de exemplo que usa tal biblioteca. O sistema de rede em tempo real precisou ser muito bem pensado e organizado para que a comunicação entre o servidor e os clientes fosse possivel, alem de que encontrar os erros nesse processo gerou muita dor de cabeça.
Devido ao prazo de entrega do projeto e tempo livre escasso devido às outras materias, não possivel implementar no jogo tudo o que foi planejado então algumas funcionalidades irão ficar para as proximas versões, como as listadas a seguir:
-Display mostrando a vida do personagem, munição e os alvos
-Incluir os tiros no sistema de rede para que as naves possam ser atingidas
-Criar outras armas, naves e cenarios
-Tela de fim da partida com os resultados
-Tela de opções

A implementação destas funcionalidades ficou como um projeto futuro. E uma vez implementadas e o jogo se mostrar divertido, ele pode talvez ser portado ao XBox 360 e disponibilizado no XBox Live para download.

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