Hub modular de jogos feito com Raylib e C, compilado para WebAssembly para rodar no navegador.
core/ → Engine: menu, state machine, loop, frame overlay
games/ → Módulos de jogos (plugáveis)
assets/ → Assets compartilhados e por jogo
lib/ → raylib (nativa + wasm)
platform/ → HTML shell para Emscripten
web/ → Saída WASM (deploy)
- Canvas (browser): Adapta-se ao viewport (960×720 padrão)
- Jogo (interno): Cada jogo define sua própria resolução
- Bordas: Mostram nome do projeto, controles, créditos
| Jogo | Resolução | Orientação | Descrição |
|---|---|---|---|
| Pong | 640×480 | Horizontal | Pong clássico — Player vs CPU |
| Crappybird | 600×600 | Quadrado | Flappy bird clone com skins desbloqueáveis |
| snaCke | 600×600 | Quadrado | Snake com maçã, uva e laranja |
| teCtris | 300×600 | Vertical | Tetris com 8 peças (incluindo Q rara) |
| Ferramenta | Para quê |
|---|---|
| GCC / Make | Compilar C (Linux/macOS) ou MinGW (Windows) |
| Emscripten SDK | Compilar para WASM |
| Git | Controle de versão |
| Python 3 | Servidor HTTP local |
make # compilar e rodar
make compile # só compilar
make run # só rodar
make clean # limpar build# Ativar Emscripten (se necessário)
source ~/emsdk/emsdk_env.sh
./buildwasm.sh # limpar, compilar e servir
./buildwasm.sh -compile # só compilar
./buildwasm.sh -run # só servir (precisa compilar antes).\buildwasm.ps1 # limpar, compilar e servir
.\buildwasm.ps1 -compile # só compilar
.\buildwasm.ps1 -run # só servir (precisa compilar antes)Acesse: http://localhost:8080/chub.html
Para colocar o jogo online no GitHub Pages:
-
Gere o build:
source ~/emsdk/emsdk_env.sh ./buildwasm.sh -compile
-
Crie/Atualize o branch
gh-pages: O comando abaixo envia apenas a pastaweb/para o branch de deploy:git add web -f git commit -m "Deploy: Atualizando versão web" git subtree push --prefix web origin gh-pages -
Configure no GitHub:
- Vá em Settings > Pages no seu repositório.
- Em Build and deployment, selecione o branch
gh-pagese a pasta/ (root). - Salve e aguarde alguns minutos.
-
GitHub Actions publica automaticamente
- Crie
games/seujogo/seujogo.ceseujogo.h - Implemente os 4 callbacks:
init,update,draw,unload - Defina
Game SEUJOGO_GAME = { ... }com nome, descrição e resolução - Em
core/include/registry.h, adicioneextern Game SEUJOGO_GAME; - Em
core/registry.c, adicione&SEUJOGO_GAMEao array - Em
buildwasm.ps1, adicione o.cna lista de sources - Recompile
- Sem
main(),InitWindow,CloseWindow,InitAudioDevice - Sem
whileloop — hub controla o ciclo - Sem
BeginDrawing/EndDrawingno draw — hub usa RenderTexture - Estado como
static— isola do resto - Assets em
assets/<game>/ - Incluir
chub_colors.hse usar cores custom
Projeto pessoal. Raylib é licenciado sob zlib/libpng. Jogos originais por PietroTy (2024).