Analisis del Temple Quest - lfrinaldi/template-tp-grupal GitHub Wiki
#Temple Quest
Se desea implementar el juego: TempleQuest
Con el modelo actual, se fabrica un builder que haga lo siguiente:
Se instancia la clase Game, a la cual se le asociará un GameObject que representa el escenario, y una lista de Actions posibles dentro del juego.
Se construye un GameObject llamado scene que contiene todos los elementos del juego, esta composicion de GameObjects permite formar un grafo de relaciones entre los elementos, para saber en que habitacion se encuentra, o en cual caja/torre, o en el inventario del player, etc.
Si el juego incluye un player, este también es una instancia de GameObject dentro del grafo.
Se construyen las acciones posibles haciendo uso de ComplexActions y toda la variedad de SimpleActions.
Cada ComplexAction incluye un set de SimpleActions que se ejecutan en cascada.
Las SimpleAction tienen Parameters, que pueden ser Implícitos si se sabe al momento de armar el juego, o Explícitos si forman parte del comando ingresado por el jugador.
Cada SimpleAction contiene una Condition, que se evalúa en tiempo de ejecución para determinar si esa SimpleAction debe ser ejecutada.
Así mismo las Conditions se arman haciendo uso de toda la variedad de Conditions existentes, ya que aplica el patrón Specificacion lo cual permite armar ComplexConditions que forman reglas de negocio, con conectores lógicos AND, OR, NOT.
Hay SimpleActions que permite modificar los hijo de un GameObject, y también las que permiten modificar su estado (entre otras), y existen también sus respectivas Conditions para verificarlas (HasChild? Parent? HasAttribute? AttributeEquals?, etc)
Ganar o perder el juego también se encuentra modelizado como SimpleActions, con sus Conditions respectivas.
Una la lista de acciones más detallada a realizar es como la siguiente:
-
un ComplexAction "cruzar acantilado" con
- un SimpleAction que muestre como resultado que se perdió el juego.
-
un ComplexAction "observar " con
-
un SimpleAction que muestre un mensaje de error si el objecto pasado como parámetro no se encuentra en el templo (con la condicion que el objeto pasado como parámetro no se encuentra en el templo).
-
un SimpleAction que mensione que el objeto pasado como parámetro está vacío (con la condicion que el objecto pasado como parámetro se encuentra en el templo y su lista de gameObjets hijos esté vacía).
-
un SimpleAction que devuelva los objectos que contiene el cofre, el nicho, el esqueleto o la planta pasada como parámetro (con la condicion que el objecto pasado como parámetro se encuentra en el templo y su lista de gameObjets hijos no esté vacía).
-
-
un ComplexAction "tocar " con
-
un SimpleAction que mueva el antidoto encontrado desde el cofre, el nicho, el esqueleto o la planta pasada como parámetro que lo contiene a la lista de gameObjets del jugador y avise que se ha encontrado un antidoto (con la condición que el objeto contenga un antidoto).
-
un SimpleAction que mueva el mono encontrado desde el cofre, el nicho, el esqueleto o la planta pasada como parámetro que lo contiene a la lista de gameObjets del jugador y avise que se ha encontrado al mono (con la condición que el objeto contenga al mono).
-
un SimpleAction que muestre como resultado que se perdió el juego (con la condición que el objeto contenga un veneno).
-
-
un ComplexAction "abrir puerta1" con
- un SimpleAction que mueva al jugador de la lista de gameObjects del room1 a la lista de gameObjets del room2 (con la condición que el jugador tenga al mono en su lista de gameObjects hijos).
-
un ComplexAction "mover disco" con
-
un SimpleAction que mueva el disco desde la lista de gameObjects de un stack a la lista de gameObjets de otro (con la condición que la lista de discos del stack no esté vacía y el movimiento sea válido).
-
un SimpleAction avise que el stack este vacio (con la condición que la lista de discos del stack esté vacía).
-
un SimpleAction avise que el stack este vacio (con la condición que el movimiento no es válido).
-
-
un ComplexAction "tomar disco" con
-
un SimpleAction que mueva el disco desde la lista de gameObjects de un stack a la lista de gameObjets del jugador (con la condición que la lista de discos del stack no esté vacía y el jugador no tenga ya otro disco tomado).
-
un SimpleAction avise que el stack este vacio (con la condición que la lista de discos del stack esté vacía).
-
un SimpleAction avise que el jugador ya tiene un disco tomado (con la condición que la lista de gameObjects del jugador tenga un disco).
-
-
un ComplexAction "soltar disco" con
-
un SimpleAction que mueva el disco desde la lista de gameObjects del jugador a la lista de gameObjets de un stack (con la condición que la lista de discos del stack no esté llena y el jugador tenga un disco tomado).
-
un SimpleAction avise que el stack está lleno (con la condición que la lista de discos del stack está llena).
-
un SimpleAction avise que el jugador no tiene un disco tomado (con la condición que la lista de gameObjects del jugador no tenga ningun disco).
-
-
un ComplexAction "cruzar rio " con
- un SimpleAction que mueva al jugador desde la lista de gameObjects de una orilla a la lista de gameObjets de otra (con la condición que la lista de gameObjects de la orilla origen tenga al jugador).
-
un ComplexAction "abrir puerta2" con
- un SimpleAction que mueva al jugador de la lista de gameObjects del room2 a la lista de gameObjets del room3 (con la condición que el jugador tenga al mono en su lista de gameObjects hijos).
-
un ComplexAction "entregar disco" con
- un SimpleAction que mueva al jugador de la lista de gameObjects del jugador a la lista de gameObjets del arqueologo (con la condición que el jugador tenga al mono en su lista de gameObjects hijos).
-
un ComplexAction "abrir puerta3" con
-
un SimpleAction que mueva al jugador de la lista de gameObjects del room3 a la lista de gameObjets del room4 y avise que se ha ganado el juego (con la condición que el jugador no tenga ningun veneno y ningun disco en su lista de gameObjects hijos).
-
un SimpleAction que mueva al jugador de la lista de gameObjects del room3 a la lista de gameObjets del room4 y avise que se ha ganado el juego (con la condición que el jugador no tenga ningun veneno y ningun disco en su lista de gameObjects hijos).
-
un SimpleAction que avise que jugador perdio el juego (con la condición que el jugador tenga un veneno o un disco en su lista de gameObjects hijos).
-
Un grafo del juego es como el siguiente (donde el templo es el escenario):
- templo
- habitacion1
- jugador
- acantilado
- puerta
- cofre1
- fragmento1
- veneno1
- cofre2
- fragmento2
- veneno2
- nicho1
- fragmento3
- antidoto1
- nicho2
- fragmento4
- mono
- esqueleto1
- fragmento5
- veneno3
- esqueleto2
- fragmento6
- veneno4
- planta1
- fragmento7
- veneno5
- planta2
- fragmento8
- antidoto2
- habitacion2
- orilla1
- stack1
- disk1
- disk2
- disk3
- stack2
- stack3
- stack1
- rio
- orilla2
- stack1
- disk1
- disk2
- disk3
- stack2
- stack3
- stack1
- orilla1
- habitacion3 - arqueologo
- habitacion1