Está en la página 1de 5

Proyecto de programación I

Publicación de letra: 16 de Octubre de 2023

Fecha de entrega digital: 13 de Noviembre de 2023

Defensas: 16 de Noviembre hasta 30 de Noviembre

Se solicita la implementación del problema planteado a continuación


utilizando el lenguaje Java.
Para lograrlo deberán utilizar todo lo aprendido durante el curso si
consideran necesario podrán utilizar otras herramientas del lenguaje
siempre y cuando puedan justificar y explicar su utilización.

Se deberá trabajar en grupos de 2 integrantes o 3 para casos


excepcionales.
Batalla Pokémon
Pokémon GO es un juego para dispositivos móviles desarrollado por la empresa
Niantic.

El juego consiste en buscar y capturar personajes de la saga Pokémon escondidos en


ubicaciones del mundo real y luchar con ellos, lo que implica desplazarse físicamente
por las calles de la ciudad para progresar.

Este juego como los demás de la saga también cuenta con un sistema de combates
competitivos en un sistema de ligas llamado GO Battle League (GBL) y aquí es donde
comienza su travesía como desarrolladores.

Deberán construir un sistema capaz de simular los combates de la GBL a través de la


consola.

A continuación se darán detalles específicos que necesitarán para desarrollar el


sistema.

Pokémon
El sistema tiene almacenada la siguiente información de un Pokemon:

- Nombre (es único para cada pokémon)

- Tipo (existen 18 tipos de pokémon)

- Ataque (es una estadística básica de todo pokémon)

- Defensa (es una estadística básica de todo pokémon)

- Puntos de salud o HP(es una estadística básica de todo pokémon)

- Movimiento Rápido (cada pokémon debe conocer un único movimiento rápido)

- Movimiento Cargado (cada pokémon debe conocer un único movimiento


cargado)

Para poder probar el sistema deberán tener previamente almacenado al menos un


pokémon de cada tipo con toda su información cargada correctamente.
Si desean agregar más pokémon para tener variedad pueden hacerlo
Pueden buscar los datos en el siguiente enlace: Lista de pokémon
Los puntos de salud corresponderá al máximo HP a nivel 40 detallado en la página.
Usar el tipo primario (el de la izquierda )de un pokémon si este es de dos tipos.
Movimientos rápidos
El sistema tiene almacenada la siguiente información de los movimientos rápidos:

- Nombre (es único para cada movimiento)


- Daño (es el daño que causa el movimiento)
- Tipo (es el tipo del ataque)
- Energía (los movimientos rápidos generan energía cada vez que se lanzan)
- Segundos (es el tiempo que tarda en lanzarse el movimiento)

Movimientos cargados
El sistema tiene almacenada la siguiente información de los movimientos cargados:

- Nombre (es único para cada movimiento)


- Daño (es el daño que causa el movimiento)
- Tipo (es el tipo del ataque)
- Energía (los movimientos cargados tienen un costo de energía, si el pokémon
no tiene la energía necesaria no podrá lanzar el movimiento)
Lista de ataques y su información

Combate
Cada combate es un enfrentamiento entre dos jugadores los cuales tienen a su
disposición 3 pokémon, es decir, el ganador del combate será aquel que debilite
completamente la salud de los 3 pokémon del rival uno a uno, es decir, el
enfrentamiento se da entre 1 pokémon de cada jugador mientras los otros 2
“esperan su turno”

Movimientos rápidos durante el combate


En el videojuego los movimientos rápidos se lanzan cada vez que el jugador toca la
pantalla respetando la ventana de tiempo en segundos que tarda la animación.

En la práctica los jugadores presionan repetidas veces la pantalla sin tener en cuenta
esto ya que lo importante es lograr atacar lo más rápido posible ya sea para debilitar
rápido al rival o tener lo más rápido posible el ataque cargado disponible.

En nuestro caso simularemos el “presionar la pantalla” con ciclos repetitivos y cada


ciclo representa “0.5 segundos” ya que es el tiempo mínimo que puede tardar un
movimiento rápido en lanzarse.
Cambio de pokémon durante el combate
En el videojuego los jugadores pueden cambiar el pokémon que se encuentra
combatiendo 1 vez cada 60 segundos.

