Algorithme pour un outil de statistiques théoriques basé sur un jeu (League of Legends)

10

Je voudrais créer un simulateur (essentiellement à des fins de test) pour un jeu (League of legends).

Les bases du jeu:

vous avez un héros qui a des statistiques:

  • Point de santé
  • Dégâts d'attaque
  • Vitesse d'attaque
  • Armure
  • Pénétration d'armure
  • Vitesse de mouvement

Le héros peut avoir 4 compétences (vous obtenez un point de compétence à chaque niveau) (elles sont activées manuellement, la plupart du temps, ont un temps de recharge, des dégâts, un rapport d'échelle de puissance d'attaque / dégâts d'attaque et un niveau de compétence) + une compétence passive

Vous pouvez tuer des héros ennemis ou des monstres neutres, ils ont les mêmes statistiques:

  • Point de santé
  • Dégâts d'attaque
  • Vitesse d'attaque
  • Armure

Ce que j'aimerais faire:

Créez un outil pour tester si un objet particulier ou une augmentation de statistiques particulière accélérerait votre puissance / vitesse de destruction.

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

Exemples de statistiques:

  • Hp: 420
  • Annonce: 55
  • AttackSpeed: 0,613 (attaques / s -> chaque attaque à 1 / 0,613 s)
  • pénétration d'armure: 25

Le personnage va attaquer automatiquement l'ennemi avec la vitesse d'attaque 1 et endommager avec les dégâts d'attaque (il existe une formule pour calculer les dégâts, mais ce n'est pas important dans cette phase, je suppose), une fois qu'ils sont morts, passer à la suivante avec une vitesse de déplacement ( vous pouvez voir les camps sur la carte, les crânes jaunes)

Je pensais à l'algorithme:

  1. Je pensais que si je fais juste un for de i = 0 à i = 30000 (en comptant ms), je peux donc vérifier le hp ennemi et mon hp aussi à chaque ms s'est avéré si mauvais (assez de CPU lourd, et je voudrais pour y mettre un peu de hasard, donc je devrais pouvoir résumer 1k itération, ce qui est impossible)

  2. Deuxièmement, je pensais que je devrais juste faire un pour de i = 1 à 30, et vérifier chaque seconde, et vérifier ce qui s'est passé dans la dernière seconde, mais certains des monstres neutres sont dans un grand camp (jusqu'à 4 monstres), et de cette façon, le code devenait compliqué et compliqué.

  3. Je vais créer des threads pour chaque joueur / monstre, et une fois qu'ils auront fini de chercher quand ils seront morts, et de réduire les HP du joueur.

Ma question, est-ce la bonne voie à suivre?

TLDR: Je voudrais créer un outil pour créer une analyse (itérer 1k et calculer la moyenne) sur un jeu dont l'augmentation des statistiques ferait que le personnage tue des monstres neutres plus rapides.

Je préférerais java, mais atm, je suis bloqué sur l'algorithme.


@Karoly S: Oui, c'est mon mauvais, .com -> .eu

J'y ai travaillé:

Je vérifie le temps restant sur chaque objet (compétence du joueur, attaque automatique, buffs), et je choisis toujours le temps le plus court, et stocke le last_time, et ajoute le temps au temps, au prochain tour, je calcule le temps par (time- dernière fois)

Si l'objet a le temps restant 0, il fera tout ce qu'il doit faire.

Je ne sais pas si c'est efficace ou pas, mais c'est le mieux que je puisse faire.

Tetrad
la source
1
Vous aurez peut-être plus de chance de demander sur la section / site de développement de jeux de Stack Exchange, essayez d'obtenir un Mod pour le déplacer, bien qu'il y ait des chances qu'ils le soient de toute façon. Un simulateur de jonglage serait assez intéressant, je vais y réfléchir et voir ce que je propose.
Karoly S
Merci pour la réponse rapide, votre aide est très appréciée. Je suppose que vous êtes hongrois aussi?
Absolument, c'est une chose à laquelle j'ai pensé mais pas à peu près en profondeur, mais je serais intéressé. Mon approche initiale serait de voir si une version efficace mais plus simple de votre # 2 est possible. J'adorerais en discuter plus longuement avec vous. Et oui, votre supposition serait correcte :)
Karoly S
Cela me semble cool, je vais laisser le sujet ouvert, peut-être que quelqu'un a déjà une idée à ce sujet. mon email (etheld at gwelican dot com)
Ça sonne bien, j'y réfléchirai et je vous enverrai un e-mail un peu plus tard dans la journée.
Karoly S

Réponses:

1

Alternatives à la simulation image par image:

Vous pouvez obtenir une sorte d'approximation raisonnable pour la simulation par une formule telle que

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

Vous pouvez également gérer une file d'attente de mouvements, afin de simuler par mouvement, et non par 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
la source
La file d'attente de déplacement sera plus précise, car elle traite correctement le fait que les dommages sont discrets et non continus. Par exemple, si je fais 50 dégâts à 0 seconde et 50 autres à 1 seconde, mon DPS serait de 50, mais je tuerais une cible de 100 HP en 1 seconde.
@hammar: c'est vrai. plus le combat est court, moins une estimation basée sur DPS sera précise.
Jimmy
Le fait que le jeu ait des étourdissements et d'autres affaiblissements rendrait un tel outil très difficile à réaliser, car différents joueurs pourraient avoir des résultats différents dans leur taux de destruction. Quoi qu'il en soit, bonne réponse.
Grimshaw