Um jogo Bomberman multiplayer online desenvolvido em Python com Pygame e FastAPI
BombInsper Online é uma versão moderna e multiplayer do clássico jogo Bomberman. Os jogadores competem em arenas destructíveis, colocando bombas estrategicamente para eliminar oponentes e destruir obstáculos. O jogo combina ação rápida com elementos estratégicos, oferecendo uma experiência competitiva online.
- Multiplayer Online Real-Time: Partidas 1v1 com sincronização em tempo real via WebSockets
- Sistema de Matchmaking: Sistema automático de emparelhamento de jogadores
- Física de Explosão Realista: Explosões propagam em cruz, destruindo blocos e afetando jogadores
- Animações Suaves: Interpolação de movimento para experiência visual fluida
- Interface Moderna: HUD elegante com informações dos jogadores e métricas de conexão
- Leaderboard Global: Sistema de ranking com estatísticas persistentes
- Assets Customizados: Diferentes skins de personagens (Carlitos e Rogério)
- Cross-Platform: Builds automáticos para Windows, macOS e Linux
app.py: Factory principal da aplicação clientescenes/: Sistema de cenas (login, menu, jogo, matchmaking)game/: Entidades do jogo (jogador, bomba, partículas)services/: Serviços de autenticação, matchmaking e jogoassets/: Recursos visuais e sonoros
app.py: Aplicação FastAPI com middleware CORSapi/: Endpoints REST e WebSocketauth.py: Autenticação JWTmatch.py: Estatísticas de partidasws.py: WebSockets para matchmaking e jogo
services/: Lógica de negóciogame.py: Gerenciamento de estado de jogoauth.py: Serviços de autenticação
utils/: Utilitários (compressão de estado)
models/: Modelos Pydantic compartilhadosconstants.py: Constantes do jogo e assetsconfig.py: Configurações via Pydantic Settingsabstract.py: Classes abstratas base
- Python 3.11+
- PostgreSQL (para produção) ou SQLite (desenvolvimento)
- Docker (opcional, para deployment)
- Clone o repositório
git clone <repository-url>
cd bomb- Instale as dependências
pip install -r requirements.txt- Configure o banco de dados
# Gera o Prisma Client
python -m prisma generate
# Executa as migrations
python -m prisma migrate deploy- Configure variáveis de ambiente
# Crie um arquivo .env com:
SERVER_SECRET_KEY=your-secret-key-here
SERVER_DEBUG=trueServidor:
python main.py -m serverCliente:
python main.py -m clientO projeto oferece builds automáticos para múltiplas plataformas via GitHub Releases:
- Windows:
bomb.exe- Executável standalone - Linux:
bomb-linux- Binário para distribuições Linux - macOS:
bomb-macos- Aplicação para sistemas Apple
Nota: Os executáveis são gerados automaticamente via GitHub Actions a cada tag de release (
v*)
O projeto inclui configuração completa para deployment via Docker:
# Build da imagem
docker build -t bombinsper:latest .
# Execução com volume persistente
docker run -d \
--name bombinsper-server \
-p 8000:8000 \
-e SERVER_SECRET_KEY=your-secret-key \
-v bomb_db:/app \
bombinsper:latest- Setas (↑↓←→): Movimento do personagem
- Espaço: Colocar bomba
- ESC/Enter: Sair da partida
- Matchmaking: Entre na fila e aguarde um oponente
- Movimento: Navegue pelo mapa evitando obstáculos
- Bombas: Coloque bombas estrategicamente (2 segundos para explosão)
- Explosões: Raio de 3 tiles em cruz, destrói blocos e elimina jogadores
- Vitória: Seja o último jogador sobrevivente
- Vitórias: Registradas no leaderboard global
- Estatísticas: Bombas colocadas, kills, tempo de partida
- Ranking: Sistema de classificação baseado em vitórias
- FastAPI: Framework web assíncrono
- Prisma: ORM moderno para Python
- WebSockets: Comunicação real-time
- JWT: Autenticação segura
- PostgreSQL/SQLite: Banco de dados
- Uvicorn: Servidor ASGI
- Pygame: Engine de jogo 2D
- Pydantic: Validação de dados
- asyncio: Programação assíncrona
- gzip: Compressão de estado
- Docker: Containerização
- GitHub Actions: CI/CD automatizado
- PyInstaller: Geração de executáveis
- Self-hosted runners: Deploy automático
O projeto possui dois workflows automatizados via GitHub Actions:
- Trigger: Push para branch
main - Build: Criação da imagem Docker
- Deploy: Deployment automático em servidor self-hosted
- Health Check: Verificação de saúde do serviço
- Trigger: Push de tags
v* - Multi-Platform Build:
- Windows:
bomb.exevia PyInstaller - Linux:
bomb-linuxvia PyInstaller + binutils - macOS:
bomb-macosvia PyInstaller
- Windows:
- Assets Bundle: Inclusão automática de
client/assets - GitHub Release: Publicação automática dos executáveis
- Dockerfile: Multi-stage build otimizado
- Volume persistente:
bomb_dbpara dados - Variáveis:
EXTERNAL_PORTeSERVER_SECRET_KEY - Auto-restart: Container reinicia automaticamente
POST /api/auth/register: Registro de usuárioPOST /api/auth/login: Login e obtenção de tokenGET /api/auth/me: Informações do usuário atual
GET /api/match/{match_id}/stats: Estatísticas da partidaWS /ws/matchmaking: WebSocket para matchmakingWS /ws/game/{game_id}: WebSocket para gameplayWS /ws/leaderboard: WebSocket para leaderboard real-time
- Carlitos Player: Sprites animados com 4 direções
- Rogério Player: Alternativa visual para o segundo jogador
- Areia: Bloco destrutível básico
- Caixa: Obstáculo de madeira
- Metal: Bloco indestrutível
- Diamante: Decoração especial
- Bomba: 5 frames de animação progressiva
- Explosão: Sistema de partículas (core, tail, tip)
- Interpolação: Movimento suave entre posições
- Compressão de Estado: Redução de 70-90% no tráfego de rede
- Event Prioritization: Sistema de priorização de eventos críticos
- Movement Throttling: Limitação de spam de movimentos (20 FPS)
- Cache de Assets: Pré-carregamento para melhor performance
- FPS Counter: Indicador de performance visual
- Ping Indicator: Latência de rede em tempo real
- Connection Quality: Qualidade da conexão (Excelente/Boa/Regular/Ruim)
- Event Metrics: Contadores de eventos processados
- icecream: Debug logging elegante
- Hot Reload: Recarga automática durante desenvolvimento
- Error Handling: Sistema robusto de tratamento de erros
- Graceful Degradation: Fallbacks para perda de conexão
- Structured Logging: Logs organizados por módulo
- Performance Metrics: Métricas de tempo de processamento
- Error Tracking: Rastreamento detalhado de erros
Este projeto foi desenvolvido como parte de um trabalho acadêmico no Insper. Para contribuir:
- Fork o repositório
- Crie uma branch para sua feature
- Commit suas mudanças
- Abra um Pull Request
Projeto acadêmico - Insper Instituto de Ensino e Pesquisa.
Desenvolvido com ❤️ para a disciplina Developer Life