Buscar
Social
Ofertas laborales ES

Foro de la JavaCup > Ya estan disponibles las modificacones del framework

Hola a todos, me ha comunicado Fabián que ya están disponibles las modificaciones para la descarga en http://code.google.com/p/javacup-javahispano/downloads/list.

Así que espero con ansia vuestras ideas y opiniones.

El punto más importante creo que es, qué valor darle a la constante de energía del jugador. Personalmente creo que sería más realista si un jugador agota toda su energía tras recorrer una distancia equivalente al largo del campo. Pero bueno es una percepción personal, probad vosotros con los valores y ya decidimos que valor asignar.

Tal como indiqué en otro post estas son las constantes a modificar. Están situadas en la clase Constants.

/**Tasa de incremento y decremento de la energia de un jugador**/
public static final double ENERGIA_DIFF = 0.00001;

/**Nivel minimo al que puede bajar la energia de un jugador**/
public static final double ENERGIA_MIN = 0.55;

/**Aceleración minima de un jugador al hacer un cambio de direccion en el eje Y**/
public static final double ACELERACION_MINIMA_Y = 0.70;

/**Aceleración minima de un jugador al hacer un cambio de direccion en el eje X**/
public static final double ACELERACION_MINIMA_X = 0.9;

/**Incremento de la aceleracion en cada iteraccion si no se cambia de direccion**/
public static final double ACELERACION_INCR = 0.04;

/**Incremento de la velocidad en sprint**/
public static final double SPRINT_ACEL = 1.2;

/**Energia minima para poder ir en sprint**/
public static final double SPRINT_ENERGIA_MIN = 0.8;

/**Energia extra consumida por ir en sprint**/
public static final double SPRINT_ENERGIA_EXTRA = 0.002;

Os recomiendo que bajeis algunos ceros más la ENERGIA_DIFF para que el cansancio no afecte a los jugadores y así podáis jugar con la Aceleración.

Una vez que estéis conforme con los valores de aceleración probad con la energía. Tenéis que recordar que para que vuestros jugadores recuperen energía no deben ejecutar ningún comando en la iteracción.

Y finalmente probad el sprint. Para ejecutar el sprint he creado un nuevo constructor para el CommanMoveTo al que se le añade como tercer argumento un boolean sprint. True significa que el jugador ejecutará el sprint en esa iteracción con lo que consumira más energía y aumentará su velocidad.

Para aquellos que deseen investigar un poco más las nuevas modificaciones os indico más o menos lo que se ha añadido y donde buscarlo.

- La energía de cada jugador al igual que la aceleración, se almacenan en arrays en la clase partido al igual que se hace con las posiciones de los jugadores. Y posteriormente se actualizan los objetos GameSituations con el estado actual del juego.

- La energía se resta en el método executeCommands, allí mismo vemos que jugadores no han ejecutado ningún comando y le subimos la energia. Para ello he creado dos metodos reduceEnergia() e incrementaEnergía() que se le pasan como parametros el jugador y el array energia al que pertenece Local o Visita.

- La aceleración la modifico al ejecutar los comandos IrA. He creado una nueva clase Aceleracion.java que se encarga de todos los calculos.

- La distancia mínima en los saques, lo he implementado creando un estado nuevo el 8 que llama a la funcion iteraDistanciaMinima(). Esta función utiliza otras dos funciones, ComprobarDistanciaSaque() y corregirDistanciaSaque(). Hay un array tipo boolean donde se almacena el resultado de la funcion comprobarDistanciaSaque.

- El fuera de juego lo he implementado utilizando un array tipo boolean offSidePlayers, que indica que jugadores se hayan en fuera de juego. Una nueva variable que indica el ultimo jugador que tocó el balon lastPlayerKickIndex (para controlar que si es el propio jugador el que toca el balon estando más adelantado que la defensa, no es fuera de juego). He creado diferentes constantes para los diferentes tipos de saque SAQUE_BANDA, SAQUE_FONDO, SAQUE_LIBRE_INDIRECTO y NO_ES_SAQUE.

- El saque libre indirecto se produce en dos ocasiones, cuando un jugador toca dos veces el balon en un saque o cuando es fuera de juego. Para diferenciar cuando es fuera de juego hay una variable isOffSide que se activa. De este modo diferenciamos ambas situaciones.

- También he creado una variable estadoSaque con diferentes constantes SAQUE_EJECUTANDOSE, SAQUE_EN_RECEPCION y SAQUE_EJECUTADO. Esto se ha hecho para evitar por ejemplo los goles directos en los saques de libres indirectos o de banda. Saque_ejecutandose es cuando todavía no se ha sacado. Saque en recepción cuando se ha sacado y el balón debe ser recepcionado por otro jugador y saque_ejecutado cuando el jugador receptor ha golpeado el balón. De este modo si entra el balón en porteria estando el saque_en_recepción entonces no es válido.

Saludos y a disfrutarlo.

