lunes, 12 de mayo de 2008

TRUCOS JAVACUP 2008

Bueno, referente a la táctica del concurso JavaCup 2008, voy a explicar algún truquillo que puede ser interesante.

El framework de Javacup, por cada movimiento de balón itera cada una de las tácticas que están en juego, por lo que sería lógico, dentro de cada táctica, iterar todos y cada uno de los 11 jugadores con sus comandos (movimientos, pases o tiros a puerta) correspondientes.

Otro y si cabe, más interesante, sería anticiparse a las acciones del contrario, calculando previamente la posición futura del balón. Esto se haría más o menos:


distanciaRecorridaBalonEjeX = bola.getX() - posicionBalonAnterior.getX();
distanciaRecorridaBalonEjeY = bola.getY() - posicionBalonAnterior.getY();

posicionBalonSiguiente.setLocation(bola.getX() + distanciaRecorridaBalonEjeX, bola.getY() + distanciaRecorridaBalonEjeY);

bola = posicionBalonSiguiente;

Con el nuevo objeto bola y sus nuevas coordenadas ya podemos seguir con nuestra táctica; movimientos de los jugadores, siempre respecto a la nueva posición de la bola.
Una vez se haya acabado nuestra táctica en el enésimo movimiento del balón según el framework, hay que actualizar la posición del balón anterior con la posición de la bola utilizada de la siguiente manera:

this.posicionBalonAnterior.setLocation(sj.getBola());

Para rematar la faena, nos interesa cubrir al contrario o mejor dicho, anteponernos entre el balón y el contrario.
Para ello podemos utilizar el siguiente código:


//nCon en el índice del vector contrarios, es decir, el contrario a cubrir

double x = sj.getBola().getX() - sj.getContrario()[nCon].getX();
double y = sj.getBola().getY() - sj.getContrario()[nCon].getY();

//Distancia del contrario a la bola
double n = Math.sqrt(Math.pow(x,2) + Math.pow(y,2));

//Posiciona al jugador en un punto intermedio de la recta que une el contrario y la bola
double nx = sj.getContrario()[nCon].getX() + (x/n)*20;

double ny = sj.getContrario()[nCon].getY() + (y/n)*20;

No hay comentarios: