Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RPG de Mitologia Grega (POO em Java)

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.

Como Compilar e Executar

O projeto não utiliza ferramentas de build como Maven ou Gradle. Para compilar e executar via linha de comando, siga os passos abaixo:

  1. Compilar o código: Navegue até a raiz do projeto e execute o comando javac para 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
  2. Executar o jogo: Execute a classe Main a partir do diretório de saída.

    java -cp out Main

Descrição das Classes

  • Main: Ponto de entrada da aplicação. Apenas instancia e inicia o Jogo.
  • 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 de Personagem. Representam os deuses que o jogador pode escolher, cada um com uma habilidade especial distinta.
  • Inimigo: Subclasse de Personagem utilizada 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. Implementa Comparable para ordenação e Cloneable para cópia.
  • Inventario: Gerencia a coleção de Item de um Personagem. Permite adicionar, remover e usar itens, além de suportar clonagem (cópia profunda) para mecânicas de saque.

Decisões de Design

  • Separação de Responsabilidades: A lógica de batalha foi isolada na classe Combate, em vez de ser colocada em Personagem ou Jogo. 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étodo habilidadeEspecial(), permitindo que cada personagem tenha um comportamento diferente, e na classe Combate, que pode lidar com qualquer tipo de Personagem.
  • Composição sobre Herança: Um Personagem tem um Inventario (composição), o que é mais flexível do que se Personagem fosse um Inventario (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() em Personagem e Inventario foram 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 como String para permitir flexibilidade. Embora uma abordagem com enum ou 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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages