Duelo entre leyendas

Dominio

Muchos conocen la rivalidad que existe entre los aficionados a los juegos on-line, de hecho es bastante común verse envuelto en discusiones como: "El Lol es una copia del Dota", "Axe es mejor héroe que Garen", "En una team fight Master Yi le gana al Vipper en 3 segundos"

Ni lerdos ni perezosos, surgió la idea de hacer una aplicación que resuelva el problema de quien le gana a quien y permita retar a duelo a cualquier personaje conocido contra otro y los que tenemos que desarrollar esa aplicación somos nosotros!

Como todavía no se deciden por una única plataforma, vamos a tener que realizar pruebas de concepto en distintas tecnologías, pero antes debemos entender el dominio de nuestro problema.

Existen personajes que son los que se van a enfrentar durante nuestros duelos. Los personajes ya vienen definidos y los jugadores no pueden agregar nuevos, esto es tarea de los administradores de Duelo entre leyendas.

Los jugadores que ingresan al sistema pueden usar cualquiera de los personajes disponibles.

De cada jugador se van registrando los resultados de los duelos sobre los que va participando, una vez jugado un duelo el jugador pasa a tener más o menos experiencia de juego con ese personaje.

Cuando se selecciona el personaje y la posición con la que se quiere retar a duelo a otro el sistema asigna un contricante contra el cual pelear.

Como política de duelo entre leyendas queremos fomentar la camadería entre nuestros jugares por lo que, una vez finalizada la pelea se tiene que permitir denunciar al contricante por su comportamiento.

De cada jugador se forma un puntaje que tiene en cuenta, entre otras cosas las denuncias recibidas por sus rivales.

Denuncia

Luego de un duelo los jugadores pueden denunciar a su oponente por los siguientes motivos:

    • Abuso de habilidad: el contrincante es ampliamente superior en todos los aspectos y no hay chances de ganarle.
    • Comunicación abusiva: el contrincante abusa y tiene malos tratos con nosotros
    • Feed Intencional: el contricante se está dejando ganar y no presenta ningún desafío

Además del motivo de la denuncia debe de darse una descripción de la situación. A partir de esa descripción es que vamos a determinar si una denuncia es válida o fake, en el caso de que una denuncia sea fake se le genera al jugador (denunciante) una Denuncia cuyo motivo es: Abuso del sistema de denuncias y en su descripción el texto es: “El jugador intenta denunciar a: <<nombre del jugador oponente>> por: <<motivo de denuncias>> sin tener una justificación suficiente: <<justificación ingresada>>”.

Por el momento se consideran denuncias fakes las que no superan los 20 caracteres o tienen menos de 3 palabras.

Cada denuncia tiene un peso que depende del motivo:

    • Abuso de habilidad: 5
    • Comunicación abusiva: 7
    • Feed Intencional: 10
    • Abuso del sistema de denuncias: 25

Jugador

Un jugador es la persona que participa en el sistema proponiendo duelos.

De cada jugador nos interesa mantener las denuncias que tiene. Estas denuncias nos generarán una calificación general por usuario.

    • peso de denuncias * cantidad de peleas ganadas

La calificación nos permite ver con que jugador podemos hacer un duelo, solo podremos retar a los jugadores que estén entre +/- 100 puntos de distancia nuestra.

Personaje

Son los que se pelean en sí, los personajes son limitados y solo los puede editar el administrador del juego (agregar, modificar o desactivar).

Todos los personajes pueden ser manejados por cualquier jugador pero no con la misma efectividad.

Por el uso que le da el Jugador al personaje tiene un desempeño de menor a mayor (entre paréntesis se detalla el valor de las calificaciones):

    • (100) RAMPAGE: Tiene dominio absoluto: esto pasa cuando el jugador tiene experiencia previa (de al menos cinco duelos) jugando con este personaje en la posición ideal para este y además sacó un numero al azar > a 90
    • (75) DOMINADOR: Esto pasa cuando el jugador tiene experiencia previa (de al menos dos duelos) jugando con este u otros personajes en la posición ideal para este y además sacó un numero al azar > a 70
    • (60) KILLING-SPREAD: En otro caso, si sacó un numero al azar > a 50
    • (15) MANCO: Esto para cuando juega en la mejor posición para el personaje y además sacó un numero al azar > a 30
    • (5) NOOOB: En cualquier otro caso

De cada personaje nos interesa:

    • Las especialidades que tiene
    • Las debilidades que tiene
    • La posición ideal de juego

NOTA: La nueva calificación del personaje para ese jugador se actualiza al finalizar el duelo

