# Class Juego

java.lang.Object
Modelo.Juego

Direct Known Subclasses:
  `PasaPalabra, tresenraya, TresEnRaya`

public abstract class Juego extends Object
Clase abstracta que representa un juego genérico dentro de la aplicación.

Define la estructura común a todos los juegos (nombre, estado de finalización y puntuaciones por jugador) y declara los métodos abstractos que cada subclase debe implementar con su propia lógica de juego.

Version:
  1.0
Author:
  JP

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected String`
  `descripcion`
  Descripción breve del juego mostrada en el menú de selección.
  `protected boolean`
  `juegoFinalizado`
  Indica si el juego ha finalizado.
  `(package private) ArrayList<PuntuacionJugador>`
  `listaPuntuacionPorJugador`
  Lista de puntuaciones de cada jugador participante en la partida actual.
  `protected String`
  `nombreJuego`
  Nombre identificador del juego (ej: "PasaPalabra", "TresEnRaya").

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Juego(String nombreJuego, String descripcion, boolean juegoFinalizado)`
  Constructor de la clase Juego.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `abstract void`
  `deserializarEstado(String estado)`
  Reconstruye el estado del juego a partir del String guardado en disco.
  `String`
  `getDescripcion()`
  Devuelve la descripción del juego.
  `abstract String`
  `getEstadoTexto()`
  Devuelve una representación en texto del estado actual del juego.
  `String`
  `getNombre()`
  Devuelve el nombre del juego.
  `int`
  `getPuntuacion(String username)`
  Devuelve la puntuación actual del jugador con el username indicado.
  `ArrayList<PuntuacionJugador>`
  `getPuntuaciones()`
  Devuelve la lista completa de puntuaciones de todos los jugadores.
  `abstract void`
  `inicializar()`
  Inicializa el estado del juego antes de empezar una partida.
  `boolean`
  `isTerminado()`
  Indica si el juego ha finalizado.
  `abstract String`
  `serializarEstado()`
  Serializa el estado actual del juego en un String para guardarlo en disco cuando la partida se pausa.
  `void`
  `sumarPuntos(String username, int n)`
  Suma n puntos al jugador con el username indicado.
  `abstract void`
  `terminar()`
  Marca el juego como finalizado.

  ### Methods inherited from class Object

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

- ## Field Details

  - ### nombreJuego

    protected String nombreJuego
    Nombre identificador del juego (ej: "PasaPalabra", "TresEnRaya").

  - ### descripcion

    protected String descripcion
    Descripción breve del juego mostrada en el menú de selección.

  - ### juegoFinalizado

    protected boolean juegoFinalizado
    Indica si el juego ha finalizado. Se pone a true al llamar a terminar().

  - ### listaPuntuacionPorJugador

    ArrayList<PuntuacionJugador> listaPuntuacionPorJugador
    Lista de puntuaciones de cada jugador participante en la partida actual.

- ## Constructor Details

  - ### Juego

    public Juego(String nombreJuego, String descripcion, boolean juegoFinalizado)
    Constructor de la clase Juego.
    Parameters:
      `nombreJuego` - Nombre del juego.
      `descripcion` - Descripción breve del juego.
      `juegoFinalizado` - Estado inicial del juego (siempre se inicializa a false).

- ## Method Details

  - ### inicializar

    public abstract void inicializar()
    Inicializa el estado del juego antes de empezar una partida. Cada subclase define qué significa inicializar: cargar preguntas, limpiar el tablero, resetear contadores, etc.

  - ### getEstadoTexto

    public abstract String getEstadoTexto()
    Devuelve una representación en texto del estado actual del juego. La vista utiliza este método para mostrar la información al jugador sin conocer los detalles internos de cada juego.
    Returns:
      String con el estado actual del juego.

  - ### serializarEstado

    public abstract String serializarEstado()
    Serializa el estado actual del juego en un String para guardarlo en disco cuando la partida se pausa. Cada subclase define su propio formato.
    Returns:
      String con el estado serializado.

  - ### deserializarEstado

    public abstract void deserializarEstado(String estado)
    Reconstruye el estado del juego a partir del String guardado en disco. Es el proceso inverso a serializarEstado().
    Parameters:
      `estado` - String con el estado serializado previamente.

  - ### terminar

    public abstract void terminar()
    Marca el juego como finalizado. Cada subclase puede añadir lógica adicional (calcular ganador, registrar resultado, etc.) antes o después de poner juegoFinalizado a true.

  - ### sumarPuntos

    public void sumarPuntos(String username, int n)
    Suma n puntos al jugador con el username indicado. Si el jugador no tiene aún entrada en la lista de puntuaciones, se crea una nueva para él automáticamente.
    Parameters:
      `username` - Username del jugador al que sumar puntos.
      `n` - Cantidad de puntos a sumar.

  - ### getPuntuacion

    public int getPuntuacion(String username)
    Devuelve la puntuación actual del jugador con el username indicado. Si el jugador no tiene entrada en la lista, devuelve 0 por lo mismo que está obligado a devolver un int.
    Parameters:
      `username` - Username del jugador a consultar.
    Returns:
      Puntuación del jugador, o 0 si no existe en la lista.

  - ### getPuntuaciones

    public ArrayList<PuntuacionJugador> getPuntuaciones()
    Devuelve la lista completa de puntuaciones de todos los jugadores. Utilizado por Partida al finalizar para registrar los resultados.
    Returns:
      ArrayList con todas las PuntuacionJugador de la partida.

  - ### isTerminado

    public boolean isTerminado()
    Indica si el juego ha finalizado. La vista lo consulta después de cada turno para saber si debe cerrar la ventana de juego.
    Returns:
      true si el juego ha terminado, false si sigue en curso.

  - ### getNombre

    public String getNombre()
    Devuelve el nombre del juego.
    Returns:
      Nombre del juego.

  - ### getDescripcion

    public String getDescripcion()
    Devuelve la descripción del juego.
    Returns:
      Descripción del juego.