Computação Gráfica
Trabalho II - 2020/2

INTRODUÇÃO
Este trabalho prático da disciplina de Fundamentos de Computação Gráfica, que deverá ser feito em dupla ou individualmente, consiste em desenvolver um jogo usando OpenGL.
Considere que este jogo é uma versão melhorada do jogo Asteróides (https://www.youtube.com/watch?v=WYSupJ5r2zo).
Neste jogo o usuário deverá manipular um Disparador de Tiros com o objetivo de eliminar Naves Inimigas que estão ao seu redor e podem destruí-lo.
O
Disparador pode andar pra frente e para trás e girar para esquerda e direita ao redor de seu centro. Além disto, o disparador pode disparar tiros para atingir os inimigos.
A representação visual deste disparador deve ser semelhante à nave da figura a seguir.

Figura -  Exemplo de Disparador

As Naves Inimigas devem ser representadas por objetos semelhantes aos da figura a seguir.


Figura -  Exemplo de Naves Inimigas

Não serão aceitos trabalhos que não sejam genéricos quanto ao número de objetos gráficos manipulados.

CENÁRIO BÁSICO DO JOGO

Quando o jogo começa o usuário tem três "vidas", de maneira que se o disparador for atingido por uma nave inimiga, ou por um tiro, o jogo ainda pode continuar.
Um exemplo do cenário do jogo é apresentado na figura a seguir.

Figura -  Exemplo de Cenário do Jogo

DETALHAMENTO
O Disparador deve ser manipulado pelo usuário com as setas para esquerda, para direita, e para cima. Uma sugestão de como fazer o movimento pode ser visto nesta página.
O Disparador não pode passar dos limites laterais da janela.
Além de movimentar o disparador, deve ser possível atirar cada vez que o usuário pressionar a tecla ESPAÇO. Deve ser possível dar até 10 tiros em sequência, sem ter que esperar o tiro anterior acabar.
O tiro deve ser disparado na direção "para frente" do disparador.
As naves inimigas atiram contra o Disparador da mesma maneira, mas de forma automática e aleatória.

É necessário que haja, no mínimo, quatro modelos distintos de Naves. Os modelos devem ser armazenados apenas uma vez, e instanciados várias vezes. A descrição de cada modelo deve ser lidas de arquivos, no formato descrito aqui. A quantidade de modelos e de instâncias(naves) deve ser genérica e facilmente alterável, modificando-se apenas uma variáveis que determine a quantidade de naves.

O movimento das naves deve ser gerado de forma automática, mas eles devem seguir a trajetória de uma curva de Bèzier. A curva de Bèzier deve cada nave ser gerada de tempos em tempos, acrescentando mais um ponto de controle a cada momento.

Quando um tiro do Disparador atinge uma Nave Inimiga, ela desaparece da tela e não retorna ao jogo.
O jogador, por sua vez, perde uma "vida", como se tivesse sido atingido por um tiro.

No início do jogo as naves devem ser posicionadas de maneira aleatória na tela, sem que haja colisão entre elas.


O jogo termina quando todos as Naves
Inimigas forem destruídas, ou quando as vidas do jogador acabarem. Se o jogador conseguir destruir todas as Naves, uma mensagem avisando que ele ganhou o jogo deve ser exibida e a execução do programa é encerrada.

Para calcular a intersecção dos tiros com os objetos e dos objetos entre si, pode ser usado o envelope de cada um (x e y mínimo e máximo).

Deve ser possível sair do jogo a qualquer momento pressionando a tecla ESC.

Modelos de Objetos
Os modelos das Naves são de livre escolha, desde que sejam formados por objetos compostos por um conjunto de quadrados coloridos. A descrição destes objetos deve ser feita por meio de arquivos texto, conforme o formato a seguir.

#CORES
4
1 0 0 0  (definição da cor 1 - PRETO)
2 255 0 0 
(definição da cor 2 - VERMELHO)
3 0 255 0  (definição da cor 3 - VERDE)
4 255 255 255  (definição da cor 4 - BRANCO)

#OBJETO
5 4  (número de linhas e colunas do objeto)
1 1 1 1
1 3 3 1
1 3 3 1
2 2 2 2
1 1 1 1


Entrega
FIM.