diff --git a/PartidaModelo.php b/PartidaModelo.php new file mode 100644 index 0000000..0221972 --- /dev/null +++ b/PartidaModelo.php @@ -0,0 +1,37 @@ +conexion = $conexion; + } + + // Obtiene los jugadores mapeados en la partida actual + public function obtenerJugadoresPartida($idPartida) { + $stmt = $this->conexion->prepare(" + SELECT u.idUsuario, u.nombreUsuario, e.idEquipo, e.nombreEquipo + FROM equipoxpartida exp + INNER JOIN equipoxusuario exu ON exp.idEquipo = exu.idEquipo + INNER JOIN usuario u ON exu.idUsuario = u.idUsuario + INNER JOIN equipo e ON exu.idEquipo = e.idEquipo + WHERE exp.idPartida = :idPartida + "); + $stmt->execute([':idPartida' => $idPartida]); + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } + + // Obtiene las respuestas guardadas por un usuario específico + public function obtenerRespuestasUsuario($idPartida, $idUsuario) { + $stmtRespuestas = $this->conexion->prepare(" + SELECT ra.idPartidaxPregunta, r.correcta + FROM respuestaalmacenada ra + INNER JOIN respuesta r ON ra.idRespuesta = r.idRespuesta + INNER JOIN partidaxpregunta pxp ON ra.idPartidaxPregunta = pxp.idPartidaxPregunta + WHERE pxp.idPartida = :idPartida AND ra.idUsuario = :idUsuario + "); + $stmtRespuestas->execute([':idPartida' => $idPartida, ':idUsuario' => $idUsuario]); + return $stmtRespuestas->fetchAll(PDO::FETCH_ASSOC); + } +} diff --git a/resultados.php b/resultados.php index 1c82ba8..e9aa2c5 100644 --- a/resultados.php +++ b/resultados.php @@ -1,6 +1,8 @@ prepare(" - SELECT u.idUsuario, u.nombreUsuario, e.idEquipo, e.nombreEquipo - FROM equipoxpartida exp - INNER JOIN equipoxusuario exu ON exp.idEquipo = exu.idEquipo - INNER JOIN usuario u ON exu.idUsuario = u.idUsuario - INNER JOIN equipo e ON exu.idEquipo = e.idEquipo - WHERE exp.idPartida = :idPartida -"); -$stmt->execute([':idPartida' => $idPartida]); -$listaJugadoresRaw = $stmt->fetchAll(PDO::FETCH_ASSOC); +// Instanciamos el modelo +$modelo = new PartidaModelo($conexion); +// Obtenemos datos crudos del modelo +$listaJugadoresRaw = $modelo->obtenerJugadoresPartida($idPartida); $primerosEnAcertar = $_SESSION['primeros_en_acertar'][$idPartida] ?? []; $jugadoresFinales = []; $equiposFinales = []; -// Respuestas de velocidad (+2 o +1) procesadas en la capa de la vista +// Procesamiento de la lógica de negocio (puntos y velocidad) foreach ($listaJugadoresRaw as $jugador) { $idU = (int)$jugador['idUsuario']; $idE = (int)$jugador['idEquipo']; - $stmtRespuestas = $conexion->prepare(" - SELECT ra.idPartidaxPregunta, r.correcta - FROM respuestaalmacenada ra - INNER JOIN respuesta r ON ra.idRespuesta = r.idRespuesta - INNER JOIN partidaxpregunta pxp ON ra.idPartidaxPregunta = pxp.idPartidaxPregunta - WHERE pxp.idPartida = :idPartida AND ra.idUsuario = :idUsuario - "); - $stmtRespuestas->execute([':idPartida' => $idPartida, ':idUsuario' => $idU]); - $respuestasUsuario = $stmtRespuestas->fetchAll(PDO::FETCH_ASSOC); + $respuestasUsuario = $modelo->obtenerRespuestasUsuario($idPartida, $idU); $aciertos = 0; $puntosTotalesJugador = 0; @@ -52,6 +39,7 @@ foreach ($listaJugadoresRaw as $jugador) { $aciertos++; $idPxp = $resp['idPartidaxPregunta']; + // Regula si es el más rápido (+2) o normal (+1) if (isset($primerosEnAcertar[$idPxp]) && $primerosEnAcertar[$idPxp] === $idU) { $puntosTotalesJugador += 2; } else { @@ -76,86 +64,8 @@ foreach ($listaJugadoresRaw as $jugador) { $equiposFinales[$idE]['puntos'] += $puntosTotalesJugador; } +// Ordenaciones de rankings usort($jugadoresFinales, function($a, $b) { return $b['puntos'] <=> $a['puntos']; }); usort($equiposFinales, function($a, $b) { return $b['puntos'] <=> $a['puntos']; }); -?> - - -
- - -Calculando estadísticas de velocidad y actualizando perfiles históricos en el servidor.
- -Calculando estadísticas de velocidad y actualizando perfiles históricos en el servidor.
+ +