from shiny import App, ui, render, reactive import random # ========================= # Diccionario del juego UNTREF # ========================= acertijos = { 1: { "pista": "Universidad pública argentina con fuerte enfoque en inclusión y territorio", "respuesta": "untref" }, 2: { "pista": "Modalidad que combina instancias presenciales y virtuales en UNTREF", "respuesta": "sied" }, 3: { "pista": "Carrera vinculada al comercio exterior y redes globales", "respuesta": "relaciones comerciales internacionales" }, 4: { "pista": "Sistema institucional que regula la educación a distancia", "respuesta": "sied" }, 5: { "pista": "Tipo de universidad: pública, gratuita y con compromiso social", "respuesta": "publica" } } # ========================= # Estados reactivos # ========================= acertijo_actual = reactive.Value(1) resultado_estado = reactive.Value("") puntaje = reactive.Value(0) # ========================= # Interfaz # ========================= app_ui = ui.page_fluid( ui.h2("🎓 Desafío UNTREF"), ui.p("Respondé los acertijos sobre la universidad"), ui.hr(), ui.h4("📌 Pista"), ui.output_text("pista"), ui.input_text("respuesta", "Tu respuesta"), ui.input_action_button("verificar", "✅ Verificar respuesta"), ui.input_action_button("siguiente", "➡️ Siguiente desafío"), ui.hr(), ui.h4("🧠 Resultado"), ui.output_text("resultado"), ui.hr(), ui.h4("⭐ Puntaje"), ui.output_text("puntaje_actual") ) # ========================= # Servidor # ========================= def server(input, output, session): @output @render.text def pista(): return acertijos[acertijo_actual()]["pista"] @output @render.text def resultado(): return resultado_estado() @output @render.text def puntaje_actual(): return f"Puntaje: {puntaje()}" @reactive.effect @reactive.event(input.verificar) def verificar_respuesta(): respuesta_usuario = input.respuesta().lower().strip() respuesta_correcta = acertijos[acertijo_actual()]["respuesta"] if respuesta_usuario == respuesta_correcta: resultado_estado.set("✅ Correcto! Sumás 1 punto.") puntaje.set(puntaje() + 1) else: resultado_estado.set(f"❌ Incorrecto. Respuesta esperada: {respuesta_correcta}") @reactive.effect @reactive.event(input.siguiente) def siguiente_acertijo(): nuevo = random.choice(list(acertijos.keys())) acertijo_actual.set(nuevo) resultado_estado.set("") session.send_input_message("respuesta", {"value": ""}) # ========================= # App # ========================= app = App(app_ui, server)