Enunciado Integrador

Integrador correspondiente a la cursada de 2°Cuatrimestre 2015

Condiciones de aprobación:

Realizar la entrega final del TP al menos una semana antes de la inscripción al integrador.

Nuestra recomendación es avanzar lo antes posible con este tema y entregarlo cuanto antes, de forma de tener la posibilidad de una reentrega en caso de ser necesario.

Para que el TP esté aprobado debe cumplir los siguientes requerimientos:

1) Cumplir con el 100% del enunciado, no pueden quedar items sin resolver o cuyo funcionamiento sea parcial o incorrecto.

2) Aplicar correctamente los conocimientos específicos de la materia en la resolución del ejercicio.

3) Proveer los tests de domino necesarios para validar adecuadamente la solución.

4) Tanto el código principal como los tests deben estar construidos con una calidad acorde a un Técnico Universitario, el código debe ser prolijo y claro.

5) La forma de entrega será a través de un repositorio de código de tu elección e incluirá un instructivo que indique claramente cómo instalar el software en cualquier computadora, cómo ejecutarlo y cómo testearlo.

6) Una vez que el software entregado cuente con la aprobación correspondiente, podés inscribirte al integrador.

El día del integrador se tomará un coloquio en el que deberás contestar preguntas sobre el diseño y el funcionamiento del software entregado, para confirmar que vos sos el autor del mismo.

Ejercicio: Pelea de Robots

Dominio

Introducción

La idea del juego es que hay jugadores, que cada uno tiene robots y puede hacerlos pelear con otros robots. Cada jugador tiene un nombre, una cantidad de dinero y una colección de robots.

La perspectiva de la aplicación es siempre la de un jugador individual. Este jugador administra sus robots, puede comprar robots nuevos, reparar o vender sus robots y hacerlos pelear con otros.

Robots

Cada robot tiene un nombre, un poder (que es numérico) y un nivel de deterioro (un porcentaje que indica qué tan roto está). En cada pelea el robot va a deteriorarse (incrementa su nivel de deterioro).

A partir del poder total del robot y el estado se puede calcular el poder efectivo:

poderEfectivo = poderTotal * (100 - nivelDeterioro) / 100

El precio del robot se calcula en función del poder efectivo:

precio = poderEfectivo * 50$

Peleas

Para pelear con otro robot, se debe elegir un robot que no sea propio y hacer una apuesta. Se puede apostar hasta el 75% del dinero que uno tenga. Los robots "no propios" son los que pertenecen a algún otro usuario.

La probabilidad de ganar una pelea se calcula dependiendo del poder relativo entre los dos robots y un random entre 0 y 1, es decir:, alguien gana una pelea si

random(0,1) <= poderPropio / (poderPropio + poderOponente).

La ganancia obtenida por la apuesta también depende de la relación de poder entre los robots.

Se debe calcular de la siguiente forma:

ganancia = apuesta * (poderPropio + poderOponente) / poderPropio

Por otro lado, la competencia hace que se desgasten los robots. Cuanto más diferencia de poder hay entre los robots, más se desgasta el robot. De todos modos el mínimo desgaste posible es del 5%:

porcentajeDesgaste = max ( 0.05 , (poderPropio - poderOponente))

El robot oponente no se ve afectado por una pelea no iniciada por su dueño.

Reparación de un Robot

La reparación permite mejorar el estado de un robot, invirtiendo algún dinero. Hay dos formas de reparación:

    • Reparación parcial. Se indica el porcentaje en el que se desea mejorar el estado del robot y cuesta $25 por cada punto porcentual.
    • Reparación total. Se deja el robot como nuevo, con el estado al 100%.

Mejora de un Robot

El usuario podrá mejorar sus robots incrementando el poder de estos.

Para eso, el sistema provee una serie de "mejoras" disponibles.

Una mejora tiene un nombre o descripción, y al ser aplicada sobre un robot, incrementa su poder base en un porcentaje dado.

Como en la vida, nada es gratis, así que las mejoras tienen un precio. El usuario compra las mejoras para aplicar a un robot en particular de los que tiene.

Entonces, citamos un par de ejemplos aquí:

Vistas a implementar

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 de otros usuarios. 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.

Pantalla principal

En esta pantalla se ve los datos de los robots del usuario y de los disponibles, asi como las acciones antes mencionadas::

ppal.jpg

Esta pantalla es solo a modo de ejemplo. Pueden plantear cambios o mejoras, o implementaciones distintas, previamente consultando con el docente.

Reparación Parcial

En esta pantalla debe permitir:

    • 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.
      • 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. Ejemplo:
      • 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, contemplar cambios:

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.

Ejemplo de interfaz:

No permitir seleccionar mejoras para las cuales el usuario no tiene dinero suficiente.

Pelear

Deberán implementar también este caso de uso. En nuestro ejemplo de pantalla principal, 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.

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.

Debe diseñar la pantalla e implementarla.