Skip to content

A simple PongClone uisng C and Raylib on a ECS Architecture

Notifications You must be signed in to change notification settings

travrei/PongECS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pong ECS com Raylib

Gif do Jogo

Um projeto clássico do jogo Pong desenvolvido em C puro com a biblioteca gráfica Raylib, mas com um diferencial importante: foi construído utilizando a arquitetura de software ECS (Entity Component System).

Este projeto foi um desafio pessoal para aprofundar conhecimentos em C e explorar padrões de arquitetura de alta performance comuns na indústria de jogos.


🏛️ Arquitetura: Entity Component System (ECS)

Em vez de usar uma abordagem tradicional orientada a objetos, este projeto foi estruturado em torno do padrão ECS para promover uma melhor separação de preocupações e otimização de cache.

  • Entities (Entidades): São apenas identificadores únicos (um int). Não possuem dados nem lógica.

  • Components (Componentes): São structs que contêm apenas dados puros, representando um aspecto de uma entidade. Por exemplo: CTransform (posição e tamanho), CVelocity (velocidade), CPlayerInput (teclas de controle). A associação é feita através de uma bitmask ComponentMask.

  • Systems (Sistemas): São funções puras que contêm toda a lógica do jogo. Cada sistema opera em um conjunto de entidades que possuem os componentes necessários. Por exemplo, o SMoviment atua em todas as entidades que têm os componentes TRANSFORM e VELOCITY.

  • World (Mundo): Uma struct central que armazena todos os componentes em arrays contíguos (SoA - Structure of Arrays), melhorando a localidade dos dados.

Essa abordagem torna o código mais modular, flexível e performático.


✨ Funcionalidades

  • Jogabilidade clássica de Pong para dois jogadores locais.
  • Controles por teclado e Gamepad.
  • Sistema de pontuação.
  • Efeitos sonoros para colisões e pontos.
  • Física de colisão entre a bola, os paddles e os limites do cenário.

🚀 Como Compilar e Executar

Este projeto utiliza um Makefile para simplificar o processo. Certifique-se de ter o gcc e a biblioteca raylib instalados.

# Clone o repositório
git clone https://github.com/travrei/PongECS.git
cd PongECS

# Compile o projeto
make

# Execute o jogo
make run

# Para limpar os ficheiros compilados
make clean

🛠️ Tecnologias Utilizadas

  • Linguagem: C
  • Biblioteca Gráfica e de Áudio: Raylib

🧠 Aprendizados e Desafios

Um dos maiores desafios deste projeto foi a implementação de um sistema de colisão preciso. A abordagem inicial usando funções prontas da biblioteca não oferecia o controle necessário sobre a direção da colisão, resultando em comportamentos fisicamente incorretos (como a bola alterar a sua velocidade vertical ao colidir horizontalmente com um paddle).

A solução foi desenvolver uma lógica de colisão personalizada, analisando pontos específicos na circunferência da bola. Este processo, embora desafiador, foi um exercício valioso em resolução de problemas e na compreensão mais profunda da física de jogos 2D, mas ainda usando os recursos que a biblioteca Raylib me oferece.

About

A simple PongClone uisng C and Raylib on a ECS Architecture

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published