No description
Find a file
Jônatas Oliveira 18a97b8f19
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
Merge pull request #7 from jonatasoli/claude/fix-ci-errors-01BQ4RsqhcgBWnuwcoFbLYUt
Fix CI errors and improve project
2025-11-14 16:29:39 +01:00
.github/workflows Corrige tela de vitória e adiciona Chave de Ouro + CI/CD 2025-11-14 13:19:04 +00:00
assets/sounds Adiciona tela de vitória com estatísticas e créditos animados 2025-11-14 13:00:02 +00:00
src feat: Aprimoramento completo do projeto com recursos avançados do Rust 2025-11-14 14:39:25 +00:00
tests feat: Aprimoramento completo do projeto com recursos avançados do Rust 2025-11-14 14:39:25 +00:00
.gitignore Adiciona jogo Rogue completo com geração procedural e arte ASCII 2025-11-13 10:35:15 +00:00
.woodpecker.yml Corrige tela de vitória e adiciona Chave de Ouro + CI/CD 2025-11-14 13:19:04 +00:00
AUDIO_SETUP.md Adiciona tela de vitória com estatísticas e créditos animados 2025-11-14 13:00:02 +00:00
Cargo.toml Adiciona tela de vitória com estatísticas e créditos animados 2025-11-14 13:00:02 +00:00
README.md Adiciona tela de vitória com estatísticas e créditos animados 2025-11-14 13:00:02 +00:00

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á:

  1. 📊 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
  2. 🎬 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:
    1. Gera salas aleatórias sem sobreposição
    2. Conecta salas com corredores em L
    3. 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

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:

  1. Criação de salas sem sobreposição
  2. Corredores conectando salas adjacentes
  3. 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:

  1. Siga as instruções no arquivo AUDIO_SETUP.md
  2. Baixe sons gratuitos de licença CC0 dos sites recomendados
  3. Coloque os arquivos na pasta assets/sounds/
  4. Descomente o código no arquivo src/audio.rs
  5. Descomente a dependência quad-snd no Cargo.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

📝 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! 🗡️🛡️