79 lines
3.3 KiB
PHP
79 lines
3.3 KiB
PHP
<?php
|
|
require_once '../includes/conexionBD.php';
|
|
|
|
// Clase encargada de registrar las respuestas de los jugadores en tiempo real durante la partida
|
|
class RespuestaAlmacenada {
|
|
public $idRespuestaAlmacenada;
|
|
public $idPartidaxPregunta;
|
|
public $idUsuario;
|
|
public $idRespuesta;
|
|
public $primero; // Indica con 1 o 0 si fue el más rápido en responder correctamente
|
|
|
|
public function __construct($idRespuestaAlmacenada = null, $idPartidaxPregunta = null, $idUsuario = null, $idRespuesta = null, $primero = 0) {
|
|
$this->idRespuestaAlmacenada = $idRespuestaAlmacenada;
|
|
$this->idPartidaxPregunta = $idPartidaxPregunta;
|
|
$this->idUsuario = $idUsuario;
|
|
$this->idRespuesta = $idRespuesta;
|
|
$this->primero = $primero;
|
|
}
|
|
|
|
/**
|
|
* Guarda la respuesta que ha seleccionado un usuario en una pregunta de la partida.
|
|
*/
|
|
public function guardarRespuesta() {
|
|
$conexion = conexionBD();
|
|
if (is_array($conexion)) return $conexion;
|
|
|
|
try {
|
|
$sql = "INSERT INTO respuestaalmacenada (idPartidaxPregunta, idUsuario, idRespuesta, primero)
|
|
VALUES (:idPartidaxPregunta, :idUsuario, :idRespuesta, :primero)";
|
|
$consulta = $conexion->prepare($sql);
|
|
|
|
$consulta->bindParam(':idPartidaxPregunta', $this->idPartidaxPregunta);
|
|
$consulta->bindParam(':idUsuario', $this->idUsuario);
|
|
$consulta->bindParam(':idRespuesta', $this->idRespuesta);
|
|
$consulta->bindParam(':primero', $this->primero, PDO::PARAM_INT);
|
|
$consulta->execute();
|
|
|
|
return [
|
|
'exito' => 'Respuesta del usuario almacenada correctamente.',
|
|
'exito_tecnico' => $conexion->lastInsertId()
|
|
];
|
|
} catch (PDOException $error) {
|
|
return [
|
|
'error' => 'Ocurrió un error al guardar la respuesta del jugador.',
|
|
'error_tecnico' => $error->getMessage()
|
|
];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Obtiene los aciertos totales de un usuario en una partida específica.
|
|
* Útil para calcular las estadísticas individuales al terminar el juego.
|
|
*/
|
|
public static function obtenerAciertosUsuarioEnPartida($idPartida, $idUsuario) {
|
|
$conexion = conexionBD();
|
|
if (is_array($conexion)) return $conexion;
|
|
|
|
try {
|
|
$sql = "SELECT COUNT(*) AS aciertos
|
|
FROM respuestaalmacenada ra
|
|
INNER JOIN partidaxpregunta pxp ON ra.idPartidaxPregunta = pxp.idPartidaxPregunta
|
|
INNER JOIN respuesta r ON ra.idRespuesta = r.idRespuesta
|
|
WHERE pxp.idPartida = :idPartida AND ra.idUsuario = :idUsuario AND r.correcta = 1";
|
|
|
|
$consulta = $conexion->prepare($sql);
|
|
$consulta->bindParam(':idPartida', $idPartida);
|
|
$consulta->bindParam(':idUsuario', $idUsuario);
|
|
$consulta->execute();
|
|
|
|
$resultado = $consulta->fetch(PDO::FETCH_ASSOC);
|
|
return (int)$resultado['aciertos'];
|
|
} catch (PDOException $error) {
|
|
return [
|
|
'error' => 'Ocurrió un error al calcular los aciertos.',
|
|
'error_tecnico' => $error->getMessage()
|
|
];
|
|
}
|
|
}
|
|
} |