Skip to content

Commit 5c7e31c

Browse files
Merge pull request #31 from lucaspaiva-lp/feature/personagens
Refactor: Adicionado mecanica de duas habilidades aos personagens, al…
2 parents 1f681d5 + 368399a commit 5c7e31c

File tree

3 files changed

+307
-76
lines changed

3 files changed

+307
-76
lines changed

models/equipamentos.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class PocaoDeVida:
2+
def __init__(self, cura=50):
3+
self.nome = "Poção de Vida"
4+
self.cura = cura
5+
6+
def usar(self, jogador):
7+
"""Restaura a vida do jogador até o máximo permitido."""
8+
vida_antes = jogador.atributos.vida
9+
jogador.atributos.vida = min(
10+
jogador.atributos.vida + self.cura,
11+
jogador.atributos.vida_max
12+
)
13+
return jogador.atributos.vida - vida_antes

models/jogo.py

Lines changed: 172 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
from __future__ import annotations
2+
import os
3+
import json
4+
from models.aventura_classes import Guerreiro, Mago
5+
from equipamentos import PocaoDeVida
26

37
from utils import controle_personagem
48
from utils import controle_missao
@@ -21,28 +25,187 @@ def __init__(self) -> None:
2125
# Estado do personagem
2226
self.personagem = {"nome": None, "arquetipo": None}
2327

24-
# Objeto completo do personagem (classe Guerreiro/Mago)
25-
self.personagem_obj = None
28+
# menu personagem
29+
def menu_personagem(self):
30+
"""
31+
Menu dedicado às operações relacionadas ao personagem:
32+
criar, ver, inventário, criação de itens.
33+
"""
34+
while True:
35+
print("\n=== Menu de Personagem ===")
36+
print("[1] Criar personagem")
37+
print("[2] Ver personagem")
38+
print("[3] Checar inventário")
39+
print("[4] Criar item")
40+
print("[5] Usar item")
41+
print("[6] Adicionar item ao inventário")
42+
print("[0] Voltar ao menu principal")
2643

2744
# Estado da missão
2845
self.missao_config = {"dificuldade": "Fácil", "cenario": "Trilha"}
2946

3047
# Repositório de salvamento (importado do módulo utils/salvamento)
3148
self.repo = salvamento.repo
3249

33-
# Últimos caminhos usados
34-
self._ultimo_save = None
35-
self._ultimo_load = None
50+
elif op == "2":
51+
self.ver_personagem()
52+
53+
elif op == "3":
54+
self.checar_inventario()
55+
56+
elif op == "5":
57+
self.usar_item_personagem()
58+
59+
elif op == "6":
60+
item = print("Informe o nome do item a adicionar:")
61+
self.personagem.adicionar_item(item)
62+
63+
elif op == "0":
64+
break
65+
66+
else:
67+
print("Opção inválida. Tente novamente.")
3668

3769
# ================================================================
3870
# ROTAS (encaminham chamadas a módulos externos)
3971
# ================================================================
4072

