Giter Club home page Giter Club logo

cefet-games-navinha's Introduction

cefet-games-navinha

Um jogo de navinhas destruindo asteróides.

Descrição

Este é um jogo em que se controla uma nave que deve atirar nos asteróides... para sempre. E sem contar pontos. Com uma navinha imortal.

Funcionamento

Atualmente, o jogo está funcionando mas nenhum objeto colide com o outro. Esta atividade prática consiste em implementar os métodos que verificam se houve colisão entre objetos.

Os asteróides vão indo na direção da nave, que deve destruí-los ou desviar deles. Quando um asteróide é destruído ou sai da tela, ele é "reciclado": seu objeto na RAM é reaproveitado, recebendo uma nova forma, tamanho e posição acima da tela. Quando um asteróide atinge a nave do jogador ele também é reciclado.

Um tiro é adicionado a uma lista (Array) quando disparado e removido dela quando (i) ele sai da tela ou (ii) ele atinge um asteróide.

Detalhes da Implementação

Não foram usadas imagens neste jogo, portanto, não foi usada uma SpriteBatch. Todos os objetos estão sendo desenhados como primitivas do OpenGL: pontos, polígonos, linhas etc.

A LibGDX possui o ShapeRenderer que expõe funções de desenho dessas primitivas.

Um exemplo de uso do ShapeRenderer para desenhar um tiro a laser:

public class LaserShot {
  //...
  public void render(ShapeRenderer renderer) {
    renderer.setColor(Color.PINK);
    renderer.identity();
    renderer.translate(position.x, position.y, 0);
    renderer.rect(-WIDTH / 2F, -HEIGHT / 2F, WIDTH, HEIGHT);
  }
  //...
}

Controles

Os controles implementados são:

  • , : vai para esquerda e direita
  • d: ativa/destiva modo de debug
    • Quando em debug, os colliders de cada entidade são desenhados
  • Espaço: atira usando a arma corrente
  • Tab: troca para a próxima arma
  • +, -: acelera/desacelera as estrelinhas
  • Esc: sai do jogo

Atividade

Esta atividade está dividida em 2 exercícios e 1 desafio. Você deve implementar, na classe Collision.java, os métodos para verificar a colisão de círculo com círculo (boolean circlesOverlap(Circle c1, Circle c2)) e retângulo com retângulo (boolean rectsOverlap(Rectangle r1, Rectangle r2)), sem usar a implementação da própria LibGDX para tal (rect1.overlaps(rect2) e circle1.overlaps(circle2)).

A classe Collision.java está assim:

public class Collision {
  public static final boolean circlesOverlap(Circle c1, Circle c2) {
    return false;
  }
  public static final boolean rectsOverlap(Rectangle r1, Rectangle r2) {
    return false;
  }
}

Lembre-se de que é interessante os métodos de vetores já implementados em Vector2 (e Vector3) da LibGDX. Veja a documentação do Vector2.

Exercício 1

Para calcular a colisão entre alguns objetos, implemente na classe Collision o método circlesOverlap considerando:

  1. Círculo vs círculo
    • Colidem se a distância entre eles é menor que a soma de seus raios
    • Nota: tente fazer essa verificação sem usar a operação de radiciação

Exercício 2

Agora, implemente o método rectsOverlap considerando:

  1. Retângulo vs retângulo
    • Colidem se todos os eixos (x, y, z?) colidem
    • Um eixo está em colisão se max<sub>1</sub> &gte; min<sub>2</sub> e min<sub>1</sub> &lte; max<sub>1

Desafio 1

Crie um método e o implemente (em Collision.java) que verifique se houve colisão entre um círculo e um retângulo. Um caso de uso seria a colisão entre o tiro laserShot e um asteróide.

Para tanto, você deve também alterar LaserShot.java para usar esse novo método de detecção de colisão. Use a funcionalidade de debug do jogo para verificar se está funcionando.

cefet-games-navinha's People

Contributors

fegemo avatar rafaelbaarbosa avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.