# Class Partida

java.lang.Object
Modelo.Partida

public class Partida extends Object
Representa una sesión concreta de juego. Coordina el flujo de la partida: gestión de turnos, estados y resultados. Una partida puede estar en curso, pausada o finalizada.

Version:
  2.0
Author:
  JP-Aceves

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `private EstadoPartida`
  `estadoActual`
  Estado actual de la partida: EN_CURSO, PAUSADA o FINALIZADA.
  `private LocalDate`
  `fecha`
  Fecha de inicio de la partida.
  `private LocalDate`
  `fechaFin`
  Fecha de finalización de la partida.
  `private int`
  `id`
  Identificador único de la partida.
  `private Juego`
  `juego`
  Juego al que se está jugando en esta partida.
  `private ArrayList<Usuario>`
  `listaJugadores`
  Lista de jugadores que participan en la partida.
  `private int`
  `turnoActual`
  Índice del jugador que tiene el turno actual en `listaJugadores`.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Partida(int id, Juego juego, ArrayList<Usuario> listaJugadores)`
  Crea una nueva partida en estado EN_CURSO.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `contieneJugador(Usuario u)`
  Comprueba si un usuario participa en esta partida.
  `void`
  `finalizar()`
  Finaliza la partida cambiando su estado a FINALIZADA y registrando la fecha de fin.
  `EstadoPartida`
  `getEstadoActual()`
  `LocalDate`
  `getFecha()`
  `LocalDate`
  `getFechaFin()`
  `Usuario`
  `getGanador()`
  Devuelve el jugador con mayor puntuación al final de la partida.
  `int`
  `getId()`
  `Juego`
  `getJuego()`
  `Usuario`
  `getJugadorActual()`
  Devuelve el usuario que tiene el turno actual.
  `ArrayList<Usuario>`
  `getListaJugadores()`
  `int`
  `getPuntuacion(Usuario u)`
  Devuelve la puntuación actual de un jugador delegando en el juego.
  `ArrayList<PuntuacionJugador>`
  `getPuntuaciones()`
  Devuelve la lista completa de puntuaciones de todos los jugadores.
  `void`
  `pausar()`
  Pausa la partida cambiando su estado a PAUSADA.
  `void`
  `reanudar(String estadoSerializado)`
  Reanuda una partida pausada restaurando el estado del juego.
  `void`
  `siguienteTurno()`
  Avanza al siguiente turno de forma circular.
  `String`
  `toString()`
  Devuelve una representación legible de la partida con id, juego, fecha y estado.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Field Details

  - ### id

    private int id
    Identificador único de la partida.

  - ### fecha

    private LocalDate fecha
    Fecha de inicio de la partida.

  - ### fechaFin

    private LocalDate fechaFin
    Fecha de finalización de la partida. Null mientras no haya terminado.

  - ### turnoActual

    private int turnoActual
    Índice del jugador que tiene el turno actual en `listaJugadores`.

  - ### estadoActual

    private EstadoPartida estadoActual
    Estado actual de la partida: EN_CURSO, PAUSADA o FINALIZADA.

  - ### juego

    private Juego juego
    Juego al que se está jugando en esta partida.

  - ### listaJugadores

    private ArrayList<Usuario> listaJugadores
    Lista de jugadores que participan en la partida.

- ## Constructor Details

  - ### Partida

    public Partida(int id, Juego juego, ArrayList<Usuario> listaJugadores)
    Crea una nueva partida en estado EN_CURSO. La fecha de inicio se registra automáticamente en el momento de creación.
    Parameters:
      `id` - identificador único de la partida
      `juego` - juego al que se va a jugar
      `listaJugadores` - lista de usuarios que participan

- ## Method Details

  - ### pausar

    public void pausar()
    Pausa la partida cambiando su estado a PAUSADA. El estado del juego debe ser serializado por `GestorPartidas` llamando a `getJuego().serializarEstado()` tras este método.

  - ### reanudar

    public void reanudar(String estadoSerializado)
    Reanuda una partida pausada restaurando el estado del juego.
    Parameters:
      `estadoSerializado` - String con el estado guardado previamente

  - ### finalizar

    public void finalizar()
    Finaliza la partida cambiando su estado a FINALIZADA y registrando la fecha de fin.

  - ### getJugadorActual

    public Usuario getJugadorActual()
    Devuelve el usuario que tiene el turno actual.
    Returns:
      usuario cuyo turno es el actual

  - ### siguienteTurno

    public void siguienteTurno()
    Avanza al siguiente turno de forma circular. Cuando llega al último jugador vuelve al primero.

  - ### contieneJugador

    public boolean contieneJugador(Usuario u)
    Comprueba si un usuario participa en esta partida.
    Parameters:
      `u` - usuario a buscar
    Returns:
      `true` si el usuario está en la partida, `false` en caso contrario

  - ### getPuntuacion

    public int getPuntuacion(Usuario u)
    Devuelve la puntuación actual de un jugador delegando en el juego.
    Parameters:
      `u` - usuario del que se quiere la puntuación
    Returns:
      puntuación del usuario en el juego actual

  - ### getPuntuaciones

    public ArrayList<PuntuacionJugador> getPuntuaciones()
    Devuelve la lista completa de puntuaciones de todos los jugadores.
    Returns:
      lista de `PuntuacionJugador`

  - ### getGanador

    public Usuario getGanador()
    Devuelve el jugador con mayor puntuación al final de la partida.
    Returns:
      usuario ganador, o `null` si no hay jugadores

  - ### getId

    public int getId()
    Returns:
      identificador único de la partida

  - ### getFecha

    public LocalDate getFecha()
    Returns:
      fecha de inicio de la partida

  - ### getFechaFin

    public LocalDate getFechaFin()
    Returns:
      fecha de finalización de la partida, o `null` si no ha terminado

  - ### getEstadoActual

    public EstadoPartida getEstadoActual()
    Returns:
      estado actual de la partida

  - ### getJuego

    public Juego getJuego()
    Returns:
      juego asociado a esta partida

  - ### getListaJugadores

    public ArrayList<Usuario> getListaJugadores()
    Returns:
      lista de usuarios que participan en la partida

  - ### toString

    public String toString()
    Devuelve una representación legible de la partida con id, juego, fecha y estado.
    Overrides:
      `toString` in class `Object`
    Returns:
      String con los datos principales de la partida