abril 1, 2012 | Unregistered CommenterVictor

Hola Victor, apenas he ejecutado un par de partidos para probar, de momento tengo que hacer algunos arreglos en mi táctica para probar mejor los cambios, sobre todo en los saques de puerta que siempre me pitan libre indirecto.

La primera impresión que tengo es que es un poco lento. Mirando los valores de los parámetros veo que la energía mínima es 0.55 y quizás este valor es muy bajo, por lo que significa. Por ejemplo, un jugador con esa energía es casi dos veces más lento que con el máximo de energía, lo mismo sucede con la potencia de disparo. Esto significa que un jugador se manda una carrera de 50 metros para llegar al área y luego solo puede disparar al 55% de su potencia (considerando que esté al mínimo). Creo que este valor debería ser mayor, quizás 0.75. Insisto que es solo una primera consideración, hay que probar mucho más...

Por otro lado tengo una duda. Veo que se actualiza el valor de energía de los jugadores antes de ejecutar los comandos en cada iteración, luego los comandos se ejecutan considerando este nuevo valor. Esto significa que la información de energía que cada táctica obtiene de la clase GameSituations no es la energía con la que se ejecutarán los comandos de esa iteración, sino con la que se ejecutaron los comandos de la iteración anterior, es así? Y de ser así, no es mejor actualizar los valores de energía una vez ejecutados todos los comandos y así esos serían los valores de energía para la próxima iteración?

Saludos.

abril 3, 2012 | Unregistered Commenterosorio

Hola, Osorio, tienes razón en lo de la actualización de la energía, lo modificaré para que se actualice una vez ejecutados los comandos de modo que las tácticas tengan la información correcta.

En cuanto a la lentitud del juego, creo que cuando se realicen pruebas con tácticas que tengan en cuenta el cansancio de los jugadores los partidos no serán tan lentos. Para las pruebas de tu táctica puedes hecharla a competir con la mía (tukutuku), ya que hice una pequeña modificación para adaptarse a los nuevos cambios, no es gran cosa, pero al menos puede servir para probar.

En relación a la potencia de disparo se podría modificar para que el cansancio no la influenciara tanto. Pues es cierto que si los delanteros no están descansados los porteros son casi imbatibles. Añadire otra constante que determine dicha influencia y así poder hacer pruebas con diferentes valores.

Gracias por tu aportación, cuando hayas realizado más pruebas podrías proponer tu configuración de constantes para así poder ir comparándolas con las que vayan llegando.

Saludos.

abril 3, 2012 | Unregistered CommenterVictor

He subido a la página de descargas indicada en el primer post una nueva versión del proyecto eclipse con las modificaciones. En esta nueva versión he corregido la actualización de la energía tal como comentaba osorio y he añadido una nueva constante para controlar la influencia de la energía en la potencia de disparo.

Saludos

abril 9, 2012 | Unregistered CommenterVictor

Probé unos cuantos partidos con la última versión subida y me parecieron bastante fluidos los partidos. De momento, ninguno se me quedó parado.
Lo de implementar el fuera de juego es genial!
Felicitaciones por los cambios!
Seguiremos probando.

abril 10, 2012 | Unregistered CommenterSito

Hola, acabo de ver el nuevo Framework y tengo que decir que los fueras de juego es una muy buena implementación, pero tengo una queja al respecto, hecho de menos la barra temporal de la derecha, para poder cambiar el minuto de partido.

¿Podrías volver a ponerla en futuras actualizaciones?

Salu2

julio 17, 2012 | Unregistered CommenterAnonymus

Hola, Anonymus, en la nueva versión al menos en los cambios que he realizado no he modificado nada respecto a la interfaz gráfica. Comprueba que en el menu Configuración tienes activada la opción de "ejecutar los partidos antes de visualizar". Si está desactivada significa que tu ordenador está ejecutando el partido sobre la marcha y por ello no aparece la barra para avanzar. Esperó haberte ayudado.

julio 18, 2012 | Unregistered CommenterVictor

Vale, la opción estaba desactivada. Pero ahora el problema es que al darle al botón Ver Partido el partido no aparece, no termina de ejecutarse esa ventana, en la consola del eclipse no me sale nada, por lo que no hay errores aparentes.
¿Por qué se puede estar produciendo este error?

Salu2

julio 18, 2012 | Unregistered CommenterAnonymus

Según la complejidad de las tacticas puede demorarse hasta unos 30 segundos en aparecer la ventana de reproduccion del partido. Si aún así no aparece prueba a seleccionar el visor básico en lugar del opengl. Pero en teoria si lo has podido reproducir sin problemas antes de marcar la opción que te dije, no deberias de tener ningún problema ahora.

Saludos

julio 18, 2012 | Unregistered CommenterVictor

Ya me va perfecto, pero tengo algunas dudas más, no sobre el framework, sino un poco en general y me gustaría que me ayudaras con ellas, ya que veo que eres el user más activo en esta época del foro.
¿Me ayudarias?
En caso de ser positivo, prefieres por privado o por medio del foro (en un nuevo post).

