Algoritmo para una herramienta para elaborar estadísticas basadas en un juego (league of legends)

10

Me gustaría crear un simulador (básicamente con fines de prueba) para un juego (League of legends).

Los fundamentos del juego:

tienes un héroe que tiene algunas estadísticas:

  • Punto de Salud
  • Daño de ataque
  • Velocidad de ataque
  • Armadura
  • Penetración de armadura
  • Velocidad de movimiento

El héroe puede tener 4 habilidades (obtienes un punto de habilidad en cada nivel) (se activan manualmente, la mayoría de las veces, tiene enfriamiento, daño, relación de escala de potencia de ataque / daño de ataque y nivel de habilidad) + una habilidad pasiva

Puedes matar héroes enemigos o monstruos neutrales, tienen las mismas estadísticas:

  • Punto de Salud
  • Daño de ataque
  • Velocidad de ataque
  • Armadura

Lo que me gustaría hacer:

Crea una herramienta para probar si un elemento en particular o un aumento de estadísticas en particular aceleraría tu poder / velocidad de matar.

mapa: http://evtron.com/Evtron-Alpha/wp-content/uploads/2011/02/Summoners-Rift.jpg

Ejemplos de estadísticas:

  • Hp: 420
  • Anuncio: 55
  • AttackSpeed: 0.613 (ataques / s -> cada ataque a 1 / 0.613 s)
  • penetración de armadura: 25

El personaje atacará automáticamente al enemigo con la velocidad 1 / ataque y lo dañará con daño de ataque (hay una fórmula para calcular el daño, pero eso no es importante en esta fase, supongo), una vez que estén muertos, pasarán a la siguiente con velocidad de movimiento ( puedes ver los campamentos en el mapa, las calaveras amarillas)

Estaba pensando en el algoritmo:

  1. Pensé que si solo hago un for de i = 0 a i = 30000 (contando ms), entonces podría verificar el HP enemigo y mi HP también en cada ms resultó tan malo (CPU bastante pesada, y me gustaría poner algo al azar en él, por lo que debería poder resumir 1k iteración, lo que es imposible)

  2. En segundo lugar, pensé que debería hacer un for de i = 1 a 30, y verificar cada segundo, y verificar qué sucedió en el último segundo, pero algunos de los monstruos neutrales están en un gran campamento (hasta 4 monstruos), y De esta manera, el código se estaba volviendo cada vez más complicado.

  3. Voy a crear hilos para cada jugador / monstruos, y una vez que terminen de buscar cuando murieron, y reducir el HP del jugador.

Mi pregunta, ¿es este el camino correcto?

TLDR: Me gustaría crear una herramienta para crear análisis (iterar 1k y calcular el promedio) sobre un juego cuyo aumento de estadísticas haría que el personaje matara monstruos neutrales más rápidos.

Preferiría Java, pero atm estoy atrapado en el algoritmo.


@Karoly S: Sí, es 'mi mal, .com -> .eu

He estado trabajando en esto:

Estoy comprobando el tiempo restante en cada objeto (habilidad del jugador, autoataque, mejoras), y siempre elijo el tiempo más corto y almaceno el último tiempo, y agrego el tiempo al tiempo, en la siguiente ronda calculo el tiempo por (tiempo- ultima vez)

Si el objeto tiene tiempo restante 0, hará lo que sea necesario.

No sé si es eficiente o no, pero eso es lo mejor que puedo hacer.

Tétrada
fuente
1
Es posible que tenga más suerte preguntando en la sección / sitio de Desarrollo de juegos de Stack Exchange, intente obtener un Mod para moverlo, aunque es probable que lo hagan de todos modos. Un simulador de junglas sería interesante, lo pensaré un poco y veré qué se me ocurre.
Karoly S
Gracias por la respuesta rápida, su ayuda es muy apreciada. Supongo que también eres húngaro.
Absolutamente, esto es algo en lo que he pensado, aunque no en profundidad, pero me interesaría. Mi enfoque inicial sería ver si es posible una versión efectiva pero más simple de su # 2. Me encantaría discutir esto con usted en mayor medida. Y sí, su suposición sería correcta :)
Karoly S
Suena genial para mí, dejaré el tema abierto, tal vez alguien ya tenga una idea al respecto. mi correo electrónico (etheld en gwelican dot com)
Suena bien, lo pensaré y te enviaré un correo electrónico un poco más tarde hoy.
Karoly S

Respuestas:

1

Alternativas a la simulación cuadro por cuadro:

Puede obtener una aproximación razonable para la simulación mediante una fórmula como

rawDamage = <some function of strength?)
Damage = rawDamage - enemyArmorReduction
DPS = (attackSpeed * Damage) * enemyArmorMod
myRemainingHP = myDPS / theirHP  - theirDPS / myHP

También puede mantener una cola de movimiento, para simular por movimiento, no por tic:

// my aspd = 4 attacks per second, his aspd = 3 attacks per second
0.0s : start battle
0.25s: I attack
0.33s: He attacks
0.50s: I attack again
...
1.00s: I attack
1.00s: He attacks
...
Palanqueta
fuente
La cola de movimiento será más precisa, ya que trata correctamente el hecho de que el daño es discreto, no continuo. Por ejemplo, si hago 50 daños a los 0 segundos y otros 50 a 1 segundo, mi DPS sería 50, pero mataría a un objetivo de 100 HP en 1 segundo.
@hammar: eso es cierto. cuanto más corta sea la pelea, menos precisa será una estimación basada en DPS.
Jimmy
El hecho de que el juego tenga aturdimientos y otras desventajas haría que esta herramienta sea realmente difícil de lograr, porque diferentes jugadores podrían tener diferentes resultados en su tasa de asesinatos. De todos modos buena respuesta.
Grimshaw