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 chamada Jogo
. Copie os arquivos com as cartelas de sprites da nave (naves.png
) e dos asteróides (asteroids.png
) para a pasta principal do projeto.
2. Implemente os métodos getTitulo
, getLargura
, getAltura
, tique
, tecla
e desenhar
na classe Jogo
. Esses três últimos terão um corpo vazio por enquanto.
3. Defina uma classe Asteroide
para representar um asteróide. Essa classe deve ter as coordenadas do asteróide, seu tamanho (1, 2, 3 ou 4), sua cor, os componentes horizontal e vertical de sua velocidade, e sua velocidade de rotação.
4. O jogo começa com 6 asteróides com tamanhos, cores, posições e velocidades aleatórias (a velocidade linear, em pixels por segundo, é um número aleatório entre 0
e 300
, a velocidade de rotação, em radianos por segundo, é um número aleatório entre 0
e 2*Math.PI
). Cada asteróide é recortado da cartela asteroids.png
, você vai reparar que cada tipo de asteróide mostrado na cartela tem quatro tamanhos. Escolha o tipo de cada asteróide aleatoriamente, para ter mais variedade.
5. Implemente os métodos para desenhar e animar os asteróides. Não se esqueça de chamá-los a partir dos métodos desenhar
e tique
da classe Jogo
. Quando um asteróide sai da tela, ele reaparece no canto oposto ao qual ele saiu, mantendo a mesma velocidade.
6. Defina uma classe Nave
para representar a nave, com as coordenadas, os componentes horizontal e vertical de sua velocidade (em pixels por segundo), o ângulo de sua direção no sentido horário (em radianos), e um flag (um booleano) que indica se o motor da nave está ligado ou não. A nave começa no centro da tela, com velocidade 0 e direção 0, e o motor desligado.
7. Implemente o método para desenhar a nave, recortando o sprite da cartela nave.png
. O sprite para nave com motor desligado está nas coordenadas (70,0)
, e com o motor ligado nas coordenadas (135,0)
. O tamanho da nave é sempre 50
pixels de largura por 60
de altura.
8. 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 coseno da direção quanto o componente horizontal muda). Implemente o código para animar a nave, chamando ele a partir do método tique
da classe Jogo
. Do mesmo modo que um asteróide, quando a nave sai da tela ela aparece no canto oposto.
9. Defina um classe Tiro
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.
10. 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.
11. 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.
12. 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 os Laboratórios 2 e 3, enviando um arquivo .zip
contendo todos os arquivos .java
do seu projeto. O prazo para envio é terça-feira, dia 04/10/2016.
Última Atualização: 2016-12-09 11:49