Este é um jogo de RPG de texto simples, desenvolvido em Java, como um projeto para aplicar os principais conceitos de Programação Orientada a Objetos. O jogador assume o papel de um deus grego em uma jornada para alcançar o Monte Olimpo, enfrentando inimigos e tomando decisões.
O projeto não utiliza ferramentas de build como Maven ou Gradle. Para compilar e executar via linha de comando, siga os passos abaixo:
-
Compilar o código: Navegue até a raiz do projeto e execute o comando
javacpara compilar todos os arquivos-fonte para um diretório de saída (ex:out).# Cria o diretório de saída se não existir mkdir -p out # Compila os fontes javac -d out src/*.java
-
Executar o jogo: Execute a classe
Maina partir do diretório de saída.java -cp out Main
Main: Ponto de entrada da aplicação. Apenas instancia e inicia oJogo.Jogo: Classe principal que controla o fluxo da história, a interação com o jogador (menus) e a progressão da jornada.Personagem: Classe abstrata que serve como base para todas as entidades do jogo (jogadores e inimigos). Define atributos comuns como vida, ataque, defesa e um inventário.Zeus,Poseidon,Afrodite: Classes concretas que herdam dePersonagem. Representam os deuses que o jogador pode escolher, cada um com uma habilidade especial distinta.Inimigo: Subclasse dePersonagemutilizada para criar os adversários que o jogador enfrenta.Combate: Classe responsável por gerenciar a lógica de uma batalha, incluindo o sistema de turnos, rolagem de dados, cálculo de dano e uso de habilidades.Item: Representa um objeto que pode ser coletado, como poções ou equipamentos. ImplementaComparablepara ordenação eCloneablepara cópia.Inventario: Gerencia a coleção deItemde umPersonagem. Permite adicionar, remover e usar itens, além de suportar clonagem (cópia profunda) para mecânicas de saque.
- Separação de Responsabilidades: A lógica de batalha foi isolada na classe
Combate, em vez de ser colocada emPersonagemouJogo. Isso torna o código mais limpo e coeso, pois cada classe tem um propósito único. - Herança e Polimorfismo: A hierarquia
Personagem->Deus/Inimigoé central. O polimorfismo é utilizado principalmente no métodohabilidadeEspecial(), permitindo que cada personagem tenha um comportamento diferente, e na classeCombate, que pode lidar com qualquer tipo dePersonagem. - Composição sobre Herança: Um
Personagemtem umInventario(composição), o que é mais flexível do que sePersonagemfosse umInventario(herança). Isso permite que a lógica de inventário seja reutilizada e mantida de forma independente. - Cópia Profunda (Deep Copy): Os construtores de cópia e o método
clone()emPersonagemeInventarioforam implementados para criar duplicatas totalmente independentes dos objetos. Isso evita efeitos colaterais indesejados (aliasing) e seria fundamental para implementar funcionalidades como "checkpoints" ou para o saque de itens de inimigos. - Efeitos de Item baseados em String: Os efeitos dos itens (
"Cura+30","Ataque+5") foram implementados comoStringpara permitir flexibilidade. Embora uma abordagem comenumou o padrão Strategy fosse mais segura em termos de tipos, a análise de strings foi adotada pela simplicidade na implementação de efeitos variados. - Tratamento de Exceções: O programa utiliza exceções (
IllegalArgumentException,InputMismatchException) para validar entradas do usuário e estados de objetos (ex: quantidade negativa de um item), tornando o sistema mais robusto.