Skip to content

Latest commit

 

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Reformulação do jogo de IP: Gisele Bündchen e as Forças do Mal

Este é um jogo arcade de rolagem lateral (side-scroller) desenvolvido inteiramente em C++ utilizando conceitos de Programação Orientada a Objetos (POO). O projeto renderiza o jogo diretamente no terminal, utilizando manipulação manual de buffer e captura de eventos de teclado em tempo real.

Projeto Original


📖 Sobre o Jogo

No papel da modelo Gisele Bündchen, o jogador deve desfilar por uma passarela perigosa de 700 metros, enfrentando sabotagens e tentando manter a elegância máxima. O jogo termina quando alcanças o final do desfile ou caso sofras penalidades excessivas causadas pelos obstáculos na passarela.

🍌 Mecânicas e Elementos do Jogo

  • Gisele Bündchen (G): A protagonista do desfile. Possui física de pulo integrada com gravidade e detecção de hitbox baseada em caixas delimitadoras, colisão por extremidades.
  • Sabotagens (Evite!):
    • Bananas (B): Fazem a Gisele tropeçar. Coletar 3 bananas resulta em fim de jogo. Além disso, cada banana colidida zera o contador de rosas acumuladas.
    • Câmeras (*): Representam os paparazzi inconvenientes. Coletar 3 câmeras resulta em fim de jogo. Ao colidir com uma câmera, a tela sofre um efeito de flash, piscando completamente e ocultando temporariamente os elementos visuais.
  • Coletáveis (Busque!):
    • Rosas (@): Aumentam a pontuação e consagram o prestígio na passarela. O número de rosas coletadas dita a qualidade e o tom do encerramento da tua carreira no menu final.

🛠️ Arquitetura do Projeto e POO

O projeto foi estruturado seguindo os pilares de POO, como Herança, Polimorfismo, Encapsulamento e Tratamento de Exceções.

📁 Estrutura do Projeto

.
├── 📂 src/                                   
│   ├── 📂 cenarios/                          # Pasta com classes de controle de interface e herança visual.
│   │   ├── 📄 tela.h                         # Arquivo base de manipulação do buffer de vídeo do terminal.
│   │   ├── 📄 telainicial.cpp                # Implementação do menu principal e instruções do jogo.
│   │   ├── 📄 telainicial.h                  # Definição da interface do tela inicial.
│   │   ├── 📄 telafinal.cpp                  # Processamento de pontuação e encerramentos baseados em performance.
│   │   └── 📄 telafinal.h                    # Definição da interface do tela final.
│   │
│   ├── 📂 coletaveis/                        # Pasta com os itens do mapa.
│   │   ├── 📄 coletavel.cpp                  # Implementação da classe base e gerador com distância mínima.
│   │   ├── 📄 coletavel.h                    # Classe abstrata base para todos os coletáveis.
│   │   ├── 📄 banana.cpp                     # Lógica e efeito de penalidade da Banana (zera rosas).
│   │   ├── 📄 banana.h                       # Subclasse que representa o obstáculo Banana.
│   │   ├── 📄 camera.cpp                     # Mecânica do flash dos paparazzi e incremento do contador.
│   │   ├── 📄 camera.h                       # Subclasse que representa o obstáculo Câmara.
│   │   ├── 📄 rosa.cpp                       # Lógica de pontuação positiva ao coletar flores.
│   │   └── 📄 rosa.h                         # Subclasse que representa o item Rosa.
│   │
│   ├── 📂 personagens/                       # Pasta com as classes de lógica e física da personagem principal.
│   │   ├── 📄 gisele.cpp                     # Implementação da física vetorial, gravidade e limites do chão.
│   │   └── 📄 gisele.h                       # Classe da protagonista Gisele e suas propriedades.
│   │
│   └── 📄 gerenciadorinputs.h                # Captura assíncrona e não-bloqueante de teclas (termios POSIX).
│
├── ⚙️ .gitignore                          
├── 📄 main.cpp                               # Loop principal do jogo, gerenciamento de FPS e lógica de estados.
├── ⚙️ Makefile                               # Script automatizado para compilação (`make` e `make clean`).
└── 📝 README.md                              # Documentação completa do projeto.

🚀 Compilação e Execução

Pré-requisitos

  • Ambiente operacional baseado em Linux/UNIX (ou subsistemas como o WSL no Windows) devido à dependência das funções POSIX de terminal (termios.h).

  • Compilador GCC/G++ instalado com suporte para C++11 ou superior.

  • Ferramenta utilitária Make.


Instruções de reprodutibilidade

Passo 1: Clone o repositório no vscode

git clone https://github.com/gabrielbelo2007/Object_Oriented-Project

Passo 2: Abra a pasta do arquivo:

cd Object_Oriented-Project

Passo 3: Compile o projeto usando o MakeFile disponibilizado:

make

Passo 4: Execute o jogo através do arquivo app

./app

Passo 5: Remova os fichários binários e limpe o diretório após jogar:

make clean

🖥️ Conceitos de OO:

Classes Abstratas

  • coletavel.h tem aplicarEfeito() = 0, tornando-a abstrata. Tela tem init() virtual (não puro, mas sobrescrito pelas subclasses). Rosa, Banana, Camera e as telas herdam e especializam o comportamento.

Encapsulamento

  • Utilização de modificadores de acesso como protected e private nas classes principais.

Herança e Polimorfismo

  • O vetor std::vector<Coletavel*> no main guarda objetos de tipos diferentes (Rosa, Banana, Camera) através do ponteiro para a base. Quando item->aplicarEfeito() é chamado, o C++ resolve em tempo de execução qual implementação executar.

Sobrecarga de Operador

  • O operador << é sobrecarregado em coletavel.cpp para permitir cout << coletavel. O construtor de Gisele usa parâmetros com valor padrão, que é uma forma de sobrecarga implícita.

Tratamento de Exceções

  • ErroPosicaoIndisponivel é lançada em geradorColetavel() quando não é possível encontrar posição válida. Herda de runtime_error.

Estruturas STL

  • std::map<string, int> para os contadores.
  • std::vector<Coletavel*> para a lista de ativos.
  • std::vector<int>& para posições ocupadas.
  • std::mt19937 com std::uniform_int_distribution para geração aleatória.
  • vector<vector<char>> para armazenar buffer de caracteres.

💻 Membros participantes:

Arthur Luz
Arthur Luz
Gabriel Belo
Gabriel Belo
João Pedro
João Pedro
Falcão
Luiz Falcão

About

Reformulação de jogo da disciplina de IP, em C++, utilizando conceitos de Programação Orientada a Objetos e Estrutura de Dados.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages