Diseño del Pictionary

Diseño de la parte del cliente

El programa que se ejecuta en el cliente cuando se juega al pictionary contiene, además de las clases pertenecientes al framework, las siguientes:

  • JuegoPictionary: esta clase se encarga principalmente del control de las acciones del usuario, procesando los eventos producidos tanto por acciones del usuario como por mensajes llegados desde el servidor. Para procesar las acciones de pintado de un jugador se utiliza una máquina de estados. Esta clase es la que indica al PanelJuegoPictionary la información que debe mostrar por pantalla.
  • PanelJuegoPictionary: esta clase es la que se encarga de mostrar la información al usuario. Su funcionalidad se limita a mostrar la información recibida de la clase JuegoPictionary y detectar las acciones del usuario para notificárselas a dicha clase para su procesamiento.
  • DConfPictionary: se trata de una ventana de diálogo, que permite al usuario configurar las opciones de la partida cuando la está creando.
  • IEstadoPintado: interfaz que representa un estado la máquina de estados que controla cómo el usuario pinta en el lienzo.

Máquina de estados

Además de las tres clases anteriormente mencionadas, existen una serie de clases que implementan la interfaz IEstadoPintado, según indica el patrón State. Esas clases son las siguientes:

  • EstadoVisualizar: en este estado al jugador no se le permite pintar.
  • EstadoNoPintando: en este estado se le permite pintar al jugador, pero no está pintando.
  • EstadoPintando: en este estado el jugador está dibujando.
  • EstadoPintandoFuera: en este estado el jugador está dibujando, pero lo está haciendo fuera del lienzo, por lo que sus acciones son ignoradas hasta que vuelva a pintar dentro.

UML del cliente

Pictionary_Cliente.jpg

Diseño de la parte del servidor

Para procesar una partida de Pictionary en el servidor, se utilizan las siguientes clases:

  • InicioPictionary: esta clase tiene como única funcionalidad crear instancias de la clase PartidaPictionary
  • PartidaPictionary: un objeto de esta clase va a ser quien controle la información de una partida al juego del Pictionary, encargándose de comunicar a los distintos jugadores entre sí y controlar el flujo de la partida.

UML del servidor

Pictionary_Servidor.jpg

Diseño de la parte común

Las clases de la parte común tienen como única funcionalidad actuar como estructuras de datos que son enviadas a través de la red, por lo que no tienen apenas funcionalidad.

  • DatosPartidaPictionary: almacena los datos de configuración para una nueva partida.
  • Trazo: almacena información sobre un trazo de un dibujo.
  • {{Respuesta}: almacena información sobre una respuesta dada por un jugador.

UML de la parte común

Pictionary_Compartido.jpg

Envío de una respuesta

El siguiente diagrama UML de secuencia indica el proceso que ocurre desde que un cliente escribe una respuesta (trata de adivinar el objeto dibujado) hasta que el servidor informa a todos los jugadores de la respuesta enviada, incluyendo si la respuesta era correcta o no.

Enviar_respuesta.jpg

Protocolo de comunicaciones

El juego del pictionary tiene un protocolo propio para el envío de información entre el cliente y el servidor. Los mensajes que son enviados durante el transcurso de la partida junto con el contexto en el que son enviados se describen en la siguiente tabla:

Contexto del mensaje Nombre del mensaje Origen Destino Datos del mensaje
Un jugador entra en la partida nivel Servidor Cliente del jugador recién incorporado Integer que indica el nivel de dificultad de la partida
Un jugador pinta sobre el lienzo trazo Cliente Servidor Instancia de la clase Trazo
El servidor recibe información sobre un Trazo trazo Servidor Todos los clientes Instancia de la clase Trazo
Un jugador borra el dibujo del lienzo borrar Cliente Servidor null
El servidor recibe un mensaje indicando que el lienzo ha sido borrado borrar Servidor Todos los clientes null
Un jugador escribe una respuesta respuesta Cliente Servidor Instancia de la clase Respuesta
El servidor recibe información sobre una respuesta de un jugador respuesta Servidor Todos los clientes Instancia de la clase Respuesta