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.
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.
- 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.
- Bananas (
- 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.
- Rosas (
O projeto foi estruturado seguindo os pilares de POO, como Herança, Polimorfismo, Encapsulamento e Tratamento de Exceções.
.
├── 📂 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.
-
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.
Passo 1: Clone o repositório no vscode
git clone https://github.com/gabrielbelo2007/Object_Oriented-ProjectPasso 2: Abra a pasta do arquivo:
cd Object_Oriented-ProjectPasso 3: Compile o projeto usando o MakeFile disponibilizado:
makePasso 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 cleanClasses Abstratas
coletavel.htemaplicarEfeito() = 0, tornando-a abstrata. Tela teminit()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. Quandoitem->aplicarEfeito()é chamado, o C++ resolve em tempo de execução qual implementação executar.
Sobrecarga de Operador
- O operador
<<é sobrecarregado emcoletavel.cpppara permitircout << 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 emgeradorColetavel()quando não é possível encontrar posição válida. Herda deruntime_error.
Estruturas STL
std::map<string, int>para os contadores.std::vector<Coletavel*>para a lista de ativos.std::vector<int>¶ posições ocupadas.std::mt19937comstd::uniform_int_distributionpara geração aleatória.vector<vector<char>>para armazenar buffer de caracteres.
|
Arthur Luz |
Gabriel Belo |
João Pedro |
Luiz Falcão |