Programação Orientada a Objetos 2025 1 semestre

The Skyes – Jogo em C++ com ASCII Engine

Projeto desenvolvido para a disciplina de POO, explorando conceitos de encapsulamento, herança e polimorfismo em um jogo de aventura ASCII.

C++ POO ASCII Engine

Contexto do Projeto

The Skyes foi desenvolvido durante a disciplina de Programação Orientada a Objetos. O objetivo era aplicar conceitos de POO em um projeto prático, resultando em um jogo em C++ onde cada entidade (herói, inimigo, chave, baú, moedas) é modelada como uma classe independente. Para trabalhar com as sprites e os objetos de jogo, foi utilzada a Engine criada pelo professor Victor Oliveira.

Conceitos de POO na Prática

  • Encapsulamento: O herói controla internamente seus pontos de vida, usando métodos como damage(), isAlive() e getHP().
  • Herança: Todas as entidades herdam de ObjetoDeJogo, aproveitando atributos e comportamentos comuns.
  • Polimorfismo: Objetos estáticos e animados compartilham a mesma interface de desenho draw(), permitindo tratamento genérico no loop de renderização.

Exemplo de Encapsulamento (vida do herói)


if (hero.colideCom(inimigo) && podeLevarDano) {
    hero.damage();   
    podeLevarDano = false;
    danoCooldown = 60;
}
                        

Soluções Implementadas

  1. Câmera dinâmica: sempre centraliza no herói, limitada aos limites do mapa.
  2. HUD: corações representam vidas e a barra mostra o HP atual.
  3. Objetos interativos: chave abre o baú, criando progressão.
  4. Inimigos patrulhando: IA simples que se move entre dois limites.
  5. Cooldown de dano: evita perda instantânea de todas as vidas.

Câmera acompanhando o herói


cameraLin = hero.getPosL() - CAM_HEIGHT / 2;
cameraCol = hero.getPosC() - CAM_WIDTH / 2;

cameraLin = std::clamp(cameraLin, 3, mapa.getAltura() - CAM_HEIGHT - 3);
cameraCol = std::clamp(cameraCol, 3, mapa.getLarguraMax() - CAM_WIDTH - 3);

camera.moveTo(cameraLin, cameraCol);
                        

Resultados e Aprendizados

Com este projeto consegui consolidar:

  • Estruturação de código em C++ orientado a objetos
  • Uso de herança e polimorfismo para evitar duplicação de código
  • Encapsulamento para garantir consistência dos objetos
  • Aplicação prática de conceitos de jogos: câmera, colisão, HUD e progressão

Galeria do Projeto