Diseno Del Ascottergories

Diseño del Cliente

  • JuegoScattergories: Hereda de la clase (Cliente.Base.)JuegoAbstracto y redefine los metodos necesarios para implementa la logica del juego del Ascottergories. Se encarga de procesar los eventos que se producen en el PanelScattergories 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 (abandono de jugadores, procesamiento de las respuestas…)
  • ConfiguracionScattergories: 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 por rondas, el numero de rondas que se van a jugar y el numero máximo de jugadores que soporte. Devuelve una instancia de DatoScattergories con los valores de esas opciones. Es el primer interfaz mostrado al usuario cuando este carga el juego
  • PanelScattergories: Hereda de la clase (Cliente.Base.)PanelBase y se encarga de mostrar el interfaz de usuario a lo largo de la partida. Incorpora un conjunto de textboxes en la parte izquierda para que los usuarios respondan a las preguntas sugeridas, una lista de usuarios, etiquetas indicando el estado del juego y el tiempo restante y un panel con checkboxes para confirmar la validez de las respuestas de otros usuarios.

Diagrama UML Cliente

clientescattergories_uml.png

Diseño del Servidor

  • PartidaScattergories:Hereda de la clase (Modulos.Juegos.Servidor.)Partida redefiniendo los metodos para gestionar la inicialización de la partida y para redirigir los eventos a la clase que represente el estado actual de la partida en cada momento
  • InicioScattergories: Implementa (Modulos.Juegos.Servidor.)IInicioPartida, define el metodo iniciarPartida que permite obtener instancias de objetos de la clase PartidaScattergories
  • IEstado: Representa el estado de una partida de acuerdo con el patrón State. Todos los estados posibles son clases que implementan este interfaz
  • EstadoInicial: Implementación de IEstado para el espacio de tiempo desde que se crea la partida hasta cuando el creador da orden de iniciarla
  • EstadoJugandoRonda: Implementación de IEstado que se encarga de gestionar el intervalo de tiempo que tienen los jugadores para responder a las preguntas de la ronda
  • EstadoEsperandoRespuestas: Implementación de IEstado que se encarga de recibir todas las respuestas que los jugadores respondieron en la fase de juego de la ronda
  • EstadoConfirmandoRespuestas: IEstado que se encarga de gestionar la fase de confirmación de respuestas, desde el momento en que el servidor tiene todas las respuestas hasta el instante en que se han confirmado todas
  • EstadoTiempoEntreRondas: IEstado que representa el tiempo que hay entre cada ronda de juego

Diagrama UML Servidor

servidorscattergories_uml.png

Diagrama de estados del servidor

estadosservidor.png

Diseño de la parte Común

Recursos que comparten el cliente y el servidor:

  • DatosRonda: Clase enviada al principio de cada ronda que contiene las preguntas que tiene que contestar el usuario en dicha ronda
  • DatosRespuesta:: Enviada en la fase de confirmación de respuestas. Contiene las respuestas que se deben confirmar así como un indicador acerca de si la ultima respuesta del jugador fue considerada válida
  • DatosScattergories: Hereda de (Modulos.Juegos.Compartido.)DatosPartida que contiene los datos que ajustan los parametros de una partida, en este caso incorpora parametros nuevos para el tiempo de ronda y el número de rondas

Diagrama UML Compartido

compartidoscattergories_uml.png

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
finPartida Servidor Cliente Boolean Cuando se han completado todas las rondas. El booleano indica al jugador si es ganador
respuestas Servidor Cliente DatosRespuesta Envidado en la fase de confirmación de respuestas. Contiene respuestas a confirmar y una actualización sobre el resultado de la ultima respuesta confirmada
inicioRonda Servidor Cliente DatosRonda Marca el inicio de una ronda. Adjunta una lista con las 10 preguntas de la ronda
finRonda Servidor Cliente - Notifica a los clientes que el tiempo de la ronda se ha acabado
puedeNueva Servidor Cliente - Notifica al creador de que ya puede iniciar una ronda nueva
respuestas Cliente Servidor String[] Envia al servidor una lista de las contestaciones dadas en la ronda actual
nuevaRonda Cliente Servidor - Indica al servidor que debe iniciar una nueva ronda de juego
validas Cliente Servidor boolean[] Envia al servidor la lista de respuestas que han sido confirmadas por el jugador