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.




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.
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.