Algoritmo para uma ferramenta para estatísticas teóricas baseadas em um jogo (league of legends)

10

Eu gostaria de criar um simulador (basicamente para fins de teste) para um jogo (League of Legends).

O básico do jogo:

você tem um herói com algumas estatísticas:

  • Ponto de Saúde
  • Dano de ataque
  • Velocidade de ataque
  • armaduras
  • Penetração de armadura
  • Velocidade de movimento

O herói pode ter 4 habilidades (você recebe um ponto de habilidade em cada nível) (elas são ativadas manualmente, na maioria das vezes, têm tempo de recarga, dano, taxa de poder de ataque / escala de dano de ataque e nível de habilidade) + uma habilidade passiva

Você pode matar heróis inimigos ou monstros neutros, eles têm as mesmas estatísticas:

  • Ponto de Saúde
  • Dano de ataque
  • Velocidade de ataque
  • armaduras

O que eu gostaria de fazer:

Crie uma ferramenta para testar se um item em particular ou um aumento de estatística específico aceleraria seu poder / velocidade de extermínio.

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

Exemplos de estatísticas:

  • Hp: 420
  • Anúncio: 55
  • Velocidade de ataque: 0,613 (ataques / s -> todo ataque a 1 / 0,613 s)
  • penetração de armadura: 25

O personagem atacará automaticamente o inimigo com a velocidade 1 / ataques e danificará com o dano de ataque (existe uma fórmula para calcular o dano, mas isso não é importante nesta fase, eu acho), uma vez que eles estejam mortos, passando para o próximo com velocidade de movimento ( você pode ver os acampamentos no mapa, os crânios amarelos)

Eu estava pensando sobre o algoritmo:

  1. Eu pensei que se eu fizer um for de i = 0 a i = 30000 (contando ms), para que eu possa verificar o hp inimigo e o meu hp também em todos os ms que foram tão ruins (muito cpu pesado, e eu gostaria para colocar algo aleatório nele, então eu devo ser capaz de resumir a iteração 1k, o que é impossível)

  2. Em segundo lugar, pensei que eu deveria fazer um for de i = 1 a 30 e verificar a cada segundo, e verificar o que aconteceu no último segundo, mas alguns dos monstros neutros estão em um grande acampamento (até 4 monstros), e Dessa forma, o código estava ficando complicado e complicado.

  3. Vou criar tópicos para cada jogador / monstro e, uma vez que eles terminem, olhem para cima quando morrerem e reduzam o HP do jogador.

Minha pergunta, este é o caminho certo a seguir?

TLDR: Eu gostaria de criar uma ferramenta para criar análises (iterar 1k e calcular a média) sobre um jogo cujo aumento de estatísticas tornaria o personagem matando monstros neutros mais rápidos.

Eu preferiria java, mas atm estou preso no algoritmo.


@Karoly S: Sim, é ruim, .com -> .eu

Eu tenho trabalhado nisso:

Estou verificando o tempo restante em cada objeto (habilidade do jogador, ataque automático, buffs) e sempre escolho o menor tempo, armazene o last_time e adiciono o tempo, na próxima rodada, calculo o tempo por (time- última vez)

Se o objeto tiver tempo restante 0, ele fará o que for necessário.

Não sei se é eficaz ou não, mas é o melhor que posso fazer.

Tetrad
fonte
1
Você pode ter mais sorte perguntando na seção Desenvolvimento de Jogos / site do Stack Exchange, tente obter um Mod para movê-lo, embora as chances sejam de que seja assim. Um simulador de jungling seria bem interessante, vou pensar um pouco e ver o que eu proponho.
309 Karoly S
Obrigado pela resposta rápida, sua ajuda é muito apreciada. Meu palpite é certo de que você também é húngaro?
Absolutamente, isso é algo em que pensei, embora não tão profundamente, mas estaria interessado. Minha abordagem inicial seria verificar se é possível uma versão mais simples e eficaz do seu número 2. Gostaria muito de discutir isso com você em maiores detalhes. E sim, seu palpite seria correto :) #
Karoly S
Parece legal para mim, vou deixar o tópico em aberto, talvez alguém já tenha uma idéia sobre isso. meu e-mail (etheld em gwelican dot com)
Parece bom, vou pensar um pouco e enviar um e-mail um pouco mais tarde hoje.
Karoly S

Respostas:

1

Alternativas à simulação quadro a quadro:

Você pode obter uma aproximação razoável para simulação por uma fórmula como

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

Você também pode manter uma fila de movimentação, para simular por movimentação, não por tick:

// 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
...
Jimmy
fonte
A fila de movimentação será mais precisa, pois lida corretamente com o fato de que o dano é discreto, não contínuo. Por exemplo, se eu causar 50 de dano em 0 segundos e outros 50 em 1 segundo, meu DPS seria 50, mas eu mataria um alvo de 100 HP em 1 segundo.
@hammar: isso é verdade. quanto mais curta a luta, menos precisa será uma estimativa baseada em DPS.
Jimmy
O fato de o jogo ter atordoamentos e outros debuffs tornaria essa ferramenta realmente difícil de alcançar, porque jogadores diferentes poderiam ter resultados diferentes em sua taxa de abandono. Enfim, boa resposta.
Grimshaw