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:
1. Crie um novo projeto, no Eclipse ou BlueJ, para o jogo, depois feche
o Eclipse ou BlueJ. Baixe os arquivos .java do motor de jogo e
copie eles para a pasta do seu projeto (no Eclipse ela pode ser uma pasta src
dentro da pasta do projeto, a
depender de como ele foi criado). Reabra o Eclipse ou BlueJ, os arquivos do projeto
devem estar lá. Crie uma classe principal que implementa a interface Jogo
.
2. Defina uma classe para representar um asteróide. Essa classe deve ter as coordenadas do asteróide, seu tamanho (1, 2, 3 ou 4), sua cor e os componentes horizontal e vertical de sua velocidade.
3. O jogo começa com 6 asteróides com tamanhos, cores, posições e velocidades aleatórias. Cada asteróide é desenhado por um círculo com diâmetro de dez pixels para cada unidade de tamanho. Quando um asteróide sai da tela ele aparece no canto oposto, mantendo a mesma velocidade. Implemente o código para desenhar e animar os asteróides.
4. Defina uma classe para representar a nave, com a posição, os componentes horizontal e vertical de sua velocidade, e o ângulo de sua direção no sentido horário (em radianos). A nave começa no centro da tela, com velocidade 0 e direção 0.
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, e depois somando os pontos
resultantes à posição da nave: os três pontos dados
por essa soma dão os cantos do triângulo.
5. Defina uma classe Ponto
para representar um ponto dadas
suas coordenadas x
e y
(de tipo double
).
Implemente um método rotacao
que faz a rotação desse ponto
dado um ângulo dir
em radianos. A nova coordenada x
é
x * Math.cos(dir) - y * Math.sin(dir)
, e a nova coordenada y
é y * Math.cos(dir) + x * Math.sin(dir)
. Use essa classe para poder
implementar o método desenhar
da nave.
6. Quando o jogador está apertando a seta para a esquerda (tecla left
)
a direção diminui em Math.PI
radianos por segundo, quando está apertando
a seta para a direita (tecla right
) a direção aumenta em Math.PI
radianos por segundo.
Quando ele está apertando a seta para cima (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 animar a nave. Do mesmo
modo que um asteróide, quando a nave sai da tela ela aparece no canto oposto.
7. Defina um classe para representar um tiro. Ele é descrito apenas pela
sua posição e velocidade, e desenhado como um círculo de raio 1. Quando um tiro é criado,
sua posição é a do “nariz” da nave, o componente horizontal de sua velocidade é
de 100*Math.cos(dir)
mais a velocidade horizontal da nave, e o componente vertical de sua
velocidade é de 100*Math.sin(dir)
mais a velocidade vertical da nave. Um novo
tiro é disparado toda vez que o jogador solta a tecla de espaço. Implemente
o código para disparar, animar e desenhar os tiros.
8. 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 um tiro colide com um asteróide de tamanho 3 o asteróide se quebra em dois asteróides de tamanho 1 que voam em direções opostas. Quando um tiro colide com um asteróide de tamanho 4 o asteróide se quebra em um asteróide de tamanho 2 e um de tamanho 1. O tiro sempre é destruído nessa colisão. Implemente a verificação e os efeitos da colisão entre tiros e asteróides.
9. 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 5. A colisão da nave com o asteróide destrói a nave e o asteróide.
10. O jogador começa com 3 vidas. Quando a nave é destruída, se o contador de vidas já chegou a zero o jogo termina, mostrando a mensagem “GAME OVER” e mantendo os asteróides se movendo. Se o contador não chegou a zero ele diminui em 1 e uma nova nave aparece no centro da tela, com velocidade e direção 0.
Use esse link para enviar o Laboratório 4. O prazo para envio é quarta-feira, dia 02/06/2016.
Última Atualização: 2016-05-18 10:58