¿Donde está Carmen Sandiego? (v2)

Hoy nos encontramos con un problema que muchos otros enfrentaron antes.

Queremos saber ¿Dónde está Carmen Sandiego?

Para los más jóvenes a los que nunca les hicieron la famosa pregunta los invitamos a leer un poco más en: http://es.wikipedia.org/wiki/Carmen_Sandiego

Para los perezosos les hacemos un resumen.

Carmen Sandiego es una reconocida (y peligrosa) criminal internacional que recorre el mundo robando importantes obras de arte.

El objetivo de todo agente internacional es atraparla y así terminar con la serie de fechorías.

Junto a ella operan un conjunto de malhechores generando caos en el mundo.

En el juego, el jugador es un detective que se dedica a viajar por el mundo, siguiendo las pistas que dejan los delicuentes para tratar de atraparlos.

Dominio

Los Villanos

Todo en el juego gira entorno a los Villanos, que son quienes cometen los delitos para luego esconderse en algún lugar del mundo.

De cada Villano se conoce:

  • nombre
  • sexo
  • señas particulares
  • hobbies
Ejemplo
  Nombre: Carmen Sandiego
  Sexo: Femenino
  Señas particulares:
    - Pelo rojo
    - Maneja un convertible
    - Posee un collar de rubies
    - Su comida favorita son los tacos mexicanos
  Hobbies:
    - Juega tenis
    - Baila tango

El Mundo

Luego de cometer un crimen, el villano seguirá una ruta de escape que lo hará recorrer varios paises; la misión del detective es viajar por el mundo, tratando de encontrarlo. Para esto, se cuenta con un mapamundi que tiene la información importante de cada pais:

  • Nombre del país
  • Características del país
  • Lugares de interés
  • Países con los que tiene conexiones aéreas

Ejemplo

  Nombre: Argentina
  Características:
    - Bandera celeste y blanca
    - Bandera con un sol
    - Moneda Peso
    - Casa de gobierno rosada
    - Conocida por los Gauchos
    - Comida típica empanadas
    - beben mate
  Lugares de interés:
    - Embajada
    - Biblioteca
    - Club
  Conexiones:
    - Perú
    - España
    - Brasil

Es importante notar que las conexiones aéreas deben funcionar en ambas direcciones, es decir que siempre que un país esté conectado a otro, este también debe estar conectado al primero.

Los lugares de interés de un país son ubicaciones a donde el detective podrá dirigirse en su investigación. En caso de que un criminal haya pasado por el país, en todos los lugares de interés podrán encontrarse pistas sobre quien es el villano o hacia donde se dirigió. Las pistas que pueden encontrarse en cada lugar de interés dependen de que tipo de lugar sea, a saber:

  • Embajada: Cuando tiene información del malechor da 2 pistas sobre el país hacia donde se dirigió.
  • Banco: Cuando tiene información del malechor da una pista sobre el país hacia donde se dirigió y otra sobre sus señas particulares.
  • Biblioteca: Cuando tiene información del malechor da una pista sobre el país hacia donde se dirigió y sobre sus señas particulares. Además tiene 50% de chance de dar una pista más sobre sus hobbies.
  • Club: Cuando tiene información del malechor da dos pistas sobre sus señas particulares y el 70% de las veces agrega información sobre sus hobbies.

Cuando el detective viaja al destino final del criminal (es decir, al final de su ruta de escape), podrá encontrar al criminal en alguno de los lugares, capturándolo y dando por finalizado el caso. Si, por el contrario, el detective se equivoca en su investigación y visita un país por el cual el criminal no pasó, todos los lugares de interés le informarán que no saben nada de la persona que busca, y el detective tendrá que volver sobre sus pasos.

El Caso

El objetivo del juego consiste en resolver un crimen, encontrando al culpable y llevándolo ante la justicia. Para ello, el detective es asignado a un caso. Cada caso tiene asociado un responsable (el villano que intentaremos capturar), el plan de escape de este (que consiste en una secuencia ordenada de países conectados, que comienza en el país al que el criminal se dirigió luego de cometer el delito), e información relacionada al acto criminal, el objeto del crimen y el país donde tuvo lugar.