Estadísticas

Las estadísticas muestran la experiencia de un jugador con cada personaje.

En detalle, las métricas que nos interesan por personaje son:

    • Cantidad de veces que lo usó para iniciar un duelo
    • Cantidad de veces que ganó un duelo
    • Cantidad de kills: cantidad de duelos que ganó que no fueron iniciados por él
    • Cantidad de deads: cantidad de duelos que perdió que no fueron iniciados por él
    • Assists: cantidad de duelos que empató (independientemente si los inició o no el jugador)
    • Ubicaciones usadas: de los duelos iniciados por el jugador
    • Mejor ubicación: ubicación con la que obtuvo la última victoria de duelos iniciados por el jugador
    • Calificación: última calificación obtenida por el personaje en un duelo iniciado por el jugador

Duelo

El duelo es un desafío para el que se anime y tiene varios pasos que traen consecuencias para los jugadores y afectan a sus estadísticas.

Vamos a detallar cada uno de los pasos del duelo y que es lo que implica

Elegir personaje

Primero el retador a duelo elige el personaje con el que va a realizar el duelo.

Una vez que fija el personaje elige la posición en la que va a pelear.

Las posiciones de pelea son siempre 4:

    • TOP
    • BOTTON / BOT
    • MIDDLE / MID
    • JUNGLE

Cada personaje tiene facilidad en alguna de las posiciones: la posición ideal del juego. El jugador puede elegir cualquier posición para cualquier personaje.

Determinar Rival

El rival es cualquier jugador que se encuentre en el mismo escalón del ranking donde está el jugador que inició el reto.

El personaje elegido para competir es cualquiera con el que el jugador haya retado a duelo previamente a algún adversario, si aún no ha realizado ninguna batalla, el personaje es cualquiera (que no sea el elegido por el retador).

Si no hay ningun jugador que pueda competir contra el retador se le informa al jugador que “NO HAY QUIEN SE LE ANIME EN SU ACTUAL RANKING” y el jugador debe poder elegir entre: retar a MR-X para avanzar en el ranking y conseguir un rival a su altura o Considerarse el sabio ganador de la Leyenda del Anciano y descansar en su gloria.

Si elige la primer opción aparece nuestro jugador fantasma MR-X! y se juega contra él, MR-X es un jugador robot, que utiliza el sistema para estos casos.

Si elige la segunda opción se cancela el duelo.

Realizar duelo - Resultados

El ganador del duelo es el que tiene mejor poder de ataque * un factor de suerte (un random entre 0 y 1).

El poder de ataque de los personajes dependen de la calificación de ese personaje para el jugador + las estadisticas del usuario y se calcula como:

Valor de la Clasificación + (kills + assists / 2 - deads) * cantidad de veces usado el personaje para iniciar un duelo.

NOTA: Si un jugador nunca había jugado con un personaje tomamos como clasificación la más baja

Tanto el retador como el contrincante del duelo actualizan sus estadísticas una vez finalizado el reto sabiendo el resultado obtenido.

(Ver detalle de estadísticas en la sección Estadísticas)

TP 1: Interfaz de escritorio usando Arena

Las pantallas son sugerencias, pueden modificarlas, pero para este primer trabajo práctico tienen que consultar las modificaciones con alguno de los docentes de la materia.

Las pantallas las presentamos en el orden sugerido para que las programen.

Denunciar Participante:

El objetivo de esta pantalla es realizar una denuncia contra un participante.

Para realizar la denuncia es obligatorio indicar el motivo, luego de realizar la denuncia hay dos posibilidades:

  • Sancionaron al jugador que denunciamos
  • Nos sancionaron a nosotros
HacerDenuncia.png
sancionaronAlOtro.png
teSancionaron.png

Ver resultado de un duelo

Un duelo es entre dos personajes de jugadores, en esta pantalla nos informan de:

  • Personajes que participaron
  • Jugadores que participaron
  • Estadísticas despues del partido
  • Ganador del duelo y resultados
  • Acciones después del duelo
    • Aceptar derrota: cierra la ventana y vuelve a la pantalla para elegir el duelo
    • Denunciar actitud antideportiva: va a la pantalla anterior
RdoPelea.png

Retar a duelo

En esta pantalla se puede:

  • Ver las estadísticas de los personajes del jugador
  • Elegir un personaje
  • Seleccionar una posición
  • Iniciar un duelo

