Este repositório contém uma implementação do jogo Pong focada em Desacoplamento de Responsabilidades e Lógica de Colisão. Diferente de implementações simples em arquivo único, este projeto utiliza uma arquitetura baseada em classes especializadas para gerenciar o estado global, entradas de usuário, física e interface.
Linguagem: C++
Biblioteca Gráfica: Raylib (v5.0)
Ambiente de Desenvolvimento: VS Code (Template Starter V2)
Sistema de Build: Makefile
O projeto foi dividido em componentes lógicos para seguir os princípios de Responsabilidade Única (SRP):
LacoJogo (Game Engine): Centraliza o Game Loop, instanciando as entidades e coordenando as atualizações de física e renderização.
CollisionManager: Uma classe dedicada exclusivamente à lógica de física, gerenciando colisões entre bola, raquetes e bordas da janela.
KeyHandler: Abstração de entrada de hardware, separando os comandos do Player 1 (WASD) e Player 2 (Setas).
Bola & Retangulo: Entidades com seus próprios atributos de estado (posição, velocidade, hitbox).
Placar: Gerencia a persistência da pontuação e a renderização de texto na tela.
- Sistema de Colisão e Física
A lógica de colisão utiliza o conceito de Hitbox Dinâmica. A classe Bola atualiza suas bordas (superior, inferior, esquerda e direita) a cada frame, permitindo que o CollisionManager realize verificações precisas.
Inversão de Vetores: Ao colidir com as bordas superior/inferior ou com os jogadores, a bola inverte seus componentes de velocidade (velocidadeX ou velocidadeY).
- Gerenciamento de Memória e Referências
Para garantir que o CollisionManager pudesse manipular as entidades sem criar cópias desnecessárias na memória, utilizei a passagem de objetos por referência no construtor, garantindo performance e integridade dos dados durante o tempo de execução. 3. Sistema de Pontuação (Score Logic)
Quando a bola ultrapassa os limites laterais da janela:
O CollisionManager detecta qual lado foi atingido.
O Placar é incrementado.
A bola é reiniciada no centro da tela (640x360), invertendo a direção inicial para o próximo round.
Este projeto utiliza um Makefile para simplificar o processo de build.
Certifique-se de ter o compilador G++ e a Raylib configurados.
Abra a pasta do projeto no VS Code.
Utilize o atalho F5 (conforme configurado no template) ou execute o comando make no terminal para compilar.
O binário será gerado e executado automaticamente.
Controles:
Jogador 1 (Vermelho): Teclas W (Sobe) e S (Desce).
Jogador 2 (Azul): Teclas Seta para Cima e Seta para Baixo.