Diseño de La Generala

Diseño del Cliente

  • JuegoGenerala: Clase que implementa la logica del juego de la Generala.
  • DialogoConfiguracionGenerala: DialogoConfiguracion que muestra las opciones configurables de una partida del juego, el número máximo de jugadores y el tipo de partida libre u obligada.
  • PanelGenerala: Clase que ofrece los metodos necesarios para la creacion y configuracion del panel que se va a utilizar para la partida de la Generala.
  • Puntuacion: Clase que hereda de JDialog que servirá para mostrar al jugador, las jugadas posibles, cuando termine su turno.
  • ModeloTabla: Clase que sirve para visualizar los datos en la tabla de los puntajes.
  • Inicio: Clase que extiende el AppletBase, para iniciar una partida.

Diagrama UML Cliente

generalaCliente.png

Diseño del Servidor

  • ServidorGenerala: esta clase controla el juego y lleva a cabo las acciones propias de la lógica de juego.
  • InicioGenerala: esta clase posee el método que permite obtener instancias de objetos de la clase

Diagrama UML Servidor

generalaServidor.png

Diseño de la parte Común

Recursos que comparten el cliente y el servidor:

  • DatosPartidaGenerala: Contiene los datos que ajustan los parámetros de una partida. Se agregó el dato de tipo de partida.
  • TiradaGenerala: Clase que representa los dados que están actualmente en el tablero y los que están seleccionados.
  • JugadaGenerala: Contiene los datos para la puntuación de una jugada. Es decir identificados de jugada y su puntaje.

Diagrama UML parte Comun

generalaComun.png

Protocolo de mensajes

Aparte de los mensajes de control (transparentes al desarrolador del juego) se envían los siguientes mensajes:

Tirada

Lleva los datos de una tirada, es decir los 5 dados que han salido y los dados seleccionados. (El mensaje es una instancia de la clase TiradaGenerala).
Se envía desde el cliente cada vez que se produce una tirada. El servidor recibe el mensaje actualiza la tirada actual y difunde el mensaje a todos los clientes.

Jugada

Lleva el identificador de la jugada y el puntaje obtenido para la misma. (El mensaje es una instancia de la clase JugadaGenerala).
Se envía desde el cliente cuando este ha elegido puntaje para una jugada. El servidor recibe el mensaje actualiza los puntajes y difunde el mensaje a todos los clientes.
El cliente que lo recibe desde el servidor actualiza los puntajes.

Pedido dados

  1. Cada vez que el cliente pulsa el botón "Tirar" se envía un mensaje de este tipo al servidor. Con una instancia de la clase TiradaGenerala (aunque podría ser vacía).
  2. Como respuesta el servidor contesta al jugador remitente del mensaje con los dados solicitados y un ArrayList de JugadaGenerala que contiene para la cada posible jugada la puntuación que obtendría.

El mensaje de respuesta es una array de Object de 2 posiciones, en la primera la instancia de TiradaGenerala y en la segunda el ArrayList.
Al resto de clientes, les manda el nuevo estado de la tirada, para que sea visualizada.

Ganador

Se envía a los clientes el nombre del jugador ganador, cuando se termina la partida.

Tabla resumen

El origen Cliente representa el jugador que tiene el turno.

Id Origen Destino Evento Acción que lo produce Respuesta
1 Cliente Servidor Pedido dados Pulsar botón "Tirar" 4 y 5
2 Cliente Servidor Tirada Cambios en la selección de los dados 5
3 Cliente Servidor Jugada Elegir puntuación para una jugada (al terminar las 3 tiradas u obtener la combinación deseada) 6
4 Servidor Cliente Dados nuevos Respuesta a 1 -
5 Servidor Todos Tirada Difusión de los dados nuevos o nueva selección del jugador con el turno -
6 Servidor Todos Jugada Difusión del puntaje para la jugada elegida por el jugador con turno -
7 Servidor Todos Ganador Fin de la partida -

Patrones

Dado que este juego no presenta mayores complicaciones y se puede resolver con un diseño sencillo, no hizo falta usar ningún patrón de diseño.