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:
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)
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.
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.
Antworten:
Alternativen zur Einzelbildsimulation:
Sie können eine vernünftige Annäherung für die Simulation durch eine Formel wie erhalten
Sie können auch eine Verschiebungswarteschlange verwalten, sodass Sie pro Umzug und nicht pro Tick simulieren:
quelle