Laboratório 8

No jogo Asteroids o jogador pilota uma nave e deve evitar destruir asteróides que aparecem na tela, enquanto desvia deles. O motor da nave sempre a acelera na direção na qual seu nariz está apontando, e sem aceleração a nave sempre mantém sua velocidade atual. Asteróides grandes se quebram em asteróides menores quando são atingidos:

Faça as questões 3 a 6 do laboratório 7, depois continue com o que é pedido abaixo.

Vamos desenhar a nave pegando os pontos (5, 0), (-3, -4) e (-3, 4), fazendo sua rotação usando o ângulo da direção da nave, depois somando os pontos resultantes à posição da nave, e os três pontos dados por essa soma dão os cantos do triângulo.

1. Implemente a função rotacao que recebe um ponteiro para um struct Ponto e um ângulo em radianos, e modifica a estrutura para efetuar a rotação. O novo ponto é dado por (x * cos(dir) - y * sin(dir), y * cos(dir) + x * sin(dir)), onde x e y são as coordenadas originais do ponto. A função não retornada nada.

2. Implemente a função translacao que recebe dois ponteiros para struct Ponto e soma as coordenadas do segundo às coordenadas do primeiro, modificando o primeiro ponto.

3. Quando o jogador está apertando a seta para a esquerda (tecla Left) a direção diminui de PI radianos por segundo, quando está apertando a seta para a direita a direção aumenta em PI radianos por segundo. Quando ele está apertando a tecla Up a velocidade aumenta em cem pixels por segundo na direção para onde a nave está apontando (o seno da direção dá o quanto o componente vertical muda e o conseno da direção quanto o componente vertical muda). Implemente o código para desenhar e animar a nave. Do mesmo modo que um asteróide, quando a nave sai da tela ela aparece no canto oposto. Use as funções rotacao e translacao implementadas acima para achar os pontos para desenhar a nave.

4. Defina um vetor dinâmico para armazenar os tiros. Um tiro é descrito apenas pela sua posição. Quando um tiro é criado, sua posição é a do “nariz” da nave, o componente horizontal de sua velocidade é de 100*cos(dir) mais a velocidade horizontal da nave, e o componente vertical de sua velocidade é de 100*sin(dir) mais a velocidade vertical da nave. Um novo tiro é disparado toda vez que o jogador solta a tecla Space. Implemente o código para disparar, animar e desenhar os tiros. Um tiro é um círculo de raio 1.

5. Um tiro colidiu com um asteróide se a distância entre seu centro e o centro do asteróide é menor que o raio do asteróide. Quando um tiro colide com um asteróide de tamanho 1 ou 2 o asteróide é destruído, quando colide com um asteróide de tamanho 3 ele se quebra em dois asteróides de tamanho 1 que voam em direções opostas, quando colide com um asteróide de tamanho 4 ele se quebra em um asteróide de tamanho 2 e um de tamanho 1. O tiro sempre é destruído. Implemente a verificação e os efeitos da colisão entre tiros e asteróides, como parte da função tique.

6. A nave colide com um asteróide quando a distância entre a posição da nave e o centro do asteróide é menor que o raio do asteróide mais cinco. A colisão da nave com o asteróide destrói a nave.


Última Atualização: 2016-05-18 10:58