Cookies policy: We use our own and third-party cookies to improve your navigation experience. By browsing this site, we assume you consent to us using them. More information here.
Accept

javacup en detalle. Parte II

Vamos a entrar en el detalle de como funciona javacup para comprender mejor los cambios que queremos introducir en una nueva versión
0
0
3 visits

El framework

El framework se compone de varios paquetes, siendo org.javahispano.javacup.model el más importante. Esta es una lista de las clases principales ubicadas en dicho paquete:

  • Tactic: La interfaz que deberás implementar.
  • TacticDetail: La interfaz que genera el asistente.
  • Command: Clase abstracta, que representa un comando que puede ejecutar un jugador.
  • CommandMoveTo: Extiende de Command e indica a un jugador hacia dónde dirigirse.
  • ComandoHitBall: Extiende de Command e indica a un jugador como rematar.
  • GameSituationsions: Retorna datos del estado del juego durante la ejecución de un partido.
  • Partido: Clase que ejecuta los partidos.
  • Position: Coordenadas espaciales horizontales(x,y) con tipo primitivo double.
  • Constants: Clase donde están las constantes.

public List<Command> execute(GameSituations sp);

En la implementación del método execute de la interfaz Tactic, es donde se programa la lógica que modelará el comportamiento de tu equipo.

El método ejecutar recibe como parámetro un objeto GameSituations. Este objeto contiene la información del estado en que se encuentra el partido, y esta es la información que nos provee:

  • double ballAltitude() Retorna la altura del balón. Position ballPosition() Retorna la posición x,y del balón.
  • PlayerDetail[] rivalPlayersDetail() Retorna la configuración (nombre, número, velocidad, remate y precisión) de los jugadores rivales.
  • PlayerDetail[] myPlayersDetail() Retorna la configuración (nombre, número, velocidad, remate y precisión) de mis jugadores.
  • int myGoals() Retorna la cantidad de goles convertidos por mi equipo. int rivalGoals() Retorna la cantidad de goles convertidos por el rival.
  • int iteration() Retorna el número de iteraciones cursadas en el partido.
  • int[] iterationsToKick() Indica cuantas iteraciones deben pasar para que mis jugadores  puedan volver a rematar.
  • int[] rivalIterationsToKick() Indica cuantas iteraciones deben pasar para que los jugadores rivales puedan volver a rematar.
  • Position[] myPlayers() Array de posiciones de mis jugadores.
  • Position[] rivalPlayers() Array de posiciones de rivales.
  • int[] canKick() Array de índices de jugadores míos que están en condición de rematar.
  • int[] rivalCanKick() Array de índices de jugadores rivales que están en condición de rematar.
  • boolean isRivalStarts() Retorna true si el rival realizara un saque, hasta que el rival no saque, mis jugadores se apartan de la posición de saque y no corre el tiempo.
  • boolean isStarts() Retorna true si tengo que realizar un saque, hasta que yo no saque, el rival se aparta de la posición de saque y no corre el tiempo.
  • double[] getTrajectory(int iteration) Retorna un array con las coordenadas x,y,z de la posición del balón en la iteración indicada.
  • int[] getRecoveryBall() Retorna un array donde el primer elemento es la iteración donde se puede recuperar el balón, los siguientes números corresponden a los índices de los jugadores que pueden recuperar el balón en dicha iteración, ordenados desde el más cercano al más lejano del punto de recuperación (Este método no considera el caso que los jugadores pueden obstruirse el paso ni tampoco se cuenta el factor sprint).
  • double distanceIter(int playerIndex, int iter, boolean isSprint) Retorna la distancia que recorrerá el jugador en la iteracción que se le pasa como parámetro. Devuelve la distancia recorrida en dicha iteracción, no la suma de todas las anteriores.
  • double distanceTotal(int playerIndex, int iter) Devuelve la distancia total recorrida por un jugador en las iteracciones que se le pasa como parámetro sin tener en cuenta el factor sprint.
  • boolean[] getOffSidePlayers() Retorna un array indicando verdadero o falso si el jugador del índice correspondiente está en fuera de juego.

Y finalmente los metodos getMyPlayerSpeed(int idx), getMyPlayerPower(int idx), getMyPlayerError(int idx), getRivalPlayerSpeed(int idx), getRivalPlayerPower(int idx) y getRivalPlayerError(int idx) que retornan las aptitudes de mis jugadores y de los jugadores rivales.

Todos estos métodos nos entregan información útil para tomar decisiones, y así poder indicar qué acciones deberán realizar los jugadores. Estas acciones serán la lista de comandos que retornara el método execute. Sólo se tienen dos comandos disponibles; CommandMoveTo y CommandHitBall.

Algunos Ejemplos de uso:

new CommandMoveTo(0,new Position(0,0)); /*Se le indica al jugador de índice 0 que debe dirigirse a la posición de coordenadas 0,0. Los índices de los jugadores van de 0 hasta 10. La posición 0,0 corresponde al centro del campo de juego.*/

new CommandMoveTo(0,new Position(0,0), true); /*Se le indica al jugador de índice 0 que debe dirigirse a la posición de coordenadas 0,0 realizando un sprint. Los índices de los jugadores van de 0 hasta 10. La posición 0,0 corresponde al centro del campo de juego.*/

new CommandHitBall(6, new Position(60,30), 1, true); /*Se le indica al jugador de índice 6 que remate con dirección destino a las coordenadas (60;30), con fuerza 1, y que el remate sea por alto. La fuerza que corresponde al tercer parámetro y acepta valores double entre 0 y 1, cuando sea 1 el remate se realizara a la velocidad máxima que puede rematar el jugador de índice 6. El ultimo parámetro al ser true indica que el remate se realizara por alto. (El remate por alto se realiza con un ángulo vertical igual a Constants.ANGULO_VERTICAL */

new CommandHitBall(6, 15, 1, true); /* Otra forma de indicar el destino del remate es especificar directamente cual es ángulo de remate, en este caso es 15° */

new CommandHitBall(6, 15, 1, 25); /* Otra forma es indicar explícitamente el ángulo vertical, 25 grados en este caso. El ángulo vertical puede estar entre 0 y Constantes.ANGULO_VERTICAL_MAX. */

new CommandHitBall(6); /* Este constructor se usa para simular la acción de avanzar con el balón.*/

Technology and scienceGamesJavaprogramaciónjavacupjuegos
12 Oct, 2016
Ratings
(0 votes)
Your rating
Collected
Sito
Sito