RetroGame / puzzle_generator.py
Lukeetah's picture
Create puzzle_generator.py
1256289 verified
# puzzle_generator.py
import random
from typing import Dict, List, Tuple
class CulturalPuzzleEngine:
"""Generador de acertijos basados en cultura argentina"""
def __init__(self):
self.puzzle_db = self._load_cultural_database()
self.quantum_entanglements = {}
def _load_cultural_database(self) -> Dict[str, dict]:
return {
'refranes': {
'source': 'Dichos populares argentinos',
'data': [
('Más perdido que', 'un perro en una cancha de bochas'),
('Al que madruga...', 'Dios lo ayuda'),
('Cuando el río suena...', 'piedras trae')
]
},
'historia': {
'source': 'Eventos históricos clave',
'data': [
('Año de la Revolución de Mayo', '1810'),
('Batalla de Tucumán', '1812'),
('Ley de Educación Común', '1884')
]
},
'geografia': {
'source': 'Geografía argentina',
'data': [
('Provincia del fin del mundo', 'Tierra del Fuego'),
('Río que separa Buenos Aires de Uruguay', 'Uruguay'),
('Cumbre más alta de América', 'Aconcagua')
]
}
}
def generate_dynamic_puzzle(self, puzzle_type: str) -> Tuple[str, str]:
"""Genera un acertijo cultural con solución entrelazada"""
category = self.puzzle_db.get(puzzle_type)
if not category:
raise ValueError("Categoría de acertijo no válida")
puzzle, solution = random.choice(category['data'])
puzzle_id = f"{puzzle_type}_{hash(puzzle)}"
self.quantum_entanglements[puzzle_id] = solution
return (
f"{puzzle} (Responde con la solución culturalmente apropiada)",
puzzle_id
)
def verify_solution(self, puzzle_id: str, attempt: str) -> bool:
"""Verifica la solución usando entrelazamiento cuántico"""
return self.quantum_entanglements.get(puzzle_id, "").lower() == attempt.lower()
class DynamicWorldPuzzle:
"""Sistema de acertijos integrados en el mundo del juego"""
def __init__(self):
self.puzzle_engine = CulturalPuzzleEngine()
self.active_puzzles = {}
def spawn_puzzle(self, biome: str, difficulty: int) -> dict:
"""Genera un acertijo contextual al bioma actual"""
puzzle_types = {
'pampa': ['refranes', 'historia'],
'patagonia': ['geografia', 'historia'],
'quebrada': ['refranes', 'geografia']
}
selected_type = random.choice(puzzle_types[biome])
puzzle_text, puzzle_id = self.puzzle_engine.generate_dynamic_puzzle(selected_type)
self.active_puzzles[puzzle_id] = {
'biome': biome,
'difficulty': difficulty,
'solved': False,
'timestamp': time.time()
}
return {
'puzzle_id': puzzle_id,
'text': puzzle_text,
'hints': self._generate_hints(selected_type, puzzle_id)
}
def _generate_hints(self, category: str, puzzle_id: str) -> List[str]:
"""Genera pistas contextuales basadas en cultura argentina"""
hints = []
solution = self.puzzle_engine.quantum_entanglements[puzzle_id]
if category == 'refranes':
hints.append("Piensa en sabiduría popular transmitida oralmente")
elif category == 'historia':
hints.append("Consulta fechas clave de la historia argentina")
return hints[:2]