11from __future__ import annotations
2+ import os
3+ import json
4+ from models .aventura_classes import Guerreiro , Mago
5+ from equipamentos import PocaoDeVida
26
37from utils import controle_personagem
48from 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 ("\n Escolha 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 ("\n Personagem 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