4173
def criar_personagem(self) -> None:
42-
try:
43-
controle_personagem.criar_personagem(self)
44-
except Exception as e:
45-
print(f"[ERRO] criar_personagem: {e}")
74+
"""
75+
Fluxo interativo de criação de personagem jogável.
76+
77+
Responsável por instanciar e armazenar um objeto de personagem (Guerreiro ou Mago)
78+
com base na entrada do usuário. Garante consistência entre `personagem_obj`
79+
e o dicionário de metadados `self.personagem`.
80+
81+
Rules:
82+
- O nome é obrigatório.
83+
- A classe é escolhida entre as opções implementadas (1 ou 2).
84+
- Nenhum dado é persistido neste estágio.
85+
86+
Side effects:
87+
- Cria `self.personagem_obj`
88+
- Atualiza `self.personagem["nome"]` e `self.personagem["arquetipo"]`
89+
"""
90+
print("=== Criação de Personagem ===")
91+
nome = input("Digite o nome do seu personagem: ").strip()
92+
93+
print("\nEscolha uma classe:")
94+
print("[1] Guerreiro - Alta vida e defesa, ataque físico forte.")
95+
print("[2] Mago - Usa mana e ataques mágicos poderosos.")
96+
97+
while True:
98+
escolha = input("> ").strip()
99+
if escolha == "1":
100+
personagem = Guerreiro(nome)
101+
break
102+
elif escolha == "2":
103+
personagem = Mago(nome)
104+
break
105+
else:
106+
print("Opção inválida. Escolha 1 ou 2.")
107+
108+
print("\nPersonagem criado com sucesso!")
109+
print(f"Nome: {personagem.nome}")
110+
print(f"Classe: {'Guerreiro' if isinstance(personagem, Guerreiro) else 'Mago'}")
111+
print(f"Vida: {personagem.vida}")
112+
print(f"Ataque: {personagem.ataque}")
113+
print(f"Defesa: {personagem.defesa}")
114+
print(f"Mana: {personagem.mana}")
115+
116+
self.personagem_obj = personagem
117+
self.personagem["nome"] = nome
118+
self.personagem["arquetipo"] = (
119+
"Guerreiro" if isinstance(personagem, Guerreiro) else "Mago"
120+
)
121+
122+
123+
# =====================================================
124+
# VER PERSONAGEM
125+
# =====================================================
126+
def ver_personagem(self):
127+
if not self.personagem_obj:
128+
print("Nenhum personagem criado ainda.")
129+
return
130+
131+
p = self.personagem_obj
132+
print("\n=== Personagem Atual ===")
133+
print(f"Nome: {p.nome}")
134+
print(f"Vida: {p.vida}")
135+
print(f"Ataque: {p.ataque}")
136+
print(f"Defesa: {p.defesa}")
137+
if hasattr(p, "mana"):
138+
print(f"Mana: {p.mana}")
139+
140+
# =====================================================
141+
# CHECAR INVENTÁRIO
142+
# =====================================================
143+
def checar_inventario(self):
144+
if not self.personagem_obj:
145+
print("Nenhum personagem criado.")
146+
return
147+
148+
inventario = self.personagem_obj.inventario
149+
150+
print("\n=== Inventário ===")
151+
if not inventario:
152+
print("(vazio)")
153+
else:
154+
for i, item in enumerate(inventario, 1):
155+
print(f"{i}. {item}")
156+
157+
158+
# =====================================================
159+
# USAR ITEM
160+
# =====================================================
161+
def usar_item_personagem(self):
162+
if not self.personagem_obj:
163+
print("Nenhum personagem criado.")
164+
return
165+
166+
nome_item = input("Digite o nome do item a ser usado: ").strip()
167+
resultado = self.personagem_obj.usar_item(nome_item)
168+
print(resultado)
169+
170+
# =====================================================
171+
# ========== MENU PRINCIPAL ===========================
172+
# =====================================================
173+
174+
def menu_principal(self) -> None:
175+
"""
176+
Loop principal de execução do jogo.
177+
178+
Exibe o menu principal e redireciona o fluxo para os submenus:
179+
criação de personagem, missões, salvar/carregar e saída.
180+
181+
Este método bloqueia a execução até que o usuário escolha sair.
182+
"""
183+
while True:
184+
print("\n=== MENU PRINCIPAL ===")
185+
print("[1] Criar novo personagem")
186+
print("[2] Ver informações do personagem")
187+
print("[3] Missão")
188+
print("[4] Salvar Jogo (simulado)")
189+
print("[5] Carregar Jogo (simulado)")
190+
print("[0] Sair")
191+
192+
opcao = input("> ").strip()
193+
194+
if opcao == "1":
195+
self.criar_personagem()
196+
elif opcao == "2":
197+
self.ver_personagem()
198+
elif opcao == "3":
199+
self.menu_missao()
200+
elif opcao == "4":
201+
self.menu_salvar()
202+
elif opcao == "5":
203+
self.menu_carregar()
204+
elif opcao == "0":
205+
print("Saindo do jogo...")
206+
break
207+
else:
208+
print("Opção inválida. Tente novamente.")
46209

47210
def ver_personagem(self) -> None:
48211
try:

0 commit comments

Comments
 (0)