Diseño del Buscamonos

Nota: Aunque el juego se haya llamado Buscamonos, es una personalización del conocido juego Buscaminas, asi que todas las clases tanto del servidor, como del cliente y de las partes comunes estan nombradas con "Buscaminas".

Diseño del Cliente

  • JuegoBuscaminas: Hereda de la clase (Cliente.Base.)JuegoAbstracto y redefine los metodos necesarios para implementa la logica del juego del Buscamonos. Se encarga de procesar los eventos que se producen en el PanelBaseBuscaminas y realizar las acciones asociadas a ese evento, y tambien de procesar los mensajes enviados por el servidor para la sincronización de la partida, como por ejemplo el abandono de un jugador o la realizacion de un nuevo movimiento
  • ConfiguracionBuscaminas: Hereda de la clase (Cliente.Base.)DialogoConfiguracion y redefine sus metodos como necesita. Muestra las opciones configurables de una partida del juego, en este caso el tiempo de turno. Devuelve una instancia de DatosPartidaBuscaminas con esas opciones configurables. Al crear una partida se abre este Dialogo solicitando el tiempo de turno mediante el desplazamiento de un JSlider con los tiempos recomendados.
  • PanelBaseBuscaminas: Hereda de la clase (Cliente.Base.)PanelBase y la complementa ofreciendo los metodos necesarios para la creacion y configuracion del panel que se va a utilizar para la partida del Buscamonos. Se encarga de mostrar la interfaz del juego y todos los graficos que contiene. En este caso una rejilla en la parte derecha que muestra el estado del tablero durante la partida, y en el lateral dizquierdo un panel con la informacion de los jugadores: el nombre, los monos conseguidos y los monos restantes por encontrar en el tablero.

Diagrama UML Cliente

UMLClienteBuscaminas.jpg

Diseño del Servidor

  • PartidaBuscaminas:Hereda de la clase (Modulos.Juegos.Servidor.)Partida redefiniendo los metodos para controlar el juego y llevar a cabo las acciones propias de la lógica del Buscamonos en el lado del servidor. Se encarga de procesar los mensajes que llegan desde el JuegoBuscaminas y realiza las acciones correspondientes a ellos
  • InicioBuscaminas: Implementa (Modulos.Juegos.Servidor.)IInicioPartida, define el metodo iniciarPartida que permite obtener instancias de objetos de la clase PartidaBuscaminas

Diagrama UML Servidor

UMLServidorBuscaminas.jpg

Diseño de la parte Común

Recursos que comparten el cliente y el servidor:

  • MensajeBuscaminas: Hereda de (Modulos.Juegos.Compartido.)MensajePartida, clase que se envia en los mensajes entre servidor y cliente y que contiene los datos necesarios de un lanzamiento: Usa una constructora a la que se aporta la columna y la fila del lanzamiento y el color
  • DatosPartidaBuscaminas: Hereda de (Modulos.Juegos.Compartido.)DatosPartida que contiene los datos que ajustan los parametros de una partida, en este caso incorpora un parametro nuevo para poder indicar el tiempo de turno.
  • Escenario: Clase que representa la matriz de casillas de juego y los metodos para interactuar con ella, como son el metodo de comprobar si una casilla pertenece al tablero o modificar el tablero según el resultado de un ataque.
  • Casilla: Clase que representa cada una de las casillas que forman el escenario, cada una tiene un entero que representa el número que contiene (el 9 representa los monos y el 0 la ausencia de número), y un atributo booleano que indica si la casilla esta destapada.
  • Lanzador: Contiene los datos basicos de un jugador. Nombre, color, partidas ganadas y los metodos para acceder y modificar sus valores

Protocolo de mensajes

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

Evento Origen Destino Datos Descripción
tiempo Servidor Cliente Integer Cuando se inicia la partida se manda a todos los jugadores el tiempo de turno
inicializar Servidor Cliente Lanzador[] Cuando comienza la partida se manda la estructura creada con los datos de los jugadores
iniciar Servidor Cliente tablero Cuando comienza la partida se envía la estructura que define el tablero de juego, con los monos colocados aleatoriamente. Cuando se inicia la ronda se notifica a los jugadores, y se inicializa el panel de datos
nuevoTurno Servidor Cliente String Cuando se cambia de turno se manda a los jugadores el nombre del jugador que tiene el turno
pasa Cliente Servidor - Notifica al servidor que ya se puede realizar el cambio de turno
lanzarOut Cliente Servidor MensajeBuscaminas Notifica al servidor que se ha realizado un movimiento, indicandole la fila y la columna elegida y el color del jugador que lo ha efectuado
lanzarIn Servidor Cliente tablero Notifica a los jugadores que se ha realizado un movimiento, y envía el tablero actualizado con el nuevo lanzamiento
otra Cliente Servidor - Notifica al servidor que un jugador quiere la revancha
otra Servidor Cliente - Notifica al rival que un jugador quiere la revancha
reiniciar Cliente Servidor - Notifica al servidor que se ha aceptado la revancha
tiempoAcabado Cliente Servidor - Notifica al servidor que a algun usuario se le ha agotado el tiempo de turno
numJugador Servidor Cliente Integer Manda al cliente la información de que hay un nuevo jugador
ganador Servidor Cliente String Manda a los jugadores el nombre del ganador
sumaMinas Servidor Cliente Lanzador[] Manda a los jugadores sus datos actualizados

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.