MAB 240 - Computação II

Laboratórios 2 e 3 - 14/09/2016 e 21/09/2016

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.

Enviando

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