Diseño de Solución 1er Entrega - PabloFederico/template-tp-grupal GitHub Wiki

Se separó el diseño en 3 grandes grupos de entidades con sus objetivos particulares, como lo fueron el Cliente, el Servidor y el Motor con los juegos. El Cliente y todas sus clases intervinientes encargados de manejar la entrada de los datos, el Servidor instanciando el Motor para procesar cada uno de los juegos, devolviendo la información correspondiente al Cliente. Los juegos se encuentran listados en un enumerador llamado GameEnum, los cuales luego gracias a un Factory son instanciados para crearse. Cada juego en particular heredaba de la clase abstracta Game, la cual tenía una lista de comandos donde cada juego en particular debía definir cuáles comandos interpretada. Pensamos a los comandos básicamente como las acciones que cada juego podía tener, así por ejemplo el Juego de Open Door, debía saber interpretar comandos del estilo Abrir y Cerrar, los cuales cada uno en su método execute finalmente abrían y cerraban una puerta. Para poder implementar y resolver cada juego, se crearon también las que denominamos GameEntities, como la clase Door, Key, Box, Disk, etc. Cada una de estas entidades se creó para cada juego en particular, por lo que al crearse una Puerta, esta debía conocer por ejemplo, el jugador que la iba a cruzar, el lugar donde estaba el jugador, por lo que la lógica del movimiento y cambios de estado generalmente las manejabamos gracias a estas Entidades.

Patrones utilizados:

Patrón Clases intervinientes Objetivo
Chain of responsability Server
Chain of responsability Client Manejar la cadena de instrucciones de entrada como Exit, End y Connect
Facade Server Instanciar la red
Command Cada juego con sus propios comandos
Factory method Creación de los juegos