Diseño El Juego de la Oca

El Juego de la Oca consta de tres proyectos:

  • JuegosClienteOca
  • JuegosServidorOca
  • JuegosComunOca

Dentro de cada proyecto, las clases se encuentran dentro del paquete IStation.Juegos.Oca.Tipo, donde Tipo será Cliente, Servidor o Compartido respectivamente para cada proyecto.

Parte Común (JuegosComunOca)

En este proyecto se encuentran las clases utilizadas tanto por la parte del cliente del juego como por la parte del servidor. Sólo contiene la siguiente clase:

  • DatosPartidaOca: hereda de la clase DatosPartida; contiene todos los datos concernientes a la partida, como máximo y mínimo número de jugadores, si se puede entrar a mitad de una partida, si es observable, etc. De todos ellos, el creador de la partida tendrá que elegir un valor para el máximo de jugadores, que deberá ser entre 2 y 4. Al crear una partida se le mostrará un diálogo para poder configurarlo. Esta clase será la encargada de recoger esos datos para que el servidor tenga constancia de ellos. En cuanto a los métodos que posee, además de una constructora por defecto y otra que recibe como parámetro el número de segundos por turno, dispone del método getNombreJuego(), redefinido de la superclase DatosPartida, que devuelve un String con el nombre del juego.

public String getNombreJuego()

Este es el diagrama UML del proyecto.

Parte Servidor (JuegosServidorOca)

Este proyecto engloba las clases que representan la parte del servidor del juego. Contiene en concreto dos clases:

  • InicioOca: implementa la interfaz IInicioPartida y se utiliza para crear instancias de la partida. Contiene el método iniciarPartida, el cual se encarga de crear una nueva partida del Juego de la Oca. Dicha partida necesita los datos con los que se ha creado, el módulo de juegos para poder realizar el paso de mensajes y el identificador de la partida.

public Partida iniciarPartida(DatosPartida datos, IModuloJuegos mJuegos, int idPartida)

  • PartidaOca: extiende la clase JuegoTableroAbstracto de la parte del Servidor, definiendo los métodos abstractos de ésta o redefiniendo los que sean necesarios. Consta de tres atributos: un HashMap que almacena para cada jugador el número de turnos que debe esperar en caso de que haya caído en alguna casilla que así lo disponga; un booleano que indica si alguien ha caído en la casilla del 'pozo' y otro booleano para controlar si un jugador que estuviera en el pozo ha sido rescatado. La constructora de la partida es llamada por la clase InicioOca y recibe como parámetros el módulo de juegos, el identificador de partida y los datos de configuración. Todos ellos se pasarán a la superclase. En cuanto a los métodos abstractos que hereda, se encuentran procesarDatos, al cual se llama cada vez que el cliente manda un mensaje al servidor (después se explicarán estos mensajes), accionesNuevoTurno, que reúne todas las acciones que se deban ejecutar en el servidor cada vez que hay un cambio de turno (en este caso, comprobar si hay algún ganador) y accionesInicioPartida, que como su nombre indica son todas las acciones que se realizarán al iniciar la partida. También se implementan ciertas funciones de carácter privado que se utilizan de manera auxiliar. Estas son reglasOca, que contiene los movimientos "automáticos" que se producen cuando se caen en determinadas casillas (ver reglas) y juegoOca, la cual calcula el próximo movimiento a partir del valor del dado y llama a reglasOca para comprobar posibles cambios de posición.

protected void accionesInicioPartida()
protected void accionesNuevoTurno(Jugador jugadorAnt, Jugador jugadorNue)
private boolean juegoOca(String jugador, int posFicha)
protected void procesarDatos(Jugador jugador, String evento, Object datos)
private boolean reglasOca(String jugador, int posFicha)

Este es el diagrama UML del proyecto.

Parte Cliente (JuegosClienteOca)

Las clases que contiene la parte del cliente son:

  • ConfiguracionOca: extiende de la clase DialogoConfiguracion. Es el diálogo mediante el cual el usuario que crea la partida podrá cambiar los parámetros configurables del juego. En el caso del Juego de la Oca, el único parámetro que se puede modificar es el del máximo número de jugadores, el cual puede variar entre 2 y 4. El creador deberá escribir la cantidad deseada en un JTextField y pulsar el botón de inicio Esta clase contiene como atributo un objeto de la clase DatosPartidaOca, descrito anteriormente en la parte común, en el cual se introducirá el valor leído del JTextField. Asimismo, tiene una accesora para dicho atributo dameConfiguración(), el cual será llamado por la clase JuegoOca.

protected DatosPartida dameConfiguracion()

  • AppletOca: es una clase que hereda de AppletBase. No contiene ningún método ni constructora.
  • JuegoOca: hereda de la clase JuegoTableroAbstracto. Controla la parte de cliente de la partida del juego de la oca. Su única constructora recibe un módulo de comunicaciones para el paso de mensajes con el servidor y dos String que se corresponden con el nombre del jugador actual y la ruta base en el servidor para el juego. Los atributos que posee esta clase son el nombre corto del juego, un entero utilizado para la precarga de las imágenes, un objeto de la clase Recursos, también para la precarga de imágenes y un String con la ruta del fondo que representa el tablero de juego. Los métodos que hereda de JuegoAbstracto y de JuegoTableroAbstracto y que debe implementar son dameNombreJuegoCorto (devuelve el nombre corto del juego, en este caso "oca"), damePanelJuego (devuelve el panel del juego; en el caso de que no exista, lo crea), damePanelConfiguracion (devuelve el panel de configuración; al igual que con el panel del juego, si no existe lo crea), partidaIniciada (son las acciones que se realizarán en el cliente cuando la partida comience), procesaMensaje (se llamará a este método cada vez que el cliente reciba un mensaje del servidor), procesaEvento (este método será invocado cada vez que se produzca un evento en el cliente; en este caso se tratarán sólo los eventos MouseClick referidos al dado), jugadorEntra (acciones a realizar en el cliente cuando entra un nuevo jugador), jugadorSale (acciones a realizar cuando abandona la partida un jugador), inicializarFichas (carga las imágenes de las fichas del color de cada jugador) y correspondencia(dada una posición del array que representa al tablero, devuelve en un objeto de clase Ficha las coordenadas del panel a las cuales corresponde).

public Ficha correspondencia(int posicion)
public String dameNombreJuegoCorto()
public DialogoConfiguracion damePanelConfiguracion(Frame frame)
public PanelBase damePanelJuego()
public void inicializarFichas()
public void jugadorEntra(String nombre)
public void jugadorSale(String nombre)
public void partidaIniciada()

  • PanelBaseOca: hereda de PanelBaseTablero y sólo contiene una constructora que recibe el juego y el número de fichas que puede tener cada jugador. Estos parámetros se pasan a la superclase.

Este es el diagrama UML del proyecto.

Paso de mensajes entre cliente y servidor

El Juego de la Oca no tiene mensajes propios, todos los que utiliza están descritos en mensajes de los juegos de tablero.