Algorithmus für ein Tool zur theoretischen Erstellung von Statistiken basierend auf einem Spiel (Liga der Legenden)

10

Ich möchte einen Simulator (hauptsächlich zu Testzwecken) für ein Spiel (League of Legends) erstellen.

Die Grundlagen des Spiels:

Sie haben einen Helden, der einige Statistiken hat:

  • Gesundheit Punkt
  • Angriffsschaden
  • Angriffsgeschwindigkeit
  • Rüstung
  • Rüstungsdurchdringung
  • Bewegungsgeschwindigkeit

Der Held kann 4 Fertigkeiten haben (Sie erhalten einen Fertigkeitspunkt in jedem Level) (Sie werden meistens manuell aktiviert, haben Abklingzeit, Schaden, Angriffskraft / Angriffsschaden-Skalenverhältnis und Fertigkeitsstufe) + eine passive Fertigkeit

Du kannst feindliche Helden oder neutrale Monster töten, sie haben die gleichen Werte:

  • Gesundheit Punkt
  • Angriffsschaden
  • Angriffsgeschwindigkeit
  • Rüstung

Was ich gerne machen würde:

Erstellen Sie ein Werkzeug, um zu testen, ob ein bestimmter Gegenstand oder eine bestimmte Erhöhung der Statistik Ihre Tötungskraft / -geschwindigkeit beschleunigen würde.

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

Stat Beispiele:

  • PS: 420
  • Anzeige: 55
  • AttackSpeed: 0.613 (Angriffe / s -> jeder Angriff um 1 / 0.613 s)
  • Rüstungsdurchdringung: 25

Der Charakter wird den Feind automatisch mit der 1 / Angriffsgeschwindigkeit angreifen und durch Angriffsschaden Schaden anrichten (es gibt eine Formulierung, um den Schaden zu berechnen, aber das ist in dieser Phase wohl nicht wichtig), sobald er tot ist, und mit Bewegungsgeschwindigkeit zum nächsten übergehen ( Sie können die Lager auf der Karte sehen, die gelben Schädel)

Ich habe über den Algorithmus nachgedacht:

  1. Ich dachte, wenn ich nur ein for von i = 0 bis i = 30000 mache (ms zählen), kann ich einfach die feindliche HP und meine HP auch bei jeder ms überprüfen, die sich als so schlecht herausstellte (ziemlich CPU-schwer, und ich möchte um etwas Zufälliges hinein zu setzen, also sollte ich in der Lage sein, 1k Iteration zusammenzufassen, was unmöglich ist)

  2. Zweitens dachte ich, ich sollte nur ein for von i = 1 bis 30 machen und jede Sekunde überprüfen und überprüfen, was in der letzten Sekunde passiert ist, aber einige der neutralen Monster sind in einem großen Lager (bis zu 4 Monster) und Auf diese Weise wurde der Code immer komplizierter.

  3. Ich werde Threads für jeden Spieler / jedes Monster erstellen und wenn sie fertig sind, nachsehen, wann sie gestorben sind, und die PS des Spielers reduzieren.

Meine Frage, ist das der richtige Weg?

TLDR: Ich möchte ein Tool erstellen, um eine Analyse (iteriere 1k und berechne den Durchschnitt) über ein Spiel zu erstellen, bei der die Erhöhung der Statistik den Charakter dazu bringt, schnellere neutrale Monster zu töten.

Ich würde Java bevorzugen, aber atm bin ich beim Algorithmus stecken.


@ Karoly S: Ja, es ist mein schlechtes, .com -> .eu

Ich habe daran gearbeitet:

Ich überprüfe die verbleibende Zeit für jedes Objekt (Spielerfertigkeit, automatischer Angriff, Buffs) und wähle immer die Shorttest-Zeit aus, speichere die letzte Zeit und addiere die Zeit zu der Zeit, in der nächsten Runde berechne ich die Zeit mit (Zeit-) letztes Mal)

Wenn das Objekt die verbleibende Zeit 0 hat, wird es alles tun, was es tun muss.

Ich weiß nicht, ob es effizient ist oder nicht, aber das ist das Beste, was ich tun kann.

Tetrad
quelle
1
Vielleicht haben Sie besseres Glück, wenn Sie im Bereich Spieleentwicklung / Site von Stack Exchange nachfragen, versuchen Sie, einen Mod zu finden, um ihn zu verschieben, obwohl dies wahrscheinlich sowieso der Fall ist. Ein Dschungelsimulator wäre irgendwie interessant, ich werde darüber nachdenken und sehen, was mir einfällt.
Karoly S
Vielen Dank für die schnelle Antwort, Ihre Hilfe wird sehr geschätzt. Meine Vermutung ist richtig, dass Sie auch ungarisch sind?
Absolut, das ist etwas, worüber ich nachgedacht habe, wenn auch nicht annähernd so ausführlich, aber es würde mich interessieren. Mein erster Ansatz wäre zu sehen, ob eine effektive, wenn auch einfachere Version von # 2 möglich ist. Ich würde dies gerne ausführlicher mit Ihnen besprechen. Und ja, Ihre Vermutung wäre richtig :)
Karoly S
Klingt cool für mich, ich werde das Thema offen lassen, vielleicht hat schon jemand eine Idee dazu. meine E-Mail (etheld bei gwelican dot com)
Hört sich gut an, ich werde darüber nachdenken und Ihnen heute etwas später eine E-Mail senden.
Karoly S

Antworten:

1

Alternativen zur Einzelbildsimulation:

Sie können eine vernünftige Annäherung für die Simulation durch eine Formel wie erhalten

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

Sie können auch eine Verschiebungswarteschlange verwalten, sodass Sie pro Umzug und nicht pro Tick simulieren:

// 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
quelle
Die Verschiebungswarteschlange ist genauer, da sie korrekt mit der Tatsache umgeht, dass der Schaden diskret und nicht kontinuierlich ist. Wenn ich zum Beispiel nach 0 Sekunden 50 Schadenspunkte und nach 1 Sekunde weitere 50 Schadenspunkte verursache, beträgt mein Schaden pro Sekunde 50, aber ich würde ein Ziel mit 100 HP in 1 Sekunde töten.
@ Hammar: Das stimmt. Je kürzer der Kampf ist, desto ungenauer ist eine DPS-basierte Schätzung.
Jimmy
Die Tatsache, dass das Spiel Betäubungen und andere Schwächungen aufweist, würde es wirklich schwierig machen, ein solches Werkzeug zu erreichen, da verschiedene Spieler unterschiedliche Ergebnisse bei der Tötungsrate erzielen könnten. Sowieso gute Antwort.
Grimshaw