- Rust 100%
|
Some checks failed
CI / Test Suite (push) Has been cancelled
CI / Test Suite-1 (push) Has been cancelled
CI / Clippy (push) Has been cancelled
CI / Clippy-1 (push) Has been cancelled
CI / Rustfmt (push) Has been cancelled
CI / Rustfmt-1 (push) Has been cancelled
CI / Build (push) Has been cancelled
CI / Build-1 (push) Has been cancelled
Fix CI errors and improve project |
||
|---|---|---|
| .github/workflows | ||
| assets/sounds | ||
| src | ||
| tests | ||
| .gitignore | ||
| .woodpecker.yml | ||
| AUDIO_SETUP.md | ||
| Cargo.toml | ||
| README.md | ||
Rogue - Dungeon Crawler em ASCII
Um clone didático do clássico jogo Rogue, implementado em Rust com macroquad.
🎮 Sobre o Jogo
Rogue é um dungeon crawler roguelike clássico onde você explora dungeons geradas proceduralmente, enfrenta monstros, coleta tesouros e procura o lendário Amuleto de Yendor.
Características
- ✨ Geração Procedural: Cada dungeon é única, gerada com algoritmo de salas e corredores
- 🎯 3 Níveis: Dificuldade crescente com monstros mais fortes
- ⚔️ Sistema de Combate: Combate baseado em turnos com ataque e defesa
- 🗝️ Portas Secretas: Descubra passagens ocultas
- 🚪 Portas de Teleporte: Todas as portas (+) são portais que teleportam você para outras áreas!
- 💣 Armadilhas: Cuidado onde pisa!
- 💰 Tesouros: Ouro, poções, armas e armaduras
- 📈 Sistema de Progressão: Ganhe XP e suba de nível
- 📊 Estatísticas: Rastreamento completo de monstros mortos, tesouros coletados e equipamentos
- 🏆 Tela de Vitória: Veja suas estatísticas e créditos ao vencer o jogo
- 🎬 Créditos Animados: Créditos finais em estilo cinematográfico
- 🎨 Arte ASCII: Visual clássico roguelike
- 🔊 Suporte a Áudio: Sistema preparado para efeitos sonoros (veja AUDIO_SETUP.md)
🎯 Objetivo
Desça pelos 3 níveis da dungeon e encontre o Amuleto de Yendor (") para vencer!
Ao pegar o Amuleto, você verá:
-
📊 Tela de Estatísticas: Suas conquistas da jornada
- Monstros mortos
- Tesouros coletados
- Equipamentos encontrados
- Ouro acumulado
- Nível final alcançado
- Dano causado e recebido
-
🎬 Créditos Cinematográficos: Pressione ESPAÇO para ver os créditos descendo como em filmes!
🕹️ Controles
- W/A/S/D ou Setas: Mover
- H: Mostrar legenda do jogo
- ESPAÇO: Avançar para créditos (na tela de vitória)
- R: Reiniciar jogo
- Q/ESC: Sair do jogo
🗺️ Símbolos do Mapa
Terreno
#- Parede.- Chão+- Porta>- Escadas (próximo nível)^- Armadilha (quando revelada)
Entidades
@- Você (o herói)r- Rato (fraco)g- Goblin (médio)o- Orc (forte)T- Troll (muito forte)D- Dragão (boss)
Itens
$- Ouro!- Poção de cura)- Arma (aumenta ataque)]- Armadura (aumenta defesa)"- Amuleto de Yendor (objetivo!)
🏗️ Arquitetura do Código
O projeto está organizado de forma modular e didática:
Módulos
map.rs - Geração de Dungeons
- Algoritmo: Salas e corredores (rooms and corridors)
- Processo:
- Gera salas aleatórias sem sobreposição
- Conecta salas com corredores em L
- Adiciona portas, armadilhas e portas secretas
Conceitos-chave:
- Room: Estrutura retangular com posição e dimensões
- Tile: Enum representando tipos de terreno
- Map::generate(): Método principal de geração procedural
entities.rs - Jogador, Monstros e Itens
- Player: HP, ataque, defesa, XP, level
- Monster: Diferentes tipos com stats balanceados
- Item: Tesouros e equipamentos
Conceitos-chave:
- Position: Sistema de coordenadas
- MonsterType::for_level(): Spawna monstros apropriados
- Item::apply(): Aplica efeitos ao jogador
game.rs - Lógica Principal
- Gerenciamento de estado: Playing, Victory, Defeat
- Sistema de turnos: Jogador move → Monstros agem
- Combate: Damage = Ataque - Defesa (mínimo 1)
- Interações: Portas, armadilhas, itens, escadas
Conceitos-chave:
- Game::move_player(): Processa movimento e interações
- Game::monster_turn(): IA dos monstros
- Game::generate_level(): Cria novo nível
render.rs - Renderização ASCII
- Macroquad: Biblioteca para desenhar texto como gráficos
- Sistema de cores: Diferentes cores para diferentes elementos
- UI: Stats do jogador, mensagens, controles
Conceitos-chave:
- Renderer::draw_char(): Desenha caractere ASCII na grid
- Colors: Paleta de cores para elementos
- window_config(): Configuração da janela
main.rs - Loop Principal
- Game Loop: Input → Update → Render
- Async: Usa macroquad::main macro
- Input Handling: Processa teclas WASD/Arrow
🧪 Testes
O projeto inclui testes unitários para os componentes principais:
# Executar todos os testes
cargo test
# Executar testes com output
cargo test -- --nocapture
Testes Incluídos
- ✅ Criação e intersecção de salas
- ✅ Geração de mapas
- ✅ Walkability de tiles
- ✅ Criação e movimento de entidades
- ✅ Sistema de dano e cura
- ✅ Level up do jogador
- ✅ Descoberta de portas secretas
- ✅ Sistema de mensagens
🚀 Como Executar
Pré-requisitos
- Rust 1.70+ (https://rustup.rs/)
Compilar e Executar
# Clone o repositório
git clone <repo-url>
cd rogue
# Executar em modo debug
cargo run
# Executar em modo release (mais rápido)
cargo run --release
📚 Aprendendo com o Código
Este projeto é didático e demonstra:
1. Geração Procedural
- Como criar dungeons aleatórias mas jogáveis
- Algoritmo de salas e corredores
- Validação de conectividade
2. Game Design
- Sistema de combate balanceado
- Curva de dificuldade (3 níveis)
- Feedback ao jogador (mensagens coloridas)
3. Padrões Rust
- Ownership e borrowing
- Enums para tipos de entidades
- Pattern matching
- Testes unitários
4. Arquitetura de Jogos
- Separação de responsabilidades (MVC-like)
- Game loop assíncrono
- Sistema de entidades
5. Macroquad
- Renderização de texto
- Input handling
- Window configuration
🎓 Conceitos de Roguelike
Geração Procedural
Cada partida é única! O mapa é gerado aleatoriamente usando:
- Criação de salas sem sobreposição
- Corredores conectando salas adjacentes
- Distribuição aleatória de itens e monstros
Permadeath
Quando você morre, recomeça do zero. Sem saves!
Sistema de Turnos
O jogo espera sua ação. Pense antes de agir!
Exploração
Descubra portas secretas explorando as paredes.
🔊 Adicionar Efeitos Sonoros (Opcional)
O jogo está preparado para suportar efeitos sonoros! Para adicionar áudio:
- Siga as instruções no arquivo
AUDIO_SETUP.md - Baixe sons gratuitos de licença CC0 dos sites recomendados
- Coloque os arquivos na pasta
assets/sounds/ - Descomente o código no arquivo
src/audio.rs - Descomente a dependência
quad-sndnoCargo.toml
Sons suportados:
- 🗡️ Ataque a monstros
- 💀 Morte de monstros
- 💰 Coletar itens/tesouros
- 🚪 Teleporte por portas
- ❤️ Receber dano
- 🏆 Vitória
🔧 Melhorias Futuras
Ideias para expandir o jogo:
- Field of View (FOV) - Fog of war
- Inventário completo
- Mais tipos de itens (scrolls, wands)
- Mais monstros e comportamentos de IA
- Salas especiais (tesouros, boss rooms)
- Sistema de fome
- Identificação de itens
- Salvar/carregar jogo
- Sistema de estatísticas do jogador
- Tela de vitória com estatísticas
- Créditos animados
- Sistema de portas de teleporte
- Estrutura para efeitos sonoros
📖 Recursos de Aprendizado
- Roguebasin - Wiki sobre desenvolvimento roguelike
- Macroquad Docs - Documentação do macroquad
- The Rust Book - Aprender Rust
📝 Licença
Este é um projeto educacional livre para uso e modificação.
🤝 Contribuindo
Sinta-se livre para fazer fork, modificar e aprender com o código!
Divirta-se explorando as dungeons! 🗡️🛡️