TP - Arena

Entrega 0

Esta entrega tiene por objetivo preparar nuestro entorno de trabajo y familiarizarnos con las herramientas que vamos a utilizar. Las tareas a realizar son:

  1. Crear el entorno de trabajo para Arena.
  2. Hacer andar los ejemplos de celulares y conversor de medidas, que están en la página de ejemplos de Arena.
  3. Desarrollar el dominio del TP.
  4. Construir una pantalla simple en Arena (los detalles se explican a continuación).

En esta primera entrega no se pide hacer la interfaz de usuario para el sistema completo, por lo tanto, en la tarea 4 vamos a aprovechar solamente una parte pequeña del dominio que hicimos en la tarea 3. El resto del dominio nos va a servir para los demás TPs.

La siguiente figura muestra un ejemplo de la pantalla que hay que realizar:

Dado que no vamos a tener todavía la aplicación concreta, deben crear datos de prueba antes de abrir la ventana. Como mínimo se debe crear un usuario y varios robots, algunos que pertenezcan al usuario y otros que no.

Si bien en la aplicación podría haber varios usuarios, siempre se va a mostrar la perspectiva de un usuario específico, que administra sus robots y que puede hacerlos pelear con los robots de otros usuarios.

El encabezado de la página debe mostrar el nombre del usuario y el dinero disponible. Debajo se ven los robots propios y el resto de los robots en el sistema (robots de otros usuarios y los que no tienen dueño. La pantalla es sólo a modo de ejemplo. De cada robot se debe mostrar su nombre, poder total, porcentaje, poder efectivo, precio. Las dos grillas son iguales.

Por ahora, la única acción posible es reparar. El botón de reparar se relaciona con el robot seleccionado en la grilla superior.

Entrega Final

Agregar los casos de uso que se mencionan a continuación.

Así, la pantalla principal podría pensarse ahora como la imagen siguiente:

Los nuevos botones darán acceso a las nuevas funcionalidades. Que se describen a continuación.

Aclaramos que esta pantalla es solo a modo de ejemplo. Pueden ustedes plantear cambios o mejoras, o implementaciones distintas.

Reparación Parcial

  • Modificar el caso de uso ya implementado para...
  • Poder especificar la cantidad de "deterioro" que se desea reparar.
  • Que el usuario tenga feedback de cuánto dinero le costará el arreglo, según la cantidad ingresada.
    • Idealmente que el feedback sea instantáneo.
  • Por ejemplo, si tengo un daño del 35%, y especifico que quiero reparar 21%, la UI debe indicarme cuánto dinero me costará eso. Según la descripción del dominio actual eso sería 21% * 25$/% = $525
  • Pensar e implementar las validaciones necesarias. Ej:
    • dinero insuficiente
    • Qué hacer con un robot que no tiene deterioro ?

A continuación se muestra una pantalla a modo de ejemplo, que podría servir como guía, aunque no necesariamente debe implementarla tal cual:

Mejorar Robot

  • Agregar la posibilidad de: dado un robot propio, poder comprar y aplicarle una mejora.
  • Al momento de visualizar las mejoras disponibles para su compra, el usuario debería poder ver:
    • el poder actual del robot (de modo de hacerse una idea de cómo impactará la mejora)
    • su dinero disponible: de modo de poder analizar qué mejoras están a su alcance.
  • De nuevo, tener en cuenta validaciones.

Nuevo screenshot de ejemplo:

Bonus:

  • No permitir seleccionar mejoras para las cuales el usuario no tiene dinero suficiente. Opciones:
    • Filtrar y mostrar solo aquellas cuyo "precio <= jugador.dinero"
    • Filtrar, sin embargo, mostrar las mejoras que estan fuera de alcance en una tabla adicional, de modo de que el usuario igualmente pueda saber qué otras mejoras hay disponible.
    • No filtrar, pero deshabilitar el botón de "Aceptar" si la mejora seleccionada muy cara para el usuario.

Comprar Robot

Implementar el caso de uso de compra, como se describe en la sección del dominio.

Se deberá implementar una pantalla donde:

  • El usuario podrá ver el listado de robots a la venta (los que no pertenecen a ningún usuario). Por ejemplo algunos datos interesantes para el comprador podrían ser:
    • poder (base y/o efectivo)
    • estado (en cuanto a daño)
    • precio de venta.
  • Deberá elegir uno de ellos
  • Deberá ingresar una oferta.

El sistema entonces evaluará si acepta la oferta, de acuerdo a las reglas del dominio.

// les debemos el ejemplo de pantalla acá

Vender Robot

La interfaz deberá exponer la posibilidad de vender uno de nuestros robots.

Para eso, obviamente el usuario deberá seleccionar un robot e indicar "Vender".

Ojo, que según el dominio vimos que la venta es en realidad en base a ofertas que realiza el sistema.

Entonces, al intentar vender un robot, la UI deberá presentar los datos de la oferta, y el usuario será quien decide aceptar o cancelarla, con las consecuencias que eso trae en base a lo descripto en el dominio.

Acá vemos un diagrama a modo de ejemplo de la implementación con un dialogo que se abrirá desde la pantalla principal al seleccionar un robot y clickear "Vender".

Bonus:

  • Al aceptar y/o cancelar, sería bueno que se muestre algún tipo de feedback al usuario sobre lo que sucedió. Dos formas serían:
    • Transicionar a otro diálogo que tenga simplemente un mensaje "Su robot se desgastó debido a que rechazó la oferta"
    • Otra opción un poco más "linda" sería que este mensaje aparezca directamente al volver, en la pantalla original de inicio, como un mensajito en la zona de feedback.

Pelear

Deberán implementar también este caso de uso. En nuestro ejemplo de pantalla principal que mostras más arriba, se puede ver que el usuario puede ver en todo momento la lista de robots que pertenecen a otros usuarios.

Luego, puede seleccionar uno de estos, e iniciar el caso de uso para competir con él.

Nótese que este caso de uso ya tiene la parte de la selección del robot a pelear en la misma pantalla principal. Esto lo hicimos así, ya que creemos que el caso de pelear/competir, es uno de los más importantes, y uno de los que el usuario utilizará con más frecuencia.

Entonces, en nuestro ejemplo al clickear en el botón "Competir", se deberá presentar al usuario una ventana a fín de que ingrese la apuesta.

Luego se deberá resolver el ganador y notificar el resultado.

// les debemos el ejemplo de pantalla acá