Um jogo estilo "Dino do Chrome" com temática completa do Mario, onde você pode jogar manualmente OU treinar uma IA usando NEAT (NeuroEvolution of Augmenting Topologies).
- Mario detalhado: Chapéu vermelho com logo "M", bigode, olhos, camisa vermelha com botões
- Canos verdes: Com borda superior e detalhes internos
- Goombas: Cogumelos marrons com olhos raivosos e animação
- Koopa Troopas: Tartarugas verdes com casco detalhado e animação de caminhada
- Bob-ombs: Bombas voadoras que cruzam o céu em linha reta com rastro e propulsão
- Cenário: Céu azul, nuvens, montanhas, chão com grama
- Modo Manual: Controle total do Mario (movimento + pulo)
- Modo IA: Assista dezenas de agentes evoluindo automaticamente (população padrão 70)
- 4 Tipos de Obstáculos:
- Canos (3 alturas diferentes)
- Goombas (cogumelos no chão)
- Tartarugas (Koopas no chão)
- Bombas (voando em alturas variadas)
- Sistema de Pontuação: Pontos por distância e por ultrapassar obstáculos
- Objetivo: Percorrer 15.000 pixels para vencer!
- Dificuldade Progressiva: Velocidade aumenta gradualmente
- Distância ao próximo obstáculo no chão (normalizada)
- Altura/Tipo do obstáculo no chão (baixo/médio/alto)
- Distância ao próximo obstáculo no ar (bomba)
- Existe bomba no ar? (booleano)
- Velocidade atual do jogo (normalizada)
- Posição Y do Mario (altura do pulo)
- População padrão: 70 agentes por geração (ajuste em
config-feedforward.txt) - Gerações recomendadas: 80+ ou até atingir o
fitness_threshold(3200) - Fitness: Distância + velocidade + bônus situacionais (pulos e agachamentos corretos) + vitória
- Topologia: Rede neural feedforward com ativações
tanh/sigmoid/reluevoluindo dinamicamente - Checkpoints: use
--checkpoint-everypara salvar/retomar sessões longas
JogoMario/
├── game/
│ ├── __init__.py
│ ├── mario.py # Classe do personagem Mario
│ ├── obstacles.py # Classes dos obstáculos
│ └── game.py # Lógica principal do jogo
├── utils/
│ ├── __init__.py
│ └── constants.py # Constantes e configurações
├── main.py # 🎮 Jogo manual (execute este!)
├── neat_train.py # 🤖 Treinamento IA
├── config-feedforward.txt # Configuração NEAT
└── README.md
git clone https://github.com/jdsricardo/JogoMario.git
cd JogoMarioWindows:
python -m venv .venv
.venv\Scripts\activateLinux/Mac:
python3 -m venv .venv
source .venv/bin/activatepip install pygame neat-pythonModo Manual (Jogar você mesmo):
python main.pyModo IA (Treinar NEAT):
python app.py --generations 80 --headless --checkpoint-every 5Dica:
neat_train.pycontinua disponível como atalho, mas agora oapp.pyexpõe todos os parâmetros via CLI.
| Opção | Descrição |
|---|---|
--generations N |
Define quantas gerações serão executadas (padrão 50) |
--headless |
Oculta a janela do Pygame para acelerar o treinamento |
--config caminho |
Usa um arquivo config-feedforward customizado |
--max-score valor |
Limita a pontuação de cada rodada para evitar loops |
--best-path arquivo.pkl |
Caminho para salvar o melhor genoma evoluído |
--checkpoint-every N |
Salva checkpoints do NEAT a cada N gerações |
--checkpoint-dir pasta |
Diretório onde os checkpoints são gravados |
--load-checkpoint arquivo |
Retoma o treinamento a partir de um checkpoint existente |
--no-save-best |
Pula o salvamento automático do melhor genoma |
| Tecla | Ação |
|---|---|
| ESPAÇO ou ↑ | Pular |
| ← ou A | Mover para esquerda |
| → ou D | Mover para direita |
| P | Pausar jogo |
| R | Reiniciar |
| ESC | Sair |
- Objetivo: Percorra 15.000 pixels sem colidir
- Obstáculos:
- Canos: Altos no chão - pule sobre eles
- Goombas: Cogumelos pequenos - pule
- Tartarugas: Médias - pule no momento certo
- Bombas: Voam no ar - NÃO pule quando elas vierem!
- Estratégia:
- Pule para desviar de obstáculos no chão
- Fique no chão para desviar de bombas no ar
- Use movimento horizontal para melhor posicionamento
- Vitória: Barra de progresso no topo direito
- Geração 1: 70 Marios com redes neurais aleatórias
- Avaliação: Todos correm simultaneamente; quem colide é removido
- Fitness: Distância + velocidade + bônus por ações corretas (pulo/abaixar) + vitória
- Seleção: NEAT preserva as melhores espécies e aplica mutações controladas
- Mutação/Cruzamento: Novas conexões/neurônios surgem, pesos são ajustados
- Repetir: Até alcançar o
fitness_thresholdou o número de gerações definido
- Adiciona/remove conexões sinápticas
- Adiciona/remove neurônios ocultos
- Ajusta pesos e bias
- Estrutura da rede evolui automaticamente
- Terminal: Fitness máximo/médio por geração
- Tela: Geração atual e agentes vivos
- Genoma salvo:
melhor_genoma.pkl(desativável com--no-save-best) - Checkpoints:
checkpoints/neat-checkpoint-*permitem pausar e retomar sessões longas
Edite utils/constants.py:
VELOCIDADE_INICIAL = 6 # Velocidade inicial (padrão: 6)
VELOCIDADE_MAXIMA = 14 # Velocidade máxima (padrão: 14)
DISTANCIA_PARA_VENCER = 15000 # Distância para vencer (padrão: 15000)Em utils/constants.py:
CHANCE_BOMBA = 0.3 # 30% bombas (padrão)
CHANCE_TARTARUGA = 0.4 # 40% tartarugas (padrão)
# Restante: Canos e GoombasEm config-feedforward.txt:
pop_size = 70 # Número de agentes (padrão atual)No CLI, altere o número de gerações sem editar código:
python app.py --generations 150 --headless| Aspecto | Manual | IA (NEAT) |
|---|---|---|
| Controle | Teclado (4 direções + pulo) | Rede neural (apenas pulo) |
| Aprendizado | Humano | Evolutivo |
| Velocidade | Tempo real | Tempo real |
| Objetivo | Vencer 1 vez | Evoluir por gerações |
| Diversão | Alta 🎮 | Observar evolução 🧠 |
pip install pygamepip install neat-pythonAjuste FPS em utils/constants.py (padrão: 60)
- Aumente o número de gerações
- Ajuste
pop_sizepara 100+ - Reduza a dificuldade inicial
- Pygame: Gráficos 2D, física, colisões
- NEAT: Algoritmos genéticos, redes neurais evolutivas
- POO: Classes, herança, encapsulamento
- Arquitetura: Separação em módulos
- Game Design: Balanceamento, progressão, feedback visual
- Sprites reais (imagens PNG)
- Sistema de som e música
- Múltiplos níveis/mundos
- Power-ups (cogumelo, estrela)
- Leaderboard online
- Modo replay do melhor genoma
- Salvar/carregar progresso
- Python 3.8+
- Pygame 2.0+: Engine gráfica
- NEAT-Python 0.92+: Framework de neuroevolução
Este projeto é livre para uso educacional e pessoal.
Contribuições são bem-vindas! Sinta-se à vontade para:
- Reportar bugs
- Sugerir features
- Melhorar gráficos
- Otimizar código
Desenvolvido com ❤️ para aprender IA e Game Development
🎮 Divirta-se jogando e vendo a IA aprender! 🤖