En nuestro caso cada 5 segundos de combate preguntaremos a los jugadores si


desean seguir combatiendo con su pokémon o desean cambiarlo.
Recordar que esos 5 segundos son teóricos y no reales ya que están dados por
los ciclos repetitivos que representarán 0.5 segundos.

Movimientos cargados durante el combate


En el videojuego los jugadores pueden lanzar el ataque cargado una vez que tienen
suficiente energía presionando la opción en la pantalla.

En nuestro caso una vez que un pokémon tenga suficiente energía para lanzar su
movimiento cargado le permitiremos al jugador decidir si lanzarlo en ese momento o no
hacerlo.

Si decide que sí, entonces lanzará el movimiento cargado en ese momento.

Si su decisión es que no, entonces se le volverá a preguntar si quiere lanzarlo más


adelante cuando su pokémon termine de lanzar su siguiente movimiento rápido ya que
cada movimiento rápido tiene un tiempo que tarda en lanzarse y se lanzan
automáticamente como ya detallamos.

Cada jugador tendrá a su disposición 2 escudos que permitirán protegerse de un


movimiento cargado del rival. Solo serán 2 escudos para los 3 pokémon y no 2 escudos
por cada pokémon

Mostremos un ejemplo:

El pokemon Pikachu tiene el movimiento rápido Impactrueno

Y el movimiento cargado Voltio Cruel

Para que el Pikachu pueda lanzar Voltio Cruel deberá tener 45 de energía ya que ese
es el costo del cargado, entonces, si impactrueno carga 9 de energía cada 1 segundo
deberá lanzar 5 Impactrueno esto le llevará 5 segundos.
A nivel de nuestra programación cada ciclo representa 0.5 segundos por lo tanto serán
10 ciclos para tener listo el Voltio Cruel y no en todos los ciclos se lanzará el
impactrueno sino que será cada 2do ciclo porque el primero representa
0.5 segundos, el siguiente 1 segundo (aquí se lanza), el siguiente 1.5 segundos
(no hace nada), el siguiente 2 segundos (aquí lanza otro).

Si los pokémon de ambos jugadores tienen disponibles su movimiento cargado al


mismo tiempo siempre tendrá prioridad el pokémon de mayor ataque por ende ese
pokémon atacará primero.

Dejo un pequeño gameplay de youtube para quien no conozca nada pueda ver por
primera vez un combate en la aplicación y entender un poco más todo lo descrito:

Video de muestra

Cálculo de daño
Pokémon GO simplifica un poco los cálculos de combate respecto a otros juegos de la
franquicia ya que tiene solo 3 stats base a continuación se encuentra la fórmula para calcular el
daño que hace un Pokémon

Daño causado = Floor (0.5 * (Ataque / Defensa) * STAB * Tipo * Potencia * Acierto) + 1

Floor : Esta es una función matemática cuyo resultado es siempre redondeado hacia abajo
(buscarla en java ya que esta existe en la clase Math).
Ataque : Es la estadística total de ataque del Pokémon atacante
Defensa : Esta es la estadística de defensa total del Pokémon defensor
STAB : Se trata de la bonificación de ataque para un Pokémon, que es igual a 1,25.
Sólo se aplica si el tipo del movimiento de ataque es el mismo que el tipo del atacante.
Si no se aplica simplemente se multiplica por 1
Tipo : Se trata de la efectividad del tipo de ataque, que puede ser de 0,39 (ataque no afecta)
0,625(ataque poco efectivo), 1 (ataque ni poco efectivo ni efectivo) 1,6 (ataque efectivo)
Potencia : Es la potencia base del movimiento utilizado por el atacante.
Acierto : Es un multiplicador aleatorio que representa el grado de acierto del ataque , es decir
la puntería, es un número aleatorio entre 0.85 y 1

Fuente:
https://www.jugonestop.com/pregunta/4383/como-funcionan-las-estadisticas-de-ataque-y-defen
sa-en-pokemon-go

También podría gustarte