Опрацьовуючи математику та вирішуючи Level
умовний досвід XP
, ми отримуємо:
Level=1+1+8×XP÷50−−−−−−−−−−−−−√2
Наприклад, який рівень гравця для ?XP=300
1+1+8×300÷50−−−−−−−−−−−−−√2=4
Як вимагалось.
Або для чого рівень XP = 100000
?
1+1+8×100000÷50−−−−−−−−−−−−−−−−√2=63
Більш загальновиражений для довільного початкового порогу на рівні 1:
Level=1+1+8×threshold÷50−−−−−−−−−−−−−−−−−−√2
Ви також можете зробити зворотний і обчислити XP
необхідний для будь-якого заданого рівня, вирішивши вищевказану формулу для XP.
XP=(Level2−Level)×threshold2
Зауважте, що вищевказана формула працює з дробами, але вам потрібно округлити до наступного цілого значення. Наприклад, в C ++ / C # ви можете використовувати (int) рівень.
Для отримання вищезгаданої формули закритої форми я використав різницеві рівняння, підсумовування Гаусса та квадратичну формулу.
Якщо ви зацікавлені у вирішенні цієї формули поетапно ...
Ми робимо рекурсивний алгоритм, починаючи наші міркування зрештою Experience(next_level) = Experience(current_level) + current_level*50
.
Наприклад, для отримання ми маємо:XPLevel3
XPLevel3=XPLevel2+2×50
Звідки 2*50
випливає прохання ОП, що необхідний досвід для досягнення наступного рівня - це поточний рівень * 50.
Тепер ми замінюємо тією ж логікою у формулу. Це є:XpLevel2
Замініть у наведеній вище формулі:XPLevel2=XPLevel1+2×50
XpLevel3=XpLevel1+1×50+2×50
а - це лише 50, що є нашою відправною точкою. ЗвідсиXpLevel1
XpLevel3=50+2×50=150
Ми можемо розпізнати закономірність для рекурсивного обчислення більш високих рівнів та кінцевого ланцюга підсумовування.
XpLevelN=50+2×50+3×50+...+(N−1)×50=∑i=0n−1i×50
Де N - рівень, якого потрібно досягти. Щоб отримати XP для рівня N, нам потрібно вирішити для N.
XpLevelN÷50=∑i=0n−1i
Тепер права рука просто підсумовування від 1 до N-1, яке може бути виражено відомим гауссова підсумовування . ЗвідсиN×(N+1)÷2−N
XpLevelN÷50=N(N+1)÷2−N
або просто
2∗(XpLevelN−50)÷50=N(N+1)−2N
Finally, putting everything on one side:
0=N2−N−2×XpLevelN÷50
This is now a quadratic formula yielding a negative and positive solution, of which only the positive is relevant as there are no negative levels. We now obtain:
N=1+1+4×2×XpLevelN50−−−−−−−−−−−√2
The current level conditional on XP and linear threshold is therefore:
Level=1+1+8×XP÷threshold−−−−−−−−−−−−−−−−−−−√2
Note Knowing these steps can be useful to solve for even more complex progressions. In the RPG realm you will see besides a linear progression as here, the actually more common fractional power or square relationship, e.g. Level=XP√5.0. However, for game implementation itself, I believe this solution to be less optimal as ideally you should know all your level progressions beforehand instead of calculating them at runtime. For my own engine, I use therefore pre-processed experience tables, which are more flexible and often faster. However, to write those tables first, or, to just merely ask yourself what XP
is needed to, let's say, obtain Level 100
, this formula provides the quickest way aimed at answering the OP's specific question.
Edit: This formula is fully working as it should and it outputs correctly the current level
conditional on XP
with a linear threshold progression as requested by the OP. (The previous formula outputted "level+1" by assuming the player started from Level 0, which was my erring--I had solved it on my lunch break by writing on a small tissue! :)