Buscar
Social
Ofertas laborales ES

Foro de la JavaCup > Energía y precisión

En el método executeCommands se modificó en el nuevo framework la forma de calcular el error al golpear el balón para que este dependa de la enegía. La idea es como dice el comentario del fragmento de código que "a más energía menos error".

//Obtiene el error de remate del jugador incrementado por el cansancio del jugador. A mas energia menos error.
error = j.getPrecision() / (((ce.eq == EQUIPO_LOCAL) ? spLocal.getMyPlayerEnergy(cgp.getPlayerIndex()) : spLocal.getRivalEnergy(cgp.getPlayerIndex())));

Pero es que como la energía es menor o igual que 1 entonces se obtiene el efecto contrario, es decir "a más energía mas error". Creo que el cambio debe ser multiplicar por la energía la precisión en lugar de dividir:

error = j.getPrecision() * (((ce.eq == EQUIPO_LOCAL) ? spLocal.getMyPlayerEnergy(cgp.getPlayerIndex()) : spLocal.getRivalEnergy(cgp.getPlayerIndex())));

Saludos.

septiembre 5, 2013 | Unregistered Commenterosorio

Gracias Osorio, tomo nota para incorporarlo a los cambios ya propuestos. Gracias.

septiembre 6, 2013 | Unregistered CommenterVictor

Creo que estoy en desacuerdo con el ajuste, dado que esa variable como tal no determina el error. Esta variable en realidad se usa como factor para determinar el error (mas adelante en el código se observa), lo cual implica que si este valor es muy grande, lo que se logra finalmente es que el error sea menor.

Espero haberme hecho entender. Resumiendo, como estaba inicialmente, está OK
error = j.getPrecision() / (((ce.eq == EQUIPO_LOCAL) ? spLocal.getMyPlayerEnergy(cgp.getPlayerIndex()) : spLocal.getRivalEnergy(cgp.getPlayerIndex())));

Mi sugerencia sería cambiar el nombre de la variable por: "factorError"

septiembre 12, 2013 | Unregistered CommenterRomedal

Hola Romedal, creo que tu razonamiento no es correcto. Intentaré explicarlo con un ejemplo. Supongamos que un jugador con precisión 1.0 intenta golpear el balón y que su energía es 0.95. Primero se calcularía la precisión real :

error = j.getPrecision() * (((ce.eq == EQUIPO_LOCAL) ? spLocal.getMyPlayerEnergy(cgp.getPlayerIndex()) : spLocal.getRivalEnergy(cgp.getPlayerIndex())));

Aun que el nombre de la variable es error realmente lo que se calcula es la precisión real para el golpeo, y esta sería 1.0*0.95 = 0.95. Luego con esta precisión se calcula el error máximo al golpear el balón:

error = Constants.getErrorAngular(error);//obtiene el error angular

que es equivalente a 0.3 - 0.2*error, por lo que tendríamos que el error angular sería 0.3- 0.2*0.95 = 0.11 que sería un ángulo de 19.8º.

Recordemos que la precisión siempre debe ser un valor entre 0 y 1 para que así el error siempre sea un valor entre 0.3 y 0.1 lo que se traduce en un ángulo de error entre 54º y 19º.

Siguiendo con el ejemplo, como estaba antes la precisión real sería 1.0/0.95 = 1.05263 lo que ya de por si es un error por que le daría un precisión por encima de 1.0. Luego a calcular el error tendríamos 0.3- 0.2*1.05263 = 0.0894 equivalente a 16.09º, lo cual es un ángulo menor al que se obtendría con máxima energía que sería 19º. Con la fórmula antigua a menos energía más precisión y menos error. Con la actual a menos energía menos precisión y más error.

Saludos.

septiembre 13, 2013 | Unregistered Commenterosorio