Ejemplo
  Responsable: Carmen Sandiego
  Plan de escape: [Inglaterra, Rusia, Chile, Australia, Guatemala, Bosnia, Japón, Italia]
  Reporte:
    A las 9 de la mañana en la ciudad del Cairo la comunidad científica fue conmovida al darse cuenta del faltante
    de gran valor! El sarcófago del faraón Usermaatra-Meriamón Ramsés-Heqaiunu, mejor conocido como Ramsés III. El criminal
    fue muy prolijo y la escena del crimen no contaba con pista alguna, su misión como detective es descifrar el
    responsable de tal crimen y apresarlo.
  Objeto: Sarcófago del faraón
  País donde ocurrió: Egipto

Por supuesto el detective no tiene conocimiento de quien es el responsable o cual será su ruta de escape; esto debe investigarlo por su cuenta! Para ello, inicia su investigación en en ese país donde ocurrió el siniestro, visitando los lugares de interés en busca de pistas sobre el criminal o su próximo destino o siguiéndole la pista viajando por el mundo. En cada país por el que pasa puede visitar los lugares de interés para obtener información o viajar a alguno de los país conectados.

En todo momento el detective puede pedir una orden de arresto contra el criminal que cree que ha perpetrado el acto delictivo. Sólo podrá pedir una orden de arresto, así que debe ser cuidadoso! Cuando se llega al país donde se encuentra el criminal (el último en su plan de escape) y se visita el lugar donde se encuentra, el criminal es capturado; sin embargo, si el detective no pidió una orden de captura (o la pidió para la persona equivocada) el criminal quedará en libertad y el caso quedará sin resolver.

TP 1 - Arena

En la primer entrega del TP se deberá modelar una interfaz gráfica que permita crear, modificar y borrar las entidades necesarias para dar soporte al juego. Para todas las vistas se deberán tener en cuenta las restricciones del modelo y hacer respetar las reglas de negocio proveyendo al usuario de un flujo de interacción predecible, notificando los problemas de forma adecuada. El conjunto de las pantallas a desarrollar se detalla a continuación:

0) Pantalla de Inicio

Esta pantalla cuenta con 3 botónes: Mapamundi, Expedientes y Casos, que abren las vistas [1], [2] y [3], respectivamente.

1) Mapamundi

En esta pantalla se puede ver un listado de los países creados y los detalles (en modo sólo lectura) del país seleccionado en la lista.

El botón Eliminar debe descartar el país seleccionado (en caso de haber uno), no sin antes solicitarle confirmación al usuario.

Los botones Editar y Nuevo abren la vista [1.1], sobre el país seleccionado en la lista o un nuevo país, respectivamente.

1.1) Editar Pais

Esta pantalla muestra el nombre del país en un campo de texto editable, así como también sus características, conexiones y lugares de interés. Los botones Editar Características, Editar Conexiones y Editar Lugares abren sobre el país las vistas [1.1.1], [1.1.2] y [1.1.3], respectivamente. Tengan en cuenta que es obligatorio ingresar el nombre del país, sus 3 lugares de interés y, al menos, una característica.

1.1.1) Editar Características

Muestra una lista con las características actuales, un botón para eliminar la característica seleccionada en la lista (si hubiera alguna), y un campo de texto editable para ingresar una nueva característica que será agregada presionando el botón Agregar.

1.1.2) Editar Conexiones

Muestra una lista con las conexiones actuales, un botón para eliminar la conexión seleccionada en la lista (si hubiera alguna), y un combo con los países creados hasta el momento en el sistema que será agregado a la lista presionando el botón Agregar. Tengan en cuenta que un país no puede tener conexiones repetidas o consigo mismo.

1.1.3) Editar Lugares

Muestra una lista con los lugares de interés actuales, un botón para eliminar el seleccionado en la lista (si hubiera alguno), y un combo con los tipos de lugares disponibles que será agregada presionando el botón Agregar. Tener en cuenta que un país tiene que tener EXACTAMENTE 3 lugares de interés y estos no pueden ser de tipos repetidos.

2) Expedientes

En esta pantalla se puede ver un listado de los villanos creados y los detalles (en modo sólo lectura) del villano seleccionado en la lista.

El botón Eliminar debe descartar el villano seleccionado (en caso de haber uno), no sin antes solicitarle confirmación al usuario.

