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
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
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
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.
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:
- Login (opcional)
- Seleccion de Personaje
- Resultado del reto a duelo, que puede ser:
- No tienes rival
- Ganador
- 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.
- Login (opcional)
- Pantalla de selección de personaje
- Pantalla de personaje seleccionado
- 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)