// Lógica de juego.php // Carga las preguntas de la partida, las muestra de una en una, // guarda cada respuesta en el servidor y al terminar lleva a resultados.php const URL_CONTROLADOR = "controladores/ControladorJuego.php"; const PAUSA_FEEDBACK = 1800; // ms que se ve si has acertado o fallado // Colores y formas de los botones (estilo Kahoot, definidos en juego.css) const ESTILOS_BOTON = [ { color: "red", forma: "triangle" }, { color: "blue", forma: "diamond" }, { color: "yellow", forma: "circle" }, { color: "green", forma: "square" }, ]; let idPartida = 0; let preguntas = []; let indice = 0; // pregunta que se está mostrando let bloqueado = false; // true mientras se envía una respuesta o se ve el feedback let numeroAciertos = 0; // número de aciertos del jugador $(document).ready(function () { idPartida = parseInt($("body").data("id-partida"), 10); // Un solo listener para todos los botones de respuesta $("#respuestas").on("click", ".btn-answer", function () { responder($(this)); }); cargarPreguntas(); }); // 1. Pedir las preguntas al servidor function cargarPreguntas() { $.ajax({ url: URL_CONTROLADOR, type: "POST", dataType: "json", data: { orden: "cargarPreguntas", idPartida: idPartida }, success: function (datos) { if (datos.error) { mostrarError(datos.error); return; } preguntas = datos.preguntas; if (preguntas.length === 0) { mostrarError("Esta partida no tiene preguntas."); return; } // Retomamos por la primera pregunta sin responder (por si recarga la página) indice = preguntas.findIndex(function (p) { return !p.respondida; }); if (indice === -1) { irAResultados(); return; } mostrarPregunta(); }, error: function () { mostrarError("No se pudo conectar con el servidor."); }, }); } // 2. Pintar la pregunta actual y sus respuestas function mostrarPregunta() { const pregunta = preguntas[indice]; bloqueado = false; $("#textoPregunta").text(pregunta.nombrePregunta); $("#feedback").text("").removeClass("ok ko"); $("#contadorPregunta").text( "Pregunta " + (indice + 1) + " de " + preguntas.length, ); $("#barraProgreso").css("width", (indice / preguntas.length) * 100 + "%"); const $respuestas = $("#respuestas").empty(); pregunta.respuestas.forEach(function (respuesta, i) { const estilo = ESTILOS_BOTON[i % ESTILOS_BOTON.length]; // .text() y createTextNode evitan que el texto de la BD se interprete como HTML const $boton = $("