Los botones Editar y Nuevo abren la vista [1.2], sobre el villano seleccionado en la lista o un nuevo villano, respectivamente.

1.2) Editar Villano

Esta pantalla muestra el nombre del villano en un campo de texto editable y su sexo en un combo con las opciones "Masculino" y "Femenino", así como también sus señas particulares y sus hobbies. Los botones Editar Señas Particulares y Editar Hobbies abren sobre el país las vistas [1.2.1] y [1.2.2], respectivamente. Tengan en cuenta que es obligatorio ingresar el nombre del villano y, al menos, 2 señas particulares y un hobbie.

1.2) Editar Señas Particulares

Muestra una lista con las señas particulares actuales, un botón para eliminar la seña seleccionada en la lista (si hubiera alguna), y un campo de texto editable para ingresar una nueva seña que será agregada a la lista presionando el botón Agregar. Tengan en cuenta que un villano no puede tener señas repetidas.

1.2) Editar Hobbies

Muestra una lista con los Hobbies actuales, un botón para eliminar el hobbie seleccionado en la lista (si hubiera alguno), y un campo de texto editable para ingresar un nuevo hobbie que será agregado a la lista presionando el botón Agregar. Tengan en cuenta que un villano no puede tener hobbies repetidos.

3) Casos

Por último se pide diseñar e implementar las pantallas de Alta/Baja/Modificación para los casos, teniendo en cuenta las implementadas hasta ahora. Es necesario pensar que elementos visuales, validaciones y funcionalidades son necesarias para permitir la carga y mantenimiento de los casos (vale basarse en las vistas anteriores).

Las pantallas deben permitir la visualización y carga de un Título para el caso, un Reporte, que consiste en un texto amplio describiendo los sucesos, un Objeto que identifica el ítem robado y un País donde el crímen ocurrió, que debe elegirse de entre los países creados. (El responsable y el plan de escape también son datos del caso, pero estos serán generados aleatoriamente durante el juego y NO DEBEN cargarse en esta entrega)

NOTA: En todas las vistas debe hacerse especial foco en evitar el código redundante o repetido. Esto sólo se puede lograr diseñando bien las interfaces y extrayendo y reutilizando componentes comunes. Para aprobar el TP NO ALCANZA con entregar un programa que muestre ventanas, también debe estar bien diseñado y se debe manejar bien tanto el flujo común del programa como las situaciones excepcionales.

TP 2 - Web Stateless

En esta entrega implementaremos la interfaz gráfica para jugar el juego, poniendonos en la piel del detective y resolviendo los casos. Las pantallas detalladas a continuación deben implementarse utilizando una arquitectura web stateless, distribuyendo la lógica y la representación de acuerdo a lo visto en la cursada.

NOTA: Las maquetas para las pantallas se presentan sólo a modo de referencia, los detalles de alineado y presentación pueden variar mientras se mantenga intacta la navegación y funcionalidad propuesta. Recuerden que el objetivo del TP consiste en generar una buena arquitectura y un diseño de objetos sólido, robusto y mantenible, y no un diseño gráfico estético. Por supuesto, aquellos que deseen dedicarle tiempo a embellecer su aplicación son bienvenidos, pero se recomienda concentrarse en los aspectos funcionales primero.

0) Página de Inicio

Esta es la pantalla inicial de la aplicación, correspondiente al directorio raíz. Para llegar a ella, es necesario someter al usuario a algún proceso de login para identificarlo y permitir así que varios usuarios puedan jugar en simultaneo (los detalles del mismo corren por cuenta del alumno: háganlo cómo prefieran, pero recuerden: Debe manejarse de forma adecuada el caso de que el usuario falle al ingresar los datos).

La pantalla presenta dos botones: Resolver Misterio, que gatilla la generación aleatoria de un nuevo caso (es decir, la selección de un caso pre-cargado, un villano, una ruta de escape) y redirige la aplicación a la pantalla [1] y Expedientes que redirige a la pantalla [1.1.2].

1) Presentación del Caso

Esta pantalla tiene cómo título el título asignado al caso y muestra el reporte del mismo y un saludo al detective (Nota: A la palabra "Detective" en la maqueta debe anexarse el nombre de usuario del jugador).

