Die Antwort von Grzegorz Sławecki ist bereits gut, aber ich wollte die Gründe für seine Methode erläutern und Ihnen die Werkzeuge geben, um die Lösungen an Ihre Spielanforderungen anzupassen.
Die Parameter des vorliegenden Problems sind die Angriffsstufe a des Spielers , der Waffenschaden w , der Gesamtschaden in einem Angriff d , die Gesundheit des Feindes H und die Mindestanzahl an Treffern, die erforderlich sind, um den Feind zu töten. Nennen wir es n .
Wenn Sie möchten, dass der Spieler in n Treffern tötet , muss sein Gesamtschaden d so sein, dass
(n-1) .d <H ≤ nd oder mit anderen Worten, n = Ceil (H / d) .
d hängt vom Waffenschaden w und von der Angriffsstufe a des Spielers ab. Wir können erwarten, dass die Waffen mit zunehmender Stufe besser werden. Schreiben wir also d (a) und w (a) anstelle von einfach d und w . Es wird auch erwartet, dass die Feinde, denen der Spieler gegenübersteht, härter werden, also wieder H (a) . Dies sind alles zunehmende Funktionen von a , und Sie möchten, dass sie die obigen Ungleichungen erfüllen. Die Unbekannten des Problems sind Funktionen. Sie legen eine als Einschränkung fest und finden die anderen. Sie haben jedoch Freiheitsgrade, was gut ist.
Wenn ich Ihre Frage gut verstehe, haben Sie ein genaues Gameplay im Sinn, und dieses Gameplay wird hier hauptsächlich durch die Anzahl der Treffer dargestellt, die erforderlich sind, um den Feind zu töten, n (a) . Daher Satz n (a) je nach Spiel Sie für das Spiel vorstellen und dann den Rest der Variablen des Problems finden . Dies sollten Sie immer tun, da Ihr erster Versuch, wie Ihre Frage zeigt, darin bestand, einen Algorithmus auszuprobieren, von dem Sie dachten, dass er dies tun könnte, und dann erkannte, dass dies zu einem unerwünschten Gameplay führte.
Nehmen wir zum Beispiel an, Sie möchten, dass der Spieler im Verlauf des Spiels immer öfter schlagen muss. Sie möchten auch, dass die erforderliche Anzahl von Treffern immer seltener zunimmt, sodass der Spieler einen längeren Teil des Spiels damit verbringt, fünfmal als zweimal zu schlagen. So sieht n (a) aus:
Die verwendete Funktion ist n (a) = Ceil (2 / 3.sqrt (a)) .
Wir wollen, dass H (a) / d (a) innerhalb der Wertebereiche bleibt, die n (a) den gewünschten Wert haben, und da n (a) = Ceil (H (a) / d (a)) , diese Bereiche sind die folgenden Rechtecke:
und H (a) / d (a) kann natürlich auf 2 / 3.sqrt (a) gesetzt werden, so dass wir den folgenden Graphen erhalten, wobei die rote Kurve H (a) / d (a) ist :
Bemerkung: Wir können H (a) / d (a) hier leicht finden , weil wir wissen, welche Funktion n (a) die Decke ist, aber wenn unsere Spezifikation für n weniger schön wäre, müssten wir unsere eigene Anpassung vornehmen Funktion mit verschiedenen Tricks. Nicht alle Probleme sind so schön!
Wir möchten also, dass H (a) / d (a) einer benutzerdefinierten Quadratwurzelfunktion ähnelt, und wir wissen, dass H und d Funktionen erhöhen müssen. Es gibt viele Lösungen. Zum Beispiel,
H (a) = a. 2 / 3.sqrt (a) und d (a) = a
Aber wir möchten, dass der Schaden und die HP des Feindes sehr stark zunehmen, so dass es am Ende des Spiels große, beeindruckende Zahlen gibt, nur für den Stil, also setzen wir stattdessen
H (a) = a². 20 / 3.sqrt (a) und d (a) = 10.a²
Der springende Punkt und das Beste daran ist: Sie wissen, dass Ihre Lösungen für das Problem ( H (a) und d (a) ) den Spezifikationen ( n (a) ) entsprechen, sodass Sie das gleiche n (a) erhalten. , aber du hast Freiheit. Sie kennen genau die Freiheit, die Sie haben, und können sie verwenden, um die Erfahrung anzupassen. Sie sollten immer versuchen, sich diese Freiheit zu geben und gleichzeitig Ihre wichtigsten Bedürfnisse zu befriedigen, wann immer dies möglich ist.
Nachdem wir den Ein-Treffer-Schaden d (a) gewählt haben und d (a) vom Waffenschaden w (a) abhängt , können wir d (a) als Spezifikation verwenden und versuchen, ein w (a) zu finden ) das gibt uns dieses d (a) . Die Prinzipien sind die gleichen, das Problem ist anders: Wir möchten, dass der Spieler mit zunehmendem Level mehr Schaden verursacht, auch wenn die Waffe gleich bleibt, und wir möchten, dass der Schaden steigt, wenn die Waffe alleine besser wird und das Level bleibt das Gleiche.
Aber welche Bedeutung sollte jeder Faktor haben? Nehmen wir an, wir wollen, dass das Level wichtiger ist als Waffen: Ein größerer Teil der Variationen von d (a) = a² sollte unabhängig von w (a) sein , zum Beispiel mit
w (a) = 22.sqrt (a) und daher d (a) = (22.sqrt (a)). (10 / 22.a.sqrt (a)) = w (a). (10 / 22.a.sqrt (a))
Wir erhalten die folgende Grafik für w (a) ...
... und immer noch das gleiche d (a) , weil wir wieder eine Lösung gefunden haben, die der Spezifikation entsprach , hier d (a) , und wir haben die oben genannten Eigenschaften mit w und a , die zum Schaden beitragen (nehmen wir an, wir schauen uns an d als Funktion von a und w : Wenn a fest wäre und wir w in der Gleichung d (a, w) = a / 30.w variieren würden , wäre d immer noch eine zunehmende Funktion von w , und das Gleiche gilt wenn Sie w beheben und eine Änderung vornehmen ).
Dieses w (a) könnte Ihnen den Wert geben, der in der Ingame-Beschreibung der Waffe angezeigt werden soll: Wir würden zum Beispiel "Waffenschaden: 220" mit der besten Waffe im Spiel erhalten.
Wir hätten eine völlig andere Spezifikation für unser Gameplay und damit für n (a) verwenden können , zum Beispiel eine, bei der die Anzahl der erforderlichen Treffer im Verlauf des Spiels schnell zunimmt und dann ein Plateau erreicht, und die resultierenden Lösungen wären anders gewesen.
playerAttack
Statistik auf 100 zu bringen? Wenn man bedenkt, dass dies der Maximalwert ist, wäre es nicht angemessen, den Feind mit wenigen Treffern zu töten? (Ist der 1000-HP-Feind etwas, das Sie zu Beginn des Spiels sehen würden? Ein Standard-Feind? Boss?)