import json
from factory import QuestaoFactory
from jogo import Jogo
class QuizApp(Jogo):
# Singleton
_instancia = None
_inicializado = False
def __new__(cls, *args, **kwargs):
if cls._instancia is None:
cls._instancia = super().__new__(cls)
return cls._instancia
def __init__(self, caminho_arquivo: str):
# Evita reinicialização do Singleton
if QuizApp._inicializado:
return
self.questoes_totais = []
self.questoes_para_jogar = []
[Link] = 0
self.carregar_dados(caminho_arquivo)
QuizApp._inicializado = True
def carregar_dados(self, caminho_arquivo: str):
try:
with open(caminho_arquivo, 'r', encoding='utf-8') as arquivo:
dados_json = [Link](arquivo)
for item in dados_json['quiz_data']:
questao = QuestaoFactory.criar_questao(item)
self.questoes_totais.append(questao)
except FileNotFoundError:
print(f"Erro: O arquivo '{caminho_arquivo}' não foi encontrado.")
exit()
# ==========================
# Template Method
# ==========================
def configurar(self):
self.configurar_jogo()
def jogar(self):
print(" INICIO DO QUIZ ".center(40, "="))
if not self.questoes_para_jogar:
print("Nenhuma questão encontrada com esses filtros.")
return
for questao in self.questoes_para_jogar:
questao.exibir_pergunta()
acertou = [Link]()
✅
if acertou:
print(" Resposta CORRETA!")
[Link] += 10 * [Link]
❌
else:
print(" Resposta INCORRETA!")
def finalizar(self):
self.exibir_resultado()
# ==========================
# Regras do Quiz
# ==========================
def configurar_jogo(self):
print(" MENU DO QUIZ ".center(40, "="))
categorias_disponiveis = list(
set([Link] for q in self.questoes_totais)
)
print("\nEscolha a Categoria:")
print("0) Todas as categorias")
for i, cat in enumerate(categorias_disponiveis, 1):
print(f"{i}) {[Link]()}")
try:
op_cat = int(input("Opção: "))
cat_escolhida = (
categorias_disponiveis[op_cat - 1]
if op_cat > 0
else None
)
except:
cat_escolhida = None
dificuldades_disponiveis = sorted(
set([Link] for q in self.questoes_totais)
)
print("\nEscolha a Dificuldade:")
print("0) Todas as dificuldades")
for i, dif in enumerate(dificuldades_disponiveis, 1):
print(f"{i}) Nível {dif}")
try:
op_dif = int(input("Opção: "))
dif_escolhida = (
dificuldades_disponiveis[op_dif - 1]
if op_dif > 0
else None
)
except:
dif_escolhida = None
print("\nEscolha o Tipo de Questão:")
print("0) Todos os tipos")
print("1) Apenas escolha simples")
print("2) Apenas múltipla escolha")
try:
tipo_escolhido = int(input("Opção: "))
except:
tipo_escolhido = 0
self.questoes_para_jogar = []
for q in self.questoes_totais:
# Categoria
if cat_escolhida and [Link] != cat_escolhida:
continue
# Dificuldade
if dif_escolhida and [Link] != dif_escolhida:
continue
# Tipo
if tipo_escolhido == 1 and [Link]:
continue
if tipo_escolhido == 2 and not [Link]:
continue
self.questoes_para_jogar.append(q)
def exibir_resultado(self):
print(" FIM DO QUIZ ".center(40, "="))
print(
f"Você respondeu {len(self.questoes_para_jogar)} perguntas."
)
print(
f"Sua pontuação final foi: {[Link]} pontos."
)