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.
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
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.
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
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
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
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.
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.
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)
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.
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
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
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
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.
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
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)
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
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
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)
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.
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.
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.
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)