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() ]; } } }