# Class tresenraya

java.lang.Object
Modelo.Juego
modelo.tresenraya

public class tresenraya extends Juego
Implementación del juego Tres en Raya para dos jugadores.

Hereda de `Juego` e implementa todos sus métodos abstractos. El tablero es 3x3 con fichas 'X' y 'O'. La gestión del turno la lleva

invalid reference

    Partida

externamente — esta clase solo conoce el estado del tablero.

Version:
  2.1
Author:
  Nacho

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `private String`
  `ganador`
  Username del ganador.
  `private char[][]`
  `tablero`
  Tablero 3x3.

  ### Fields inherited from class Juego

  `descripcion, juegoFinalizado, nombreJuego`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `tresenraya()`
  Crea una nueva instancia de Tres en Raya.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `private boolean`
  `casillaOcupada(int fila, int columna)`
  Comprueba si una casilla ya tiene una ficha.
  `void`
  `deserializarEstado(String s)`
  Restaura el estado desde un String serializado.
  `String`
  `getEstadoTexto()`
  Devuelve el estado actual del tablero en formato texto.
  `String`
  `getGanador()`
  `char[][]`
  `getTablero()`
  Devuelve una copia del tablero para evitar modificaciones externas.
  `private boolean`
  `hayVictoria(char ficha)`
  Comprueba si la ficha dada tiene tres en línea.
  `void`
  `inicializar()`
  Inicializa o reinicia la partida.
  `boolean`
  `jugarTurno(String username, char ficha, int fila, int columna)`
  Realiza una jugada en la posición indicada.
  `String`
  `serializarEstado()`
  Serializa el estado completo a un String.
  `private boolean`
  `tableroLleno()`
  Comprueba si el tablero está completamente lleno.
  `void`
  `terminar()`
  Marca la partida como finalizada delegando en la clase padre.

  ### 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

  - ### tablero

    private char[][] tablero
    Tablero 3x3. Cada celda contiene 'X', 'O' o ' ' si está vacía.

  - ### ganador

    private String ganador
    Username del ganador. null si la partida no ha terminado o acabó en empate.

- ## Constructor Details

  - ### tresenraya

    public tresenraya()
    Crea una nueva instancia de Tres en Raya. Llamar a `inicializar()` antes de empezar a jugar.

- ## Method Details

  - ### inicializar

    public void inicializar()
    Inicializa o reinicia la partida. Limpia el tablero, resetea el ganador y marca el juego como no finalizado.
    Specified by:
      `inicializar` in class `Juego`

  - ### getEstadoTexto

    public String getEstadoTexto()
    Devuelve el estado actual del tablero en formato texto.

    Usa ' . ' para casillas vacías, `X` para jugador 1 y `O` para jugador 2. Si la partida ha terminado indica el resultado.

    Specified by:
      `getEstadoTexto` in class `Juego`
    Returns:
      String con el tablero dibujado y el estado de la partida

  - ### serializarEstado

    public String serializarEstado()
    Serializa el estado completo a un String.

    Formato: `casilla00,casilla01,...,casilla22;ganador`
    Las casillas vacías se guardan como espacio `' '`. Si no hay ganador se guarda `"null"`.

    Specified by:
      `serializarEstado` in class `Juego`
    Returns:
      String con el estado serializado

  - ### deserializarEstado

    public void deserializarEstado(String s)
    Restaura el estado desde un String serializado.

    El String debe tener el formato de `serializarEstado()`.

    Specified by:
      `deserializarEstado` in class `Juego`
    Parameters:
      `s` - String con el estado serializado

  - ### terminar

    public void terminar()
    Marca la partida como finalizada delegando en la clase padre.
    Specified by:
      `terminar` in class `Juego`

  - ### jugarTurno

    public boolean jugarTurno(String username, char ficha, int fila, int columna)
    Realiza una jugada en la posición indicada.

    Coloca la ficha del jugador en (`fila`, `columna`). Comprueba victoria o empate. El cambio de turno lo gestiona

    invalid reference

        Partida

    externamente — esta clase no lo maneja.
    Parameters:
      `username` - username del jugador que realiza la jugada
      `ficha` - ficha del jugador ('X' o 'O')
      `fila` - fila donde colocar la ficha (0-2)
      `columna` - columna donde colocar la ficha (0-2)
    Returns:
      `true` si la jugada fue válida; `false` si la casilla estaba ocupada o el juego ya había terminado

  - ### casillaOcupada

    private boolean casillaOcupada(int fila, int columna)
    Comprueba si una casilla ya tiene una ficha.
    Parameters:
      `fila` - fila de la casilla (0-2)
      `columna` - columna de la casilla (0-2)
    Returns:
      `true` si la casilla está ocupada

  - ### hayVictoria

    private boolean hayVictoria(char ficha)
    Comprueba si la ficha dada tiene tres en línea.

    Revisa las tres filas, tres columnas, diagonal principal (↘) y diagonal secundaria (↙).

    Parameters:
      `ficha` - ficha a comprobar ('X' o 'O')
    Returns:
      `true` si hay tres en línea

  - ### tableroLleno

    private boolean tableroLleno()
    Comprueba si el tablero está completamente lleno.
    Returns:
      `true` si no quedan casillas vacías

  - ### getGanador

    public String getGanador()
    Returns:
      username del ganador, o `null` si no hay ganador todavía

  - ### getTablero

    public char[][] getTablero()
    Devuelve una copia del tablero para evitar modificaciones externas.
    Returns:
      matriz 3x3 con el estado actual del tablero