De modo a aplicar os conceitos apresentados anteriormente, vamos desenvolver um pequeno jogo de naves, um clone do Xenon. Vamos tentar com este simples programa aplicar os conceitos de herança, encapsulamento, polimorfismo e composição. Bem como fazer uso de todas as características da linguagem e de genéricos.
Criar jogos é um processo que envolve muitos conhecimentos, mais dos que os que foram apresentados até ao momento, de tal forma que muito do código que estará presente no projecto não estará ligado directamente ao projecto mas será necessário para que as nossas classes funcionem. Não faz parte deste tutorial ensinar como desenvolver jogos, motores de jogos, criação de Sprites e outros temas associados ao desenvolvimento de jogos. Dessa forma será explicado, nesta página, apenas o código relevante à aprendizagem da linguagem Java.
Para facilitar o nosso desenvolvimento iremos usar uma biblioteca chamada Slick2D.
Pretendemos desenvolver um jogo de naves, shut'em up, onde o jogador controla uma nave e vai eliminando os vários inimigos que surgem. Por cada inimigo eliminado o jogador recebe uma quantidade de pontos. Certos inimigos podem oferecer prémios que permite aumentar as capacidades da nave que o jogador controla.
O desenvolvimento do nosso jogo foca a aplicação de POO e da tecnologia Java e não a correcta implementação de um jogo deste tipo. Existirão várias escolhas que faremos que não oferecem vantagens a nível de performance do jogo ou de facilidade de edição (ex: o mapa do jogo) mas que são as mais correctas tendo em conta os conceitos a aprender ou não são suficientemente relevantes para serem implementadas de uma forma mais correcta e mais morosa.
Deverá ser tido em conta que o objectivo principal deste exemplo é a aplicação correcta dos conceitos de POO e não a forma de optimizar aplicações feitas em Java nem a forma correcta de implementar um jogo 2D de naves.
O nosso jogador controla uma nave, a uma velocidade pré-determinada, acumula pontos ao matar inimigos, pode danificar os inimigos com os tiros de dispara da sua arma e colidindo com os inimigos. Ao colidir com inimigos ou com tiros de inimigos, a energia da nave irá sendo reduzida, até que ao chegar a zero, a nave será destruída.
O jogador terá à sua disposição um valor limitado de naves com que inicia o jogo, quando gastar todas as naves por estas terem sido destruídas, o jogo termina.
Caso o jogador consiga levar a nave até ao fim do nível, será transportado para no nível seguinte ou, caso não existam mais níveis, o jogo terminará.
Durante a execução do nível, vários inimigos podem surgir com o intuito de destruir a nave. Todos estes inimigos terão uma capacidade de resistência, um número de pontos que serão atribuídos à nave quando os inimigos morrem, e um movimento que irá fazer com que se desloquem pelo mapa. Alguns inimigos poderão disparar se possuírem armas.
Existem também grupos de inimigos que se movem em conjunto e que, caso todo o grupo seja destruído pelo jogador, poderão oferecer um prémio.
Os prémios podem afectar a velocidade da nave, oferecer vidas, tipos de tiros diferentes ou componentes para adicionar à nave e aumentar o poder de fogo da mesma.
Inimigos:
Prémios:
Movimento:
Tipos de Tiros:
Componentes para a Nave:
Slick2D é uma biblioteca que permite o desenvolvimento de jogos em Java com utilização de OpenGL através da biblioteca LWJGL. A biblioteca Slick2D não é mais que um wrapper em torno da biblioteca LWJGL, permitindo uma utilização facilitada e uma API amigável para o desenvolvimento de jogos em Java.
<< Genéricos :: Início :: Interfaces Gráficas >>