Skip to content

Commit 368399a

Browse files
Merge branch 'main' into feature/personagens
2 parents c1f048a + 1f681d5 commit 368399a

16 files changed

+561
-794
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ignorar pasta de saves (não deve ir pro GitHub)
22
saves/**
3-
3+
logs/**
44
# ignorar pycache do Python
55
__pycache__/
66
/models/__pycache__

docs/checklist.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
## **SEMANA 1 — Fundamentos de POO**
22

3-
- [x] Classes básicas criadas;
4-
- [x] Construtores;
5-
- [x] Menu inicial;
6-
- [x] Fluxo principal funcionando;
7-
- [x] Versão jogável simples;
3+
- [X] Classes básicas criadas;
4+
- [X] Construtores;
5+
- [X] Menu inicial;
6+
- [X] Fluxo principal funcionando;
7+
- [X] Versão jogável simples;
88

99
## **SEMANA 2 — Regras, Coleções e Funções**
1010

11-
- [x] Uso de listas e dicionários (Invetário ainda não está totalmente integrado)
11+
- [X] Uso de listas e dicionários (Invetário ainda não está totalmente integrado)
1212
- [ ] Módulo random (Existe pacialmente nas missões, isso é sorteio de inimigos, itens e missões)
1313
- [ ] Combate completo com turnos detalhados
14-
Está **incompleto / sem detalhamento. Falta: Turnos (Detalha mais quem está recebendo o dando e quem está recebendo), implementa a recompensa, randomizar melhor o combate e itens recebidos.**
15-
- [ ] Inventário funcional (Escolhe itens do invetário);
16-
- [ ] Sistema de cura/mana (através do inventário com itens de cura);
17-
- [x] Validações no menu;
14+
Está **incompleto / sem detalhamento. Falta: Turnos (Detalha mais quem está recebendo o dando e quem está recebendo), implementa a recompensa, randomizar melhor o combate e itens recebidos.**
15+
- [X] Inventário funcional (Escolhe itens do invetário);
16+
- [X] Sistema de cura/mana (através do inventário com itens de cura);
17+
- [X] Validações no menu;
1818

1919
##### **Entregável:**
2020

@@ -23,12 +23,12 @@ logs de turnos de batalha.
2323

2424
## **SEMANA 3 — Polimorfismo, Herança e Persistência**
2525

26-
- [x] Subclasses (Guerreiro e Mago);
27-
- [x] Arqueiro / Chefão / Outros (Existe **parcialmente**)
26+
- [X] Subclasses (Guerreiro e Mago);
27+
- [X] Arqueiro / Chefão / Outros (Existe **parcialmente**)
2828
- [ ] Métodos sobrescritos avançados (Guerreiro e Mago possuem habilidades diferentes, mas ainda muito simples) (**Junto do Modulo de Random, vocês diversificam os ataques**).
29-
- [x] Persistência JSON (100% Funcional, salvar e carregar).
30-
- [ ] Logger (ainda não existe; ou está funcional).
31-
- [x] Polimorfismo básico (Parte do Guerreiro e mago, ataque).
29+
- [X] Persistência JSON (100% Funcional, salvar e carregar).
30+
- [X] Logger (ainda não existe; ou está funcional).
31+
- [X] Polimorfismo básico (Parte do Guerreiro e mago, ataque).
3232

3333
##### **Entregável:**
3434

@@ -40,27 +40,27 @@ Versão final do jogo com hierarquia OO, logs e persistência de dados.
4040

4141
**Requisito obrigatório.**
4242

43-
- [x] Existe combate básico.
44-
- [ ] Exibe turnos.
45-
- [ ] Exibe HP restante por turno.
46-
- [ ] Mostra dano aplicado.
47-
- [ ] Imprime resultado completo.
43+
- [X] Existe combate básico.
44+
- [X] Exibe turnos.
45+
- [X] Exibe HP restante por turno.
46+
- [X] Mostra dano aplicado.
47+
- [X] Imprime resultado completo.
4848
- [ ] Dá loot completo.
4949

5050
---
5151

5252
### **O que falta Menu?**
5353

54-
- [ ] Repositorio (**Não estamos usando "Repositorio"** , e sim apenas salvamento.py procedural.)
55-
- [ ] Logger. (**Não existe ainda.)**
54+
- [X] Repositorio (**Não estamos usando "Repositorio"** , e sim apenas salvamento.py procedural.)
55+
- [X] Logger. (**Não existe ainda.)**
5656

5757
---
5858

5959
### O que falta Personagem e Missão?
6060

61-
- [x] Criar personagem.
62-
- [x] Escolher classe (Guerreiro e Mago).
63-
- [ ] Inventário funcional completo.
64-
- [x] Missão básica (fluxo existe, mas ainda quebrado).
61+
- [X] Criar personagem.
62+
- [X] Escolher classe (Guerreiro e Mago).
63+
- [X] Inventário funcional completo.
64+
- [X] Missão básica (fluxo existe, mas ainda quebrado).
6565
- [ ] XP, nível, evolução.
6666
- [ ] Recompensas (loot) completas.

main.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,42 @@
11
from __future__ import annotations
22
from models.jogo import Jogo
3+
from models.controle_logs import menu_logs
34

45

56
def menu() -> None:
6-
"""Exibe o menu principal do jogo e gerencia a navegação entre opções.
7+
"""Exibe o menu principal do jogo e gerencia a navegação.
78
8-
Cria uma instância da classe `Jogo` e permite que o jogador interaja
9-
com as principais funcionalidades do sistema, como criação de personagem,
10-
seleção de missões e simulação de salvamento/carregamento.
9+
Cria uma instância da classe `Jogo` e permite ao jogador acessar:
10+
- criação de personagem,
11+
- missões,
12+
- salvamento,
13+
- carregamento.
1114
12-
Loop contínuo até que o usuário opte por encerrar o programa.
15+
Loop contínuo até que o usuário escolha sair.
1316
"""
1417
jogo = Jogo()
1518

1619
while True:
1720
print("\n=== RPG OO — Menu Principal ===")
18-
print("[1] Menu do personagem")
19-
print("[2] Encarar missão")
21+
print("[1] Criar personagem")
22+
print("[2] Missão")
2023
print("[3] Salvar")
2124
print("[4] Carregar")
25+
print("[5] Visualizar logs")
2226
print("[0] Sair")
2327

2428
op = input("> ").strip()
2529

2630
if op == "1":
27-
jogo.menu_personagem()
31+
jogo.criar_personagem()
2832
elif op == "2":
2933
jogo.menu_missao()
3034
elif op == "3":
3135
jogo.menu_salvar()
3236
elif op == "4":
3337
jogo.menu_carregar()
38+
elif op == "5":
39+
menu_logs(jogo)
3440
elif op == "0":
3541
print("Até logo!")
3642
break
@@ -41,7 +47,6 @@ def menu() -> None:
4147
if __name__ == "__main__":
4248
"""Ponto de entrada principal do programa.
4349
44-
Executa a função `menu()` caso o script seja chamado diretamente,
45-
inicializando o fluxo principal do jogo.
50+
Executa `menu()` caso o arquivo seja executado diretamente.
4651
"""
47-
menu()
52+
menu()

models/aventura_classes.py

Lines changed: 0 additions & 78 deletions
This file was deleted.

models/controle_logs.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# models/controle_logs.py
2+
3+
4+
def menu_logs(jogo):
5+
if not hasattr(jogo, "logger") or jogo.logger is None:
6+
print("⚠ Logger não inicializado.")
7+
return
8+
9+
while True:
10+
print("\n=== LOGS DO JOGO ===")
11+
print("[1] Ver todos os logs")
12+
print("[5] Limpar logs")
13+
print("[0] Voltar")
14+
15+
op = input("> ").strip()
16+
17+
if op == "1":
18+
exibir_logs(jogo.logger.eventos)
19+
20+
elif op == "5":
21+
confirmar_limpar_logs(jogo)
22+
23+
elif op == "0":
24+
break
25+
else:
26+
print("Opção inválida.")
27+
28+
29+
# -----------------------------------------------------
30+
# EXIBIÇÃO E PAGINAÇÃO DE LOGS
31+
# -----------------------------------------------------
32+
33+
34+
def exibir_logs(lista_logs):
35+
if not lista_logs:
36+
print("\n(sem registros)")
37+
return
38+
39+
tamanho = len(lista_logs)
40+
pagina = 0
41+
por_pagina = 10
42+
43+
while True:
44+
inicio = pagina * por_pagina
45+
fim = inicio + por_pagina
46+
47+
print("\n=== LOGS ===")
48+
for linha in lista_logs[inicio:fim]:
49+
print("- " + linha)
50+
51+
print(f"\nPágina {pagina + 1} / {((tamanho - 1) // por_pagina) + 1}")
52+
print("[N] próxima página | [P] página anterior | [0] voltar")
53+
54+
op = input("> ").strip().lower()
55+
56+
if op == "n":
57+
if fim < tamanho:
58+
pagina += 1
59+
elif op == "p":
60+
if pagina > 0:
61+
pagina -= 1
62+
elif op == "0":
63+
break
64+
else:
65+
print("Opção inválida.")
66+
67+
68+
# -----------------------------------------------------
69+
# LIMPAR LOGS
70+
# -----------------------------------------------------
71+
72+
73+
def confirmar_limpar_logs(jogo):
74+
print("\nTem certeza que deseja APAGAR todos os logs?")
75+
print("[1] Sim")
76+
print("[0] Não")
77+
op = input("> ").strip()
78+
79+
if op == "1":
80+
jogo.logger.eventos.clear()
81+
print("✔ Todos os logs foram apagados.")
82+
else:
83+
print("Operação cancelada.")

models/inventario.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# =====================================================
2+
# CLASSE ITEM
3+
# =====================================================
4+
class Item:
5+
"""
6+
Representa um item do jogo, por enquanto apenas poções de cura.
7+
"""
8+
9+
def __init__(self, nome: str, valor: int):
10+
"""
11+
Args:
12+
nome (str): Nome do item.
13+
valor (int): Valor do efeito (ex: quantidade de HP que recupera).
14+
"""
15+
self.nome = nome
16+
self.valor = valor
17+
18+
def __repr__(self):
19+
return f"<Item: {self.nome}, Valor: {self.valor}>"
20+
21+
22+
# =====================================================
23+
# CLASSE INVENTÁRIO
24+
# =====================================================
25+
class Inventario:
26+
"""
27+
Inventário de um personagem. Guarda itens e permite adicionar/remover.
28+
"""
29+
30+
def __init__(self):
31+
self.itens: list[Item] = []
32+
33+
def adicionar_item(self, item: Item):
34+
"""Adiciona um item ao inventário."""
35+
self.itens.append(item)
36+
37+
def remover_item(self, item: Item):
38+
"""Remove um item do inventário, se existir."""
39+
if item in self.itens:
40+
self.itens.remove(item)
41+
42+
def listar_itens(self) -> list[Item]:
43+
"""Retorna a lista de itens atuais."""
44+
return self.itens
45+
46+
def esta_vazio(self) -> bool:
47+
"""Retorna True se o inventário estiver vazio."""
48+
return len(self.itens) == 0

models/itens.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# models/itens.py
2+
3+
ITENS = {
4+
"pocao_pequena": {"nome": "Poção Pequena", "cura": 20},
5+
"pocao_media": {"nome": "Poção Média", "cura": 40},
6+
"pocao_grande": {"nome": "Poção Grande", "cura": 80},
7+
}

0 commit comments

Comments
 (0)