Una vez enviada la solicitud de inicio de duelo puede pasar:

  • Que no haya jugador disponible para batallar con nosotros, en ese caso hay que informar que no tenemos rival y preguntar que se desea hacer
  • Que encontremos un rival, con lo que hay que informar del resultado del combate
SeleccionarPersonaje-Arena.png
NoTeEnfrentan.png

TP2: Aplicación web

El objetivo de este trabajo práctico es familiarizarnos con tecnologías web actuales.

El código del tp2 debe estar en el mismo repositorio que los tps anteriores en otra carpeta.

Vamos a exponer servicios que consumiremos desde una página web.

Servidor

La tecnología que usaremos para exponer los servicios es XTRest.

Deben de implementarse los servicios que se mencionan a continuación (siendo opcional el de login) y debemos estar en control de los datos que se envían desde nuestra API, es decir que no enviaremos datos de mas.

NOTA: Consideramos que un dato está de más cuando no se muestra en la pantalla ni es usado como input de otro servicio

Login (opcional)

Es el servicio que usaremos para validar que el par ingresado usuario-contraseña sean válidos. En caso de login correcto responde con el id del usuario.

Características

  • Invocación: POST
  • Parametros: nombreDeUsuario y contraseña
  • Respuesta: JSON con id del usuario y descripción del error (si no hubo error la descripción se encuentra vacía, en caso contrario el id del usuario se encontrará sin datos)

Datos del Juego

Es el servicio que usaremos para obtener los datos relacionados con el juego para un usuario.

Características

  • Invocación: GET o POST (queda a decisión del grupo)
  • Parametros: id del usuario
  • Respuesta: JSON con las posiciones posibles para todos los duelos y los datos de los personajes mostrados en la pantalla de iniciar duelo. Cada personaje debe tener:
    • Id del personaje
    • Path a la imagen
    • Estadisticas para el jugador actual
    • Características del personaje

Jugar

Es el servicio que usaremos una vez elegido el personaje y posición con el que se va a retar a duelo.

Características

  • Invocación: GET o POST (queda a decisión del grupo)
  • Parametros: id del usuario, id del personaje elegido, posición seleccionada
  • Respuesta: JSON con el resultado de la partida.
    • Queda a criterio de cada grupo como modelar las distintas respuestas según las condiciones

Jugar contra MR-X

Es el servicio que invocaremos en el caso de que el resultado del reto sea que no hay rival y el jugador decida retar a MR-X

Características

  • Invocación: GET o POST (queda a decisión del grupo)
  • Parametros: id del usuario, id del personaje elegido, posición seleccionada
  • Respuesta: JSON con el resultado de la partida (debe ser igual a la respuesta del servicio Jugar)

Cliente

El Frontend lo vamos a programar en Angular.

Te proponemos dos alternativas para la navegación de la aplicación, en el grupo elijan una e implementenla.

Los mockups de pantalla pueden ser modificados a gusto del grupo, lo único que deben respetar es mostrar imágenes junto con el nombre del personaje.

Alternativa SPA

Como su nombre lo indica tendremos una única página.

Desde esta página podremos elegir un personaje y retar a un duelo.

Los resultados de lanzar el reto se ven dentro de la misma página con un cuadro de diálogo que depende del resultado del duelo.

Android-SeleccionarParticipante.png

Alternativa Varias Paginas

En vez de tener una única pagina, navegaremos entre distintas alternativas, según el resultado de las acciones.

Tambien te proponemos que tenga una página de login (opcional).

Contaremos con:

  1. Login (opcional)
  2. Seleccion de Personaje
  3. Resultado del reto a duelo, que puede ser:
    1. No tienes rival
    2. Ganador
    3. Perdedor

Desde la tercer vista siempre volveremos a la selección del personaje.

TP3: Aplicación Mobile

El objetivo de este trabajo práctico es familiarizarnos con tecnologías mobile actuales.

El código del TP3 debe estar en el mismo repositorio que los TPs anteriores en otra carpeta.

Para la aplicación mobile realizaremos la aplicación con Android, cuya información será obtenida del servidor REST creado en el TP2.

Serán 4 pantallas en las que cada una debe sólo consumir un servicio REST.

  1. Login (opcional)
  2. Pantalla de selección de personaje
  3. Pantalla de personaje seleccionado
  4. Pantalla de estadísticas de personaje seleccionado

(en la parte superior esta el search para buscar un personaje - esto es opcional Cuando se selecciona un personaje de la tabla va al detalle del personaje en donde vemos las habilidades sin las estadísticas)

(el cuadrado superior es para agregar la foto del personaje, el botón de Estadísticas va a una pantalla de estadísticas)