Saludos y gracias de antemano.

julio 19, 2012 | Unregistered CommenterAnonymus

Lo mejor es que las dudas las sigas planteando en el foro, de este modo quedarán resueltas también para otros que se inicien en la javacup y se encuentren con las mismas dificultades.

Intentaré contestar lo antes posible a todas las cuestiones y dentro de mi conocimiento, pues cuando participé el año pasado en la javacup también me encontré con varios problemillas que no logré resolver y al final envié la táctica sin afinar del todo.

A mí me sirvió mucho mirar los foros de las ediciones anteriores, los tienes en la página http://javacup.javahispano.org/foro.jsp y también las tácticas de la edición anterior.

En mi caso, cogí algo de código de algunas tácticas, pero lo importante es que lo adaptes a la tuya propia y a la forma de jugar que deseas que tenga tu equipo. Lo importante es pasar un buen rato, y no hacer una copia de la táctica vencedora del año pasado.

De todos modos con los cambios incluidos en esta versión, las tácticas del año pasado no son válidas pues no tienen en cuenta el fuera de juego, o que un jugador no puede sacarse él mismo desde un saque de banda, etc.

Quisiera recalcar que lo más importante para las tácticas de este año, aparte de tener en cuenta el fuera de juego y etc, es controlar la energía de los jugadores, ya que todavía no se ha decidido con que factor de cansancio se jugará el torneo, así que tenlo en cuenta. Supongo que cuando se apróxime la fecha los organizadores estableceran las constantes a las que hago referencia en este mismo post.

Saludos

julio 19, 2012 | Unregistered CommenterVictor

Hola Victor,

Recién descargué el nuevo Framework he hice un par de ajustes sencillos para poder hacer pruebas.

Sin embargo, he notado que en ciertas ocasiones, cuando debo hacer un saque (sp.isStarts()), el Framework no me activa ningún jugador para golpear el balón (sp.canKick().length=0) y por ende el juego entra en un bucle infinito. Revisando las variables, noté que aunque mi equipo es quien puede sacar, el rival es quien cuenta con jugadores disponibles para golpear el balón.

Por otro lado, quisiera saber un par de cosas:
En los saques de banda se aplica también el fuera de lugar (Ya que no debería ser así, según las reglas del fútbol)?.
El portero ve afectada su energía por estar siempre en movimiento (En aras de evitar goles lejanos)?

De momento no es más,

Romedal

agosto 11, 2013 | Unregistered CommenterRomedal

Hola, Romedal, gracias por la información. Repasaré el código pues después de más de un año, tengo algo olvidado los cambios.

Intentaré reproducir el error que me indicas, para ver donde puede estar el error.

En cuanto al fuera de juego, tienes razón, he mirado por encima el código y creo que no se tiene en cuenta si se hace desde un saque de banda, puerta o esquina, lo comprobaré y si es cierto realizaré los cambios pertinentes.

Lo que sí se tiene en cuenta es que si el jugador se halla en su campo entonces no se pita fuera de juego, o si el jugador se hace un autopase para superar al defensa.

En relación al tema de la energía, lo añadí simplemente copiando al juego PC Futbol y para que la JavaCup sea algo más realista. No es normal que un jugador se recorra todo el campo y llegue a portería con energia suficiente para chutar o regatear al portero.

Asimismo, al añadir este factor y el fuera de juego, creo que la JavaCup ganará en calidad de juego, y podremos disfrutar de partidos más atractivos.

Gracias, seguimos en contacto.

agosto 12, 2013 | Unregistered CommenterVictor

Ah, Romedal, se me olvidaba comentarte que el portero no tiene que estar necesariamente en movimiento constante, si el balón está en el campo contrario podemos dejar descansar al portero y a los defensas, y conforme se aproxime el equipo contrario ir recolocándolos. Igualmente los delanteros no tienen porque bajar hasta la defensa, sino quedarse en el medio campo descansando hasta que se recupere el balón.

Como ya he dicho antes, el añadir el factor de la energía va a obligarnos a crear tácticas algo más elaboradas.

Saludos.

agosto 12, 2013 | Unregistered CommenterVictor

Romedal, no consigo reproducir el error que me indicas. He probado con varias tácticas diferentes y ninguna da problema con los saques de banda.

agosto 12, 2013 | Unregistered CommenterVictor

Hola, revisando el código he comprobado que para el fuera de juego sí se tiene en cuenta si es un saque de banda o de puerta. Lo podeís comprobar al final del método calculateOffSidePlayers de la clase Partido.java.

Creo que deberíamos continuar por donde lo dejamos anteriormente: establecer los valores de las constantes que afectan a la energía. Por lo que os agradecería que fueráis adaptando las tácticas y indicáseis vuestras propuestas.

Saludos.

agosto 13, 2013 | Unregistered CommenterVictor