8 de fev de 2016

Um jogo em JavaFX

Há uns meses atrás eu falei sobre jogos para JavaFX e prometi me aprofundar no tema, mas infelizmente o tempo está muito curto e resolvi encurtar a série postando a tradução de um artigo que escrevi para meu blog em inglês, o FXApps: Stacker Game in JavaFX.

O jogo Stacker


O objetivo do jogo Stacker (empilhador)é chegar até o topo empilhando tijolinhos. Em shoppings, há uma versão desse jogo na qual quando se chega no topo você ganha brindes. Vejam esse vídeo do jogo que eu achei no youtube:



O jogo que vou mostrar aqui é um pouco diferente. Iremos amontoar somente um retângulo, mas o retângulo pode estar próximo ao retângulo de baixo, não exatamente no topo dele. O número de retângulos para preencher e a velocidade vão aumentar de acordo com o nível do jogo.


O jogo em Processing 

O jogo foi anteriormente criado em Processing, mas a maioria do código eu pude reusar na versão em JavaFX!
Você pode encontrar a versão do jogo em processing no meu github.
Stacker


Criando jogos em JavaFX


Como já falei em uma postagem anterior, JavaFX é uma  boa plataforma para jogos desde sua versão 1.0. Existia até um blog específico para jogos com JavaFX Script e temos também alguns exemplos que podem ser baixados no site da Oracle. 
Como já sabemos, JavaFX tem todos os recursos para criamos jogos: animações, detecção de colisão, efeitos especiais, tocar sons, etc.

Nossa implementação do Stacker Game


O jogo é basicamente baseado na atualização de uma matriz booleana e na leitura da mesma para criar uma representação visual. Quando o usuário clica no jogo, nós fazer um loop na matriz para verificar se a linha anterior é true ou se o bloco atual (o que se mexe) está adjacente a um bloco na linha anterior.
As duas classes mais importantes no nosso programa é a GameEngine  e Game em sí. A classe game engine é responsável em fazer o jogo à vida, pois ela irá fazer o jogo atualizar a tela numa determinada frequência e fazer ele se desenhar.
O jogo é responsabilizado a desenhar e atualizar o cenário de acordo com o tempo e a entrada do usuário. Aqui está o código dessas duas classes:

Essas classes não fazem nada! Precisamos criar as classes concretas, então criamos a classe StackerGame que contém a matriz que representa o jogo e desenhará a grade e os retângulos de acordo com o tempo, nível e a entrada do usuário.
A lógica do jogo é basicamente mover um booleano na matriz e ajustar isso qunado o usuário clica. Se o clique do usuário foi feito quando o retângulo tem um bloco abaixo ou adjancente, o jogo vai continuar. Se não, iremos chamar o fim do jogo e quando o usuário clicar again, o jogo vai recomeçar. Note que a pontua;áo do jogo é maior quando o usuário faz uma pilha perfeita e menor se o usuário faz a pilha usando um bloco adjacente.O jogo é desenhado em um canvas, que facilita o controle no nosso caso(que estamos vindo do Processing!).
Notem que nós expomos algumas variáveis usando propriedade JaavaFX. Essas propriedades são usadas em nossa aplicação principal para mostrar a pontuação, nível e eventualmente o label de fim de jogo. Veja o código dessas duas classes:

Por fim, veja o jogo em ação:

Nenhum comentário:

Postar um comentário