Article image

RC

Rodolfo Contieri26/08/2023 12:15
Compartilhe

Do Aço ao Diamante: Crie e Valide Armaduras Orientado a Objetos

  • #Python

Criação de um Sistema Simples de RPG para Armaduras em Python, com Abordagem Orientada a Objetos e Validação da Lógica de Negócios

Aqui é o exemplo de código:

class TipoArmadura:
  LEVE = "Leve"
  MEDIA = "Média"
  PESADA = "Pesada"


class Elemento:
  FOGO = "Fogo"
  GELO = "Gelo"
  ELETRICIDADE = "Eletricidade"


class ArmadurasExistentes:
  LEVES = ["Armadura de Couro", "Armadura de Pano"]
  MEDIAS = ["Armadura de Couro Revestida", "Armadura de Alumínio"]
  PESADAS = ["Armadura de Aço", "Armadura de Diamante"]


class Armadura:
  def __init__(self, nome: str, tipo: str, defesa: int, resistencia_elemental: dict):
      """
      Params:
          - nome: Nome da armadura
          - tipo: Tipo de armadura (ex: leve, pesada)
          - defesa: Valor de defesa fornecido pela armadura
          - resistencia_elemental: Resistência a elementos (ex: fogo)
      """
      self.nome = nome
      self.tipo = tipo
      self.defesa = defesa
      self.resistencia_elemental = resistencia_elemental


      self._validar_tipo()
      self._validar_elemento()
      self._validar_nome_e_tipo()


  def _validar_tipo(self):
      if self.tipo not in [TipoArmadura.LEVE, TipoArmadura.MEDIA, TipoArmadura.PESADA]:
          raise ValueError("Tipo de armadura inválido")
      
  def _validar_elemento(self):
      for elemento in self.resistencia_elemental:
          if elemento not in [Elemento.FOGO, Elemento.GELO, Elemento.ELETRICIDADE]:
              raise ValueError("Elemento de resistência inválido")


  def _validar_nome_e_tipo(self):
      mapa_de_verificacao = {
          TipoArmadura.LEVE: ArmadurasExistentes.LEVES,
          TipoArmadura.MEDIA: ArmadurasExistentes.MEDIAS,
          TipoArmadura.PESADA: ArmadurasExistentes.PESADAS,
      }
      if self.nome not in mapa_de_verificacao[self.tipo]:
          raise ValueError("Nome de armadura incompatível com o tipo: " + self.nome)


  def exibir_detalhes(self):
      print(f"Armadura: {self.nome}")
      print(f"Tipo: {self.tipo}")
      print(f"Defesa: {self.defesa}")
      print(f"Resistência Elemental: {self.resistencia_elemental}")



if __name__ == "__main__":
  # Exemplos de uso da classe
  armadura1 = Armadura("Armadura de Couro", "Leve", 50, {"Fogo": 10, "Gelo": 5})
  armadura1.exibir_detalhes()


  armadura2 = Armadura("Armadura de Aço", TipoArmadura.PESADA, 50, {Elemento.FOGO: 50, Elemento.GELO: 10})
  armadura2.exibir_detalhes()


  armadura3 = Armadura("Armadura de Diamante", TipoArmadura.PESADA, 100, {Elemento.FOGO: 50, Elemento.ELETRICIDADE: 10})
  armadura3.exibir_detalhes()


  ## descomente para testar o erro
  # armadura_inexistente = Armadura("Armadura de Ouro", TipoArmadura.PESADA, 50, {Elemento.FOGO: 50, Elemento.GELO: 10})
  # armadura_inexistente.exibir_detalhes()

O exemplo atual inclui dados de armaduras, tipos e elementos diretamente no código. No entanto, para um sistema mais robusto e escalável, recomenda-se a adoção de um banco de dados. Isso permite uma gestão eficiente dos dados, facilitando a expansão e manutenção contínua sem a necessidade de modificar o código-fonte. Dessa forma, sua aplicação estará pronta para evoluir e se adaptar sem complicações.

Compartilhe
Comentários (2)
Vinicius Almeida
Vinicius Almeida - 26/08/2023 15:09

Excelente exercício para desenvolver e estudar sobre python com RPG, parabéns pelo trabalho. Ainda da pra utlizar a sua mesma logica para adicionar armaduras e elementos diferentes, e ir misturando pra conseguir algo ainda mais incrível, dá até pra implementar esse seu código em algum jogo eu diria, parabéns novamente.

Vinícius Ferreira
Vinícius Ferreira - 26/08/2023 13:19

Que projeto incrível, Rodolfo! Compartilho da sua paixão por RPG e fico impressionado com o trabalho que você fez aqui. O código está super organizado e claro, o que facilita a compreensão de cada parte dele.

A forma como você definiu os tipos de armadura e elementos, além de implementar as validações, demonstra um conhecimento maneiro. É ótimo ver como você conseguiu transformar algo técnico em algo divertido e prático de entender.