# Class PasaPalabra

java.lang.Object
Modelo.Juego
Modelo.PasaPalabra

public class PasaPalabra extends Juego
Implementación del juego PasaPalabra. Extiende la clase abstracta Juego y adapta la lógica original de consola para integrarse con la arquitectura de capas del proyecto.

Version:
  2.1
Author:
  Adrián

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `private int`
  `aciertos`
  `private static final String`
  `DIR_ROSCOS`
  `static final String`
  `ESTADO_CORRECTA`
  `static final String`
  `ESTADO_INCORRECTA`
  `static final String`
  `ESTADO_PASAPALABRA`
  `static final String`
  `ESTADO_PENDIENTE`
  `private int`
  `fallos`
  `private int`
  `letraActual`
  `private int`
  `nivel`
  `private int`
  `pasapalabras`
  `private String[][]`
  `rosco`
  rosco[i][0] = letra rosco[i][1] = definición rosco[i][2] = respuesta correcta rosco[i][3] = estado (PENDIENTE / CORRECTA / INCORRECTA / PASAPALABRA)

  ### Fields inherited from class Juego

  `descripcion, juegoFinalizado, listaPuntuacionPorJugador, nombreJuego`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PasaPalabra()`
  Crea una nueva partida de PasaPalabra con dificultad Fácil (nivel 1).
  `PasaPalabra(int nivel)`
  Crea una nueva partida de PasaPalabra con el nivel de dificultad indicado.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `private void`
  `avanzarAProximaPendiente()`
  `private static String[][]`
  `cargarDatos(int nivel)`
  `private void`
  `comprobarFinDeJuego()`
  `int`
  `contarPendientes()`
  Cuenta cuántas letras quedan por resolver (pendientes o marcadas como pasapalabra).
  `void`
  `deserializarEstado(String estado)`
  Reconstruye el estado del juego a partir del String guardado en disco.
  `int`
  `getAciertos()`
  `String[]`
  `getDatosLetra(int indice)`
  Devuelve los datos de una letra del rosco por su índice.
  `String`
  `getEstadoTexto()`
  Devuelve una representación en texto del estado actual del juego.
  `int`
  `getFallos()`
  `int`
  `getLetraActual()`
  `int`
  `getNivel()`
  `int`
  `getPasaPalabras()`
  `int`
  `getTotalLetras()`
  Devuelve el número total de letras del rosco.
  `void`
  `inicializar()`
  Inicializa el estado del juego antes de empezar una partida.
  `static String`
  `limpiarTexto(String texto)`
  Normaliza un texto eliminando tildes y convirtiendo a minúsculas.
  `private String`
  `obtenerUsernameJugador()`
  `void`
  `pasarPalabra()`
  Marca la letra actual como pasapalabra y avanza a la siguiente letra pendiente.
  `boolean`
  `procesarRespuesta(String respuesta)`
  Procesa la respuesta del usuario para la letra actual.
  `private static File`
  `resolverRuta(String nombreFichero)`
  `String`
  `serializarEstado()`
  Formato: letraActual,aciertos,fallos,pasapalabras,estado0,...,estado26
  `void`
  `terminar()`
  Marca el juego como finalizado.

  ### Methods inherited from class Juego

  `getDescripcion, getNombre, getPuntuacion, getPuntuaciones, isTerminado, sumarPuntos`

  ### Methods inherited from class Object

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

- ## Field Details

  - ### ESTADO_PENDIENTE

    public static final String ESTADO_PENDIENTE
    See Also:
      - Constant Field Values

  - ### ESTADO_CORRECTA

    public static final String ESTADO_CORRECTA
    See Also:
      - Constant Field Values

  - ### ESTADO_INCORRECTA

    public static final String ESTADO_INCORRECTA
    See Also:
      - Constant Field Values

  - ### ESTADO_PASAPALABRA

    public static final String ESTADO_PASAPALABRA
    See Also:
      - Constant Field Values

  - ### DIR_ROSCOS

    private static final String DIR_ROSCOS
    See Also:
      - Constant Field Values

  - ### rosco

    private String[][] rosco
    rosco[i][0] = letra rosco[i][1] = definición rosco[i][2] = respuesta correcta rosco[i][3] = estado (PENDIENTE / CORRECTA / INCORRECTA / PASAPALABRA)

  - ### letraActual

    private int letraActual

  - ### nivel

    private int nivel

  - ### aciertos

    private int aciertos

  - ### fallos

    private int fallos

  - ### pasapalabras

    private int pasapalabras

- ## Constructor Details

  - ### PasaPalabra

    public PasaPalabra(int nivel)
    Crea una nueva partida de PasaPalabra con el nivel de dificultad indicado.
    Parameters:
      `nivel` - nivel de dificultad: 0=Infantil, 1=Fácil, 2=Medio, 3=Avanzado

  - ### PasaPalabra

    public PasaPalabra()
    Crea una nueva partida de PasaPalabra con dificultad Fácil (nivel 1).

- ## Method Details

  - ### inicializar

    public void inicializar()
    Description copied from class: `Juego`
    Inicializa el estado del juego antes de empezar una partida. Cada subclase define qué significa inicializar: cargar preguntas, limpiar el tablero, resetear contadores, etc.
    Specified by:
      `inicializar` in class `Juego`

  - ### getEstadoTexto

    public String getEstadoTexto()
    Description copied from class: `Juego`
    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.
    Specified by:
      `getEstadoTexto` in class `Juego`
    Returns:
      String con el estado actual del juego.

  - ### serializarEstado

    public String serializarEstado()
    Formato: letraActual,aciertos,fallos,pasapalabras,estado0,...,estado26
    Specified by:
      `serializarEstado` in class `Juego`
    Returns:
      String con el estado serializado.

  - ### deserializarEstado

    public void deserializarEstado(String estado)
    Description copied from class: `Juego`
    Reconstruye el estado del juego a partir del String guardado en disco. Es el proceso inverso a serializarEstado().
    Specified by:
      `deserializarEstado` in class `Juego`
    Parameters:
      `estado` - String con el estado serializado previamente.

  - ### terminar

    public void terminar()
    Description copied from class: `Juego`
    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.
    Specified by:
      `terminar` in class `Juego`

  - ### procesarRespuesta

    public boolean procesarRespuesta(String respuesta)
    Procesa la respuesta del usuario para la letra actual.
    Returns:
      true si es correcta, false si es incorrecta

  - ### pasarPalabra

    public void pasarPalabra()
    Marca la letra actual como pasapalabra y avanza a la siguiente letra pendiente. No hace nada si el juego ya ha terminado o el rosco no está cargado.

  - ### getAciertos

    public int getAciertos()
    Returns:
      número de letras acertadas hasta el momento

  - ### getFallos

    public int getFallos()
    Returns:
      número de letras acertadas hasta el momento

  - ### getPasaPalabras

    public int getPasaPalabras()
    Returns:
      número de letras marcadas como pasapalabra hasta el momento

  - ### getLetraActual

    public int getLetraActual()
    Returns:
      índice de la letra que se está respondiendo actualmente

  - ### getNivel

    public int getNivel()
    Returns:
      nivel de dificultad del rosco (0=Infantil, 1=Fácil, 2=Medio, 3=Avanzado)

  - ### getDatosLetra

    public String[] getDatosLetra(int indice)
    Devuelve los datos de una letra del rosco por su índice.
    Parameters:
      `indice` - posición en el rosco (0-26)
    Returns:
      array `[letra, definición, respuesta, estado]`, o `null` si el índice es inválido

  - ### contarPendientes

    public int contarPendientes()
    Cuenta cuántas letras quedan por resolver (pendientes o marcadas como pasapalabra).
    Returns:
      número de letras sin respuesta definitiva

  - ### getTotalLetras

    public int getTotalLetras()
    Devuelve el número total de letras del rosco.
    Returns:
      total de letras (normalmente 27)

  - ### avanzarAProximaPendiente

    private void avanzarAProximaPendiente()

  - ### comprobarFinDeJuego

    private void comprobarFinDeJuego()

  - ### obtenerUsernameJugador

    private String obtenerUsernameJugador()

  - ### limpiarTexto

    public static String limpiarTexto(String texto)
    Normaliza un texto eliminando tildes y convirtiendo a minúsculas. Se usa para comparar respuestas sin distinguir acentos ni mayúsculas.
    Parameters:
      `texto` - texto a normalizar; si es `null` devuelve cadena vacía
    Returns:
      texto normalizado en minúsculas y sin tildes

  - ### resolverRuta

    private static File resolverRuta(String nombreFichero)

  - ### cargarDatos

    private static String[][] cargarDatos(int nivel)