100 Punkte zwischen 0-1000 in zunehmendem Maße

7

Grundsätzlich ist es für das Rollenspiel, ich muss 100 Punkte entlang einer Skala generieren. Stufe 1 ist der Startbetrag und befindet sich bei Punkt 0 auf der Skala. Level 100 ist der höchste derzeit geplante Betrag und muss auf der Skala bei 1.000 liegen.

Mein Problem besteht darin, die Punkte 2 bis 99 zwischen diesen beiden zu generieren. Ich könnte es billig machen und einfach alle 10 Punkte mit einem Level fahren. Aber so soll es nicht funktionieren.

Idealerweise hätte ich gerne eine abfallende Kurve, damit die Ebenen in den frühen Stadien möglicherweise nur ein oder zwei Zahlen voneinander entfernt sind. Sowie:

Level 1 - 0
Level 2 - 2
Level 3 - 4

Aber mit zunehmendem Level steigt auch die Zahl.

Level 98 - 960
Level 99 - 980
Level 100 - 1000

Kann mir jemand helfen, das herauszufinden?

Zephyr
quelle
Haben Sie sich Rollenspiele angesehen? Dungeons and Dragons hatten eine gute Methode, bei der Level * 1000 xp zum Aufsteigen benötigt wurde (Level 1 -> 2 war 1000xp, 2 -> 3 war 2000xp usw.). Dies führte zu einer schönen Levelkurve, was bedeutete, dass dies nicht der Fall war zu schwer, um die niedrigeren Ebenen zu erreichen, aber es wurde schwieriger, die höheren zu erreichen. Natürlich wurde das Spiel selbst auch so skaliert, dass Sie bei Begegnungen auf höheren Ebenen mehr XP erhalten, was bedeutet, dass es nicht allzu schwierig war, die endgültigen Level zu erreichen. Dies müsste natürlich skaliert werden - nur eine Idee.
Polar
Sie erhalten möglicherweise vielfältigere Antworten auf diese Frage, wenn Sie sie auch im Mathe-Stack-Austausch veröffentlichen.
Kris Welsh

Antworten:

11

Eine Möglichkeit, dies zu tun, ist eine Leistungskurve, bei der Sie die Leistung auswählen und dann skalieren, um den richtigen Wert auf der maximalen Ebene zu erhalten:

points = pow(level, somePower) * (maxPoints / pow(maxLevel, somePower))

Wenn Sie zum Beispiel wählen, erhalten somePower = 1.5Sie

level 0 = 0.000000 points
level 1 = 1.000000 points
level 2 = 2.828427 points
level 98 = 970.150504 points
level 99 = 985.037563 points
level 100 = 1000.000000 points

Vermutlich würden Sie die Punkte auf die nächste Ganzzahl runden und optimieren somePower, um die gewünschte Kurve zu erhalten. Höhere Leistungen machen die Kurve am Anfang langsamer und am Ende schneller.

Bearbeiten: Auf Vorschlag von Byte56 habe ich ein Bild von Wolfram Alpha hinzugefügt . :) :)

Geben Sie hier die Bildbeschreibung ein

Nathan Reed
quelle
2

Wenn Sie nur Ganzzahlen verwenden möchten, würde ich ernsthaft darüber nachdenken, den Bereich von 1000 auf etwas Höheres zu erweitern. Ein Durchschnitt von zehn Einheiten zwischen den Ebenen bedeutet, dass Sie entweder zu eng sind, um am unteren Ende zu unterscheiden, oder zu nahe zwischen den Ebenen am oberen Ende. Zum Beispiel ist eine ziemlich übliche Art, Abstandsebenen zu verwenden, die Verwendung eines quadratischen Wachstums: Machen Sie die 'Punktzahl' der Ebene n proportional zu n 2 . Dies bedeutet, dass die Lücke zwischen den Ebenen linear wächst: Die Anzahl der Punkte, die benötigt werden, um von Ebene n zu Ebene (n + 1) zu gelangen, ist (ungefähr) proportional zu n. Wenn wir versuchen, diesen Ansatz an Ihre Daten anzupassen, müssen wir leider die Proportionalitätskonstante (100 2) annehmen, um Level 100 an 1000 Punkten zu erreichen) / 1000 oder 1/10; Mit anderen Worten, ist die Anzahl der Punkte für die Stufe n erforderlich n 2 / . 10 Dies funktioniert am oberen Ende gut: Stufe 100 liegt bei 1000 Punkten, Stufe 99 liegt bei (99 2 ) / 10 = 980 Punkten, Stufe 98 liegt bei 960 Punkten, Stufe 97 liegt bei 940,9 = 941 Punkten usw. Leider auf Das untere Ende bedeutet, dass die Anzahl der Punkte für Stufe 1 0 ist, aber die Anzahl der Punkte für Stufe 2 ist (2 2 ) / 10 = 0,4 = 0, dann ist Stufe 3 auf 1, Stufe 4 ist auf 2, usw.

Ein anderer Ansatz ist das exponentielle Wachstum, bei dem jede Ebene einige konstante mal so groß ist wie die vorherige. Leider stößt dies bei über 100 Levels auf ähnliche und wahrscheinlich noch schlimmere Probleme. Um in diesem Zeitraum von 1 auf 1000 zu wachsen, müsste jede Zahl mit 1000 (1/100) = 1,0715 oder 7% Wachstum von Level zu Level multipliziert werden - Dies bedeutet, dass Level 1 bei 1 ist, Level 2 bei 1,07 = 1, Level 3 bei 1,15 = 1, ..., bis Level 97 = 813 Punkte, Level 98 = 871 Punkte, Level 99 = 933 Punkte, Stufe 100 = 1000 Punkte. Dieser Ansatz funktioniert besser mit einer viel geringeren Anzahl von Ebenen - beispielsweise über einen Zeitraum von ungefähr 20 Ebenen.

Wenn Sie von 0 auf 1000 gehen müssen, würde ich einen hybriden Ansatz in Betracht ziehen; Lassen Sie das Wachstum der ersten Ebenen explizit linear sein und wechseln Sie dann zu einer quadratischen Wachstumsrate, die ungefähr in der Nähe von Ebene 10 liegt. Sie sollten in der Lage sein, Ihre Parameterwerte so einzustellen, dass an beiden Enden der Skala ein angemessener Abstand besteht.

Steven Stadnicki
quelle