Además aparecen los botones Elegir Otro, que regenera el caso y recarga la pantalla y Aceptar el caso que redirige a la pantalla [1.1].

1.1) Resolviendo el caso

Esta es la pantalla principal de resolución, desde donde el detective podrá elegir visitar los lugares del país actual [1.1.1], revisar los expedientes de los villanos [1.1.2], solicitar una orden de arresto [1.1.3] o viajar a otro país [1.1.4].

En la parte superior se puede visualizar el nombre del país actual y en la sección inferior una lista con los lugares ya visitados, separados en acertados (aquellos que el criminal visitó) y fallidos (aquellos al que el detective fue, pero el criminal no).

El botón Orden de Arresto sólo estará habilitado en caso de no haberse solicitado una orden ya; caso contrario el texto "Orden ya emitida: " aparecerá debajo del botón, seguido del nombre del villano contra el que se emitió.

1.1.1) Vistar Lugar

Esta pantalla presenta el nombre del lugar visitado seguido de una de cuatro posibles variantes:

  • Si el criminal ha pasado por el país (es decir, está en su ruta de escape, pero no es el destino final) se muestran las pistas que el lugar, de acuerdo a su tipo, provee. (Arriba, Izq)
  • Si el país NO está en la ruta de escape del críminal, todos los lugares muestran un texto indicando esto mismo. (Arriba, Der)
  • Si el criminal se encuentra en el país actual (o sea, el país es el último de su ruta de escape), pero no en el lugar actual, se le informa al detective. (Abajo, izq)
  • Si el criminal está en el país y el lugar visitado se muestra el texto: "ALTO!!! Detengase: " seguido del nombre del culpable del caso (que no necesariamente es aquel contra el que el detective solicitó la orden de captura). Esto ocurre se haya o no emitido orden alguna.

En los primeros 3 casos el botón Continuar retorna a la pantalla [1.1]; en el último caso, redirige a la pantalla [1.2.1] si la orden de captura fue emitida contra el criminal correcto o a la pantalla [1.2.2] en cualquier otro escenario.

1.1.2) Expedientes

Esta pantalla lista en modo sólo lectura los datos de los criminales conocidos. Se provee una lista de con los nombres de los villanos y el Nombre, Sexo, Señas Particulares y Hobbies del que esté seleccionado en la lista.

También se puede ver una fotografía del críminal en caso de estar disponible o una foto genérica (diferente para Hombres y Mujeres) en caso de no estarlo. (Nota: Estas imágenes no forman parte del modelo y deben vincularse a este de otra forma).

El botón Atras redirige de nuevo a la vista [1.1].

1.1.3) Solicitar Orden de Arresto

Esta pantalla ofrece un combo con todos los criminales.

El botón Generar emitirá la orden de arresto, no sin antes confirmar esta acción con el usuario y redirigirá a la vista [1.1].

El botón Cancelar redirigirá a la vista [1.1] sin realizar cambios.

1.1.4) Viajar

Esta pantalla ofrece una lista con todos los países conectados al país actual. Aquellos países que aún no se hayan visitado deben aparecer en negrita y los fallidos en rojo.

El botón Generar redirigirá a la vista [1.1] correspondiente al país seleccionado (sea o no fallido o ya visitado), no sin antes confirmar esta acción con el usuario.

El botón Cancelar redirigirá a la vista [1.1] sin realizar cambios.

1.2.1) Fin del Juego: Final Felíz

Esta pantalla felicita al detective por su buen trabajo.

El botón Disfrutar de la Victoria redirige a la pantalla [0].

1.2.1) Fin del Juego: Mala Suerte

Esta pantalla indica al detective que se equivocó al emitir o no emitió la orden de arresto, de acuerdo al caso.

El botón Aceptar redirige a la pantalla [0].

TP 3 - Web Statefull

Esta entrega consiste en modelar las mismas pantallas que la entrega anterior, pero utilizando una arquitectura web Statefull, con Wicket integrandolo con pedidos AJAX (se pueden usar las herramientas de AJAX de Wicket, o usar AngularJS).

TP 4 - Android

Implementar una interfaz Android que permita acceder al ABM del mapamundi, implementado en el punto 1.1 del TP 1.