Este pacote de protótipos demonstra o processo de contrução de um jogo de maze em python, usando a biblioteca PPlay, disponível em:

http://www2.ic.uff.br/pplay/


IT CAME FROM THE CAVE

O objetivo é recriar um jogo chamado It Came From The Cave, feito originalmente para o evento Global Game Jam 2009 que, ocorreu na Universidade Federal Fluminense, além de vários outros lugares do mundo simultaneamente.

No jogo original, o personagem entra numa caverna e, devido a algum fenômeno natural, a entrada da caverna desaba, deixando o personagem preso dentro dela. Para a sorte do personagem, ele tem explosivos suficientes para reabrir essa entrada, mas isso leva 4 minutos. No entanto, esses explosivos deixa a caverna inteira instável o suficiente para por tudo abaixo em aproximadamente um minuto. Além disso, dentro da caverna, existem monstros não estudados pela humanidade que comem qualquer coisa que estiverem em seu caminho, inclusive seres de sua própria espécie, ainda que a carne do personagem chame mais a sua atenção. O desafio é sobreviver o máximo de tempo possível, lembrando que a única arma do personagem contra os monstros é fazê-los comer uns aos outros.


JOGABILIDADE

- O personagem pode ser movimentado a partir dos direcionais (esquerda, direita, baixo e cima).
- A tecla P pausa o jogo.
- A tecla Esc sai do jogo imediatamente.



PROTÓTIPOS

Para direcionar a produção do jogo e, servir de exemplo para aqueles que estão sendo introduzidos à produção de jogos e à programação de software, fizemos vários protótipos, mostrando o nosso passo à passo. 

Por serem direcionados ao público brasileiro, os programas foram desenvolvidos totalmente em Português do Brasil. Os programas não usam classes e nem sequer funções para ser mais familiar à iniciantes. Além disso, quase todos os comandos foram documentados de forma que seja possível entender o que eles fazem.


1. Movimento

Este protótipo é a base do projeto. Ele mostra como se faz um jogo em que o personagem se movimenta pra qualquer canto da janela. O personagem pode andar e parar, a partir de uso de Sprites pré-carregados.


2. Tiles

Neste protótipo, o personagem fica no centro da tela e anda por um mapa (maze) gerado de forma pré-determinada. O gerador de mapas aleatório foi bastante simplificado, gerando bordas, o local onde o personagem inicia e poucos detalhes. Os sprites do terreno são pré-carregados e o GameLoop renderiza várias cópias desses sprites de acordo com o terreno gerado e a posição do personagem.


3. Colisão

Neste protótipo, o personagem não poderá mais andar por cima de obstáculos. Devido ao formato de alguns Sprites produzidos e à propriedades intrínsicas de mazes, a colisão foi implementada sem utilizar recursos do PPlay.


4. Tempo

Este protótipo mostra um contador de tempo no canto da tela que começa em 5 minutos e desaparece quando esse tempo termina. O jogo pode ser pausado (tecla P), o que impede o personagem de se movimentar e para o contador.


5. Mecânica Básica

Este protótipo adiciona as condições básicas que transforma o protótipo anterior em algo que pode se considerar jogo. Neste jogo, o personagem deve chegar na saída antes de 5 minutos, sendo que a saída é liberada apenas quando falta um minuto para terminar o tempo. Portanto, a primeira mudança é a aplicação de estados (preparação do jogo, o jogo em si, vitória e derrota), além de condições de vitória (chegar na saída antes do tempo acabar) e derrota (em 5 minutos, quando o contador chega ao zero). Além disso, o jogo permite a criação de uma nova partida após uma vitória ou derrota, caso o usuário aperte N.

Para a aplicação dessas mudanças, foram feitas várias alterações nas lógicas de geração de mapas, colisão, renderização e até mesmo o cálculo do tempo que tinham sido codificados para os protótipos anteriores. Além disso, a geração de mapas aleatório foi movida para dentro do estado "ESTADO_PREPARANDO_JOGO".


6. Inteligência Artificial

Este protótipo adiciona a inteligência artificial no jogo e, consequentemente, uma nova condição de derrota (colisão com algum inimigo). A posição dos inimigos e seus geradores são armazenados em listas. 

Em termos de código, as mudanças foram as seguintes: O gerador de mapas foi alterado para armazenar a posição dos geradores e gerar alguns inimigos no mapa. A física contém a detecção de colisão entre o personagem e os inimigos, a colisão entre inimigos e remoção daqueles que colidiram. A seção de IA, adicionado após a Física, determina a próxima posição de cada inimigo, alteração da frequência da geração de monstros, ativação de novos geradores e se cada gerador pode gerar novos inimigos ou não. A renderização renderiza todos inimigos.


7. Pontuação

Este protótipo adiciona uma pontuação ao usuário. Para cada monstro morto, o usuário ganha 1 ponto. A pontuação é mostrada no canto direito inferior da tela. No final de uma partida, escreve-se e mostra na tela a pontuação recorde.