11from models .inventario import Inventario , Item
2+ from models .inimigo import Goblin , Ladrao , Golem , Demonio
3+ import random
24
35# =====================================================
46# ========== MENU DE MISSÃO ==========================
57# =====================================================
68
79
810def menu_missao (jogo ) -> None :
9- """
10- Submenu de missões.
11- Controla as escolhas e delega para funções específicas.
12- """
11+ """Submenu de missões."""
1312 while True :
1413 print ("\n === Missão ===" )
1514 print (f"Dificuldade atual: { jogo .missao_config ['dificuldade' ]} " )
@@ -49,6 +48,7 @@ def escolher_dificuldade(jogo) -> None:
4948 print ("[2] Média" )
5049 print ("[3] Difícil" )
5150 op = input ("> " ).strip ()
51+
5252 mapa = {"1" : "Fácil" , "2" : "Média" , "3" : "Difícil" }
5353 dif = mapa .get (op )
5454
@@ -72,6 +72,7 @@ def escolher_cenario(jogo) -> None:
7272 print ("[4] Ruínas" )
7373
7474 op = input ("> " ).strip ()
75+
7576 mapa = {"1" : "Trilha" , "2" : "Floresta" , "3" : "Caverna" , "4" : "Ruínas" }
7677 cen = mapa .get (op )
7778
@@ -82,6 +83,43 @@ def escolher_cenario(jogo) -> None:
8283 print ("Opção inválida." )
8384
8485
86+ # -----------------------------------------------------
87+ # GERADOR DE INIMIGOS POR CENÁRIO
88+ # -----------------------------------------------------
89+
90+
91+ def gerar_inimigo_por_cenario (cenario ):
92+ mapa = {
93+ "Trilha" : [Goblin ],
94+ "Floresta" : [Goblin , Ladrao ],
95+ "Caverna" : [Ladrao , Golem ],
96+ "Ruínas" : [Golem , Demonio ],
97+ }
98+
99+ lista = mapa .get (cenario , [Goblin ])
100+ classe_escolhida = random .choice (lista )
101+ return classe_escolhida ()
102+
103+
104+ # -----------------------------------------------------
105+ # APLICAR DIFICULDADE
106+ # -----------------------------------------------------
107+
108+
109+ def aplicar_dificuldade (inimigo , dificuldade ):
110+ if dificuldade == "Média" :
111+ inimigo .vida = int (inimigo .vida * 1.2 )
112+ inimigo .ataque = int (inimigo .ataque * 1.2 )
113+ inimigo .defesa = int (inimigo .defesa * 1.2 )
114+
115+ elif dificuldade == "Difícil" :
116+ inimigo .vida = int (inimigo .vida * 1.5 )
117+ inimigo .ataque = int (inimigo .ataque * 1.5 )
118+ inimigo .defesa = int (inimigo .defesa * 1.5 )
119+
120+ return inimigo
121+
122+
85123# -----------------------------------------------------
86124# PRÉ-VISUALIZAÇÃO DA MISSÃO
87125# -----------------------------------------------------
@@ -91,12 +129,12 @@ def preview_missao(jogo) -> None:
91129 print ("\n Pré-visualização da Missão" )
92130 print (f"- Dificuldade: { jogo .missao_config ['dificuldade' ]} " )
93131 print (f"- Cenário: { jogo .missao_config ['cenario' ]} " )
94- print ("- Inimigos e recompensas: (em breve) " )
95- print ("- Regras de combate: (em breve) " )
132+ print ("- Inimigos e recompensas: Gerados dinamicamente " )
133+ print ("- Regras de combate: Turnos alternados e uso de itens " )
96134
97135
98136# -----------------------------------------------------
99- # PARTE 3 — COMBATE DINÂMICO
137+ # COMBATE DINÂMICO
100138# -----------------------------------------------------
101139
102140
@@ -105,26 +143,29 @@ def iniciar_missao(jogo):
105143 print ("Crie um personagem antes de iniciar uma missão." )
106144 return
107145
108- # Inicializa inventário se não existir
109- inventario = jogo . personagem_obj .inventario
146+ jogador = jogo . personagem_obj
147+ inventario = jogador .inventario
110148
111- # Se for a primeira missão, dar poções iniciais
149+ # Poções iniciais caso inventário esteja vazio
112150 if len (inventario .itens ) == 0 :
113151 inventario .adicionar_item (Item ("Poção de Cura" , 30 ))
114152 inventario .adicionar_item (Item ("Poção de Cura" , 30 ))
115153
116- jogador = jogo .personagem_obj
154+ # Gerar inimigo real
155+ cenario = jogo .missao_config ["cenario" ]
156+ dificuldade = jogo .missao_config ["dificuldade" ]
157+
158+ inimigo = gerar_inimigo_por_cenario (cenario )
159+ inimigo = aplicar_dificuldade (inimigo , dificuldade )
117160
118- inimigo = type (
119- "InimigoSimulado" , (), {"nome" : "Goblin" , "vida" : 60 , "ataque" : 8 , "defesa" : 3 }
120- )()
161+ print (f"\n Você encontrou um { inimigo .nome } !" )
121162
122163 turno = 1
123- print ("\n Iniciando missão..." )
124164 jogo .logger .log_batalha (
125- f"Missão iniciada — { jogo . missao_config [ ' dificuldade' ] } / { jogo . missao_config [ ' cenario' ] } "
165+ f"Missão iniciada — { dificuldade } / { cenario } — Inimigo: { inimigo . nome } "
126166 )
127167
168+ # ===== LOOP DO COMBATE =====
128169 while jogador .vida > 0 and inimigo .vida > 0 :
129170 print (f"\n --- Turno { turno } ---" )
130171 print (f"{ jogador .nome } HP: { jogador .vida } | { inimigo .nome } HP: { inimigo .vida } " )
@@ -133,8 +174,12 @@ def iniciar_missao(jogo):
133174 print ("[1] Atacar" )
134175 print ("[2] Usar item" )
135176 print ("[3] Fugir" )
177+
136178 acao = input ("> " ).strip ()
137179
180+ # ----------------------------------
181+ # ATAQUE DO JOGADOR
182+ # ----------------------------------
138183 if acao == "1" :
139184 dano = max (jogador .ataque - inimigo .defesa , 0 )
140185 inimigo .vida -= dano
@@ -144,7 +189,7 @@ def iniciar_missao(jogo):
144189 elif acao == "2" :
145190 usar_item_em_combate (jogador , jogo )
146191 turno += 1
147- continue # inimigo não perde turno
192+ continue
148193
149194 elif acao == "3" :
150195 print ("Você fugiu!" )
@@ -155,8 +200,9 @@ def iniciar_missao(jogo):
155200 print ("Ação inválida!" )
156201 continue
157202
158- # Ataque inimigo
159- # Ataque inimigo — garante pelo menos 1 de dano
203+ # ----------------------------------
204+ # ATAQUE DO INIMIGO
205+ # ----------------------------------
160206 if inimigo .vida > 0 :
161207 dano_inimigo = max (inimigo .ataque - jogador .defesa , 1 )
162208 jogador .vida -= dano_inimigo
@@ -167,6 +213,9 @@ def iniciar_missao(jogo):
167213
168214 turno += 1
169215
216+ # ----------------------------------
217+ # RESULTADO FINAL
218+ # ----------------------------------
170219 resultado = "Vitória" if jogador .vida > 0 else "Derrota"
171220 print (f"\n === Fim da Missão ===\n Resultado: { resultado } " )
172221 jogo .logger .log_batalha (f"Resultado: { resultado } " )
@@ -203,6 +252,7 @@ def usar_item_em_combate(jogador, jogo):
203252
204253 jogador .vida += item .valor
205254 print (f"Você usou { item .nome } e recuperou { item .valor } HP!" )
255+
206256 jogo .logger .log_batalha (f"{ jogador .nome } usou { item .nome } (+{ item .valor } HP)." )
207257 inventario .remover_item (item )
208258
@@ -215,5 +265,6 @@ def usar_item_em_combate(jogador, jogo):
215265def ajuda_missao () -> None :
216266 print ("\n Ajuda — Missão" )
217267 print ("- Selecione dificuldade e cenário." )
218- print ("- Durante a missão, use [1] Atacar, [2] Usar item, [3] Fugir." )
219- print ("- Poções curam HP fixo." )
268+ print ("- Cada cenário tem seus inimigos específicos." )
269+ print ("- Dificuldade aumenta vida, ataque e defesa do inimigo." )
270+ print ("- Use poções no combate quando necessário." )
0 commit comments