In meinem Spiel ist XP, das benötigt wird, um das nächste Level zu erreichen, das aktuelle Level × Level-Schwellenwert . Wie kann ich mein aktuelles Level von den gesamten EP abrufen, die ich jemals verdient habe?
Beispielsweise:
Level Threshold = 50
Current Level = 1
Ab Stufe 1 würde ich (1 × 50) = 50 EP benötigen , um auf Stufe 2 zu gelangen, und so weiter.
Level 1: 50 XP needed to reach level 2
Level 2: 100 more XP needed to reach level 3
Level 3: 150 more XP needed to reach level 4
Mit anderen Worten sieht die Fortschrittsanzeige wie folgt aus:
Level 1: 0 XP to 49 XP
Level 2: 50 XP to 149 XP
Level 3: 150 XP to 299 XP
Level 4: 300 XP to 499 XP
Wenn ich 300 XP habe, habe ich gerade Level 4 erreicht. Wie kann ich das generell berechnen?
levels
mathematics
progression
Jay van Diyk
quelle
quelle
Antworten:
Wenn wir die Mathematik erarbeiten und die
Level
erfahrungsbedingten Probleme lösenXP
, erhalten wir:Was ist zum Beispiel die Stufe des Spielers für ?XP= 300
Wie gewünscht.
Oder wofür ist das Level
XP = 100000
?Allgemeiner ausgedrückt für eine willkürliche Startschwelle auf Stufe 1:
Sie können auch umgekehrt vorgehen und die
XP
für ein bestimmtes Level erforderliche Menge berechnen, indem Sie die obige Formel für XP lösen.Beachten Sie, dass die obige Formel mit Brüchen funktioniert, Sie jedoch auf den nächsten ganzzahligen Wert abrunden müssen. In C ++ / C # könnten Sie beispielsweise (int) Level verwenden.
Um die obige Formel in geschlossener Form zu erhalten, verwendete ich Differenzgleichungen, Gauß-Summierung und eine quadratische Formel.
Wenn Sie Schritt für Schritt an der Lösung dieser Formel interessiert sind ...
Wir machen einen rekursiven Algorithmus, indem wir unsere Überlegungen dazu letztendlich starten
Experience(next_level) = Experience(current_level) + current_level*50
.Um beispielsweise , haben wir:XPL e V e l 3
Woher
2*50
kommt die Aufforderung des OP, dass die zum Erreichen des nächsten Levels erforderliche Erfahrung dem aktuellen Level * 50 entspricht?Nun setzen wir mit der gleichen Logik in die Formel ein. Das ist:XpL e V e l 2
Ersetze in die obige Formel:XPL e V e l 2= XPL e V e l 1+ 2 × 50
und ist nur 50, was unser Ausgangspunkt ist. DaherXpL e V e l 1
Wir können ein Muster für die rekursive Berechnung höherer Ebenen und eine endliche Kette von Summierungen erkennen.
Wobei N das zu erreichende Niveau ist. Um die XP für das Level N zu bekommen, müssen wir nach N auflösen.
Nun ist die rechte Seite einfach eine Summation von 1 nach N-1, die durch die berühmte Gaußsche Summation ausgedrückt werden kann . DaherN×(N+1)÷2−N
oder nur
Zum Schluss alles auf eine Seite legen:
Dies ist jetzt eine quadratische Formel, die eine negative und eine positive Lösung ergibt, von denen nur die positive relevant ist, da es keine negativen Niveaus gibt. Wir erhalten jetzt:
Der von XP und der linearen Schwelle abhängige aktuelle Pegel ist daher:
Hinweis: Das Kennen dieser Schritte kann hilfreich sein, um noch komplexere Abläufe zu lösen. Im RPG-Bereich sehen Sie neben einem linearen Verlauf wie hier die tatsächlich häufigere gebrochene Potenz oder quadratische Beziehung, zB . Für die eigentliche Implementierung des Spiels halte ich diese Lösung jedoch für weniger optimal, da Sie im Idealfall alle Ihre Stufenfortschritte im Voraus kennen sollten, anstatt sie zur Laufzeit zu berechnen. Für meinen eigenen Motor verwende ich deshalb vorverarbeitete Erfahrungstabellen, die flexibler und oft schneller sind. Wenn Sie jedoch zuerst diese Tabellen schreiben oder sich nur die Frage stellen, waszum Beispiel benötigt wird, um sie zu erhalten, bietet diese Formel den schnellsten Weg, um die spezifische Frage des OP zu beantworten.L e v e l = XP√5.0
XP
Level 100
Bearbeiten : Diese Formel ist voll funktionsfähig , wie es sollte , und es gibt richtig die aktuellen
level
abhängigXP
mit einer linearen Schwelle Progression , wie durch die OP angefordert. (Die vorherige Formel gab "Level + 1" aus, indem angenommen wurde, dass der Spieler mit Level 0 angefangen hatte, was mein Fehler war. Ich hatte es in meiner Mittagspause gelöst, indem ich auf ein kleines Taschentuch schrieb! :)quelle
Die einfache und allgemeine Lösung besteht darin, eine Schleife zu verwenden , wenn Sie diese Berechnung nicht millionenfach pro Sekunde wiederholen müssen (und wenn Sie dies tun, tun Sie wahrscheinlich etwas Falsches):
Der große Vorteil dieser Methode besteht nicht nur darin, dass keine komplizierte Mathematik erforderlich ist, sondern dass sie für jede beliebige Exp-per-Level-Funktion funktioniert. Wenn Sie möchten, können Sie sogar beliebige Exp-Werte pro Ebene erstellen und in einer Tabelle speichern.
Wenn Sie (aus irgendeinem seltsamen Grund) eine noch schnellere Lösung benötigen, können Sie auch den Gesamtbetrag der Exp vorberechnen, der zum Erreichen der einzelnen Ebenen erforderlich ist, diesen in einer Tabelle speichern und eine binäre Suche verwenden, um die Ebene des Spielers zu finden. Die Vorberechnung benötigt noch Zeit proportional zur Gesamtzahl der Ebenen, aber die Suche benötigt dann nur Zeit proportional zum Logarithmus der Anzahl der Ebenen.
quelle
Die Frage wurde mit Code beantwortet, aber ich denke, es sollte mit Mathe beantwortet werden. Jemand möchte vielleicht verstehen, anstatt nur zu kopieren und einzufügen.
(Auf ganze Zahl abschneiden, da der Spieler alle erforderlichen EP benötigt, um einen der Bonus-Levels zu erhalten. )
quelle
XP_Level(0) = 50
und dann können wir einfach das Lösen vermeiden? Vorteile, Vor- und Nachteile? Ich denke, es wäre gut, diese Antwort zu berühren. +1Hier ist ein Ansatz zur Lösung des Problems mit der grundlegenden Algebra. Wenn Sie sich nicht für die Schritte interessieren, springen Sie nach unten.
Eine einfache Sache, die man sich einfallen lassen kann, ist
n
die Gesamterfahrung, die mane
benötigt, um dieses Level zu erreichen:Der
t
Begriff steht für die Erhöhung der EP, die pro Stufe benötigt wird - im Beispiel 50.Wir können das Obige mit der Formel für arithmetische Folgen ( Summenidentität ) lösen :
Wir wollen jedoch die entgegengesetzte Formel - das Level des Spielers angesichts seiner Gesamterfahrung. Was wir wirklich tun wollen, ist die Lösung für das Level
n
. Gruppieren wir zunächst die Begriffe:Jetzt können wir die quadratische Formel verwenden:
Endgültige Gleichung:
quelle
Es ist aus den verschiedensten Gründen sehr wichtig , alle mathematischen Aspekte zu kennen, von denen einige für die Spieleentwicklung relevant sind.
ABER
Dies ist eine Spieleentwicklungs-Site, keine Mathe-Site. Lassen Sie uns also diskutieren, wie diese Dinge nicht als algorithmische Reihen, sondern als Mengen funktionieren , denn dies ist die Art von Mathematik, die für das Leveling in Spielen gilt, die Sie möglicherweise entwickeln, um sie zu verkaufen, und dies ist das System, das dem meisten (aber nicht allen) Leveling zugrunde liegt Systeme (zumindest historisch).
Spieler bevorzugen nette, runde Zahlen, die leicht zu merken und zu visualisieren sind. Nirgendwo ist dies wichtiger als in einem Level-basierten Spielsystem, in dem der Spieler X xp-Beträge benötigt, um auf Level Y aufzusteigen.
Es gibt zwei gute Gründe für die Auswahl von runden Zahlen:
Runde Zahlen machen Spaß. Der Zweck von Spielen ist es, Spaß zu haben. Angenehmes Verhalten ist wichtig, zumal das Spieldilemma von Natur aus oft alles andere als angenehm ist.
Warum ist das wichtig zu beachten?
Die meisten Algorithmen für zusammengesetzte Reihen erzeugen keine schönen runden Zahlen
Die meisten Serien hören nicht an einem hübschen Punkt auf (jede Antwort, die ich bisher hier gesehen habe, geht einfach für immer weiter). Also, was machen wir? Wir nähern uns und bestimmen dann , welche Ebenen für das Spielsystem gelten sollen .
Woher wissen wir, welche Annäherungen angemessen sind? Wir überlegen, wozu das Leveln im Spielsystem gut ist.
Die meisten Spiele haben Level-Caps, die irgendwann einsetzen. Dies kann auf verschiedene Arten geschehen:
XP + (XP * Modifier)
oder was auch immer) festgelegten willkürlichen Geschwindigkeit auf sie zukommt.Es gibt einige Spielsysteme, bei denen es keine Obergrenze gibt und das System algorithmisch bestimmt wird. Normalerweise verwenden Systeme wie dieses ein X-Potenzen-Y-System, um die Zahlen schnell explodieren zu lassen. Dies macht es sehr einfach, Level L-1 zu erreichen. Es ist vernünftigerweise zu erwarten, dass die meisten Spieler Level L erreichen werden. Es ist außerordentlich schwierig, Level L + 1 zu erreichen, und die Spieler werden älter und sterben, bevor sie L + 2 erreichen. In diesem Fall ist "L" ein Level, von dem Sie sich entschieden haben, dass es das für das Spiel geeignete Ziellevel ist, bei dem das System normalerweise begrenzt worden wäre, aber die Option für Leute offen lässt, die sich vormachen, es sei für immer eine gute Idee für XP. (Unheimlich!) In dieser Art von System ist die hier gefundene Mathematik absolut sinnvoll. Aber es ist ein sehr enger und selten anzutreffender Fall in echten Spielen.
Also, was machen wir?
Level und XP berechnen ? Nein. Level und XP bestimmen ? Ja.
Sie bestimmen, was Ebenen bedeuten, und dann, welche verfügbaren Ebenen verfügbar sein sollen. Diese Entscheidung hängt von der Granularität des Spielsystems ab (Gibt es einen großen Unterschied in der Stärke zwischen den Levels? Verleiht jedes Level eine neue Fähigkeit? Usw.) und davon, ob Levels selbst als Gating-System verwendet werden oder nicht ("Kann nicht") Gehe in die nächste Stadt, bis du Level 10, Junge. "bist, oder ein wettbewerbsfähiges Leitersystem erzwingt Level-basierte Stufen usw.).
Der Code dafür ist ziemlich einfach und dient lediglich der Bereichsbestimmung:
Oder mit einer if-Anweisung oder einem case oder einer Kette von if / elif oder mit welcher Sprache auch immer, die Sie gerade verwenden. (Dieser Teil ist das am wenigsten interessante Element eines Spielsystems gerade im Erlang-Modus sein, und die obige Syntax ist möglicherweise nicht für alle offensichtlich.):
Ist es erstaunlich, Mathe? Nein überhaupt nicht. Handelt es sich um eine manuelle Implementierung der Mengenelementermittlung? Ja. Das ist alles , es ist, und das ist so ziemlich so , wie ich es gesehen habe tatsächlich in den meisten Spielen im Laufe der Jahre getan.
Als Randnotiz sollte dies nicht jedes Mal geschehen, wenn der Spieler Erfahrung sammelt. Normalerweise verfolgst du "XP to go" als einen Wert und sobald der Spieler den "to go" -Wert erschöpft oder überschreitet (auf welche Weise auch immer du es tust), berechnest du diesen einmal, um herauszufinden, wo der Spieler wirklich ist Speichern Sie das, berechnen Sie das nächste "to go" abzüglich des verbleibenden Restbetrags (sofern das Mitführen von XP erlaubt ist) und wiederholen Sie den Vorgang.
quelle