Computação Gráfica
Trabalho I - 2019/1

INTRODUÇÃO
Este primeiro trabalho prático da disciplina de Computação Gráfica, que deverá ser feito em dupla ou individualmente, consiste em desenvolver um jogo usando OpenGL.
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
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. 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.

É 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.

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 retrona ao jogo. Se
uma Nave colide com o Disparador o jogo acaba, com derrota para o jogador.

No início do jogo as naves devem ser posicionadas de maneira aleatória na nela, 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 todass 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.