Próbuję utworzyć formułę, którą można zmodyfikować, zmieniając po prostu dwie wartości: liczba_poziomów i doświadczenie_poziomu. Ma to na celu umożliwienie osobom modyfikującym grę zmiany wymagań dotyczących wyrównywania.
Mam go, abym mógł określić liczbę XP potrzebną do ostatniego poziomu, ale chcę móc kontrolować XP potrzebną do pierwszego poziomu, który w tym przypadku może się bardzo różnić. Na przykład, jeśli mam 40 poziomów i 1 000 000 XP na ostatnim poziomie, wówczas wymaganie pierwszego poziomu wynosi 625. Ale jeśli zmienię poziomy na 80, pierwszy poziom wzrośnie do 156. W obu przypadkach ostatni poziom potrzebuje 1 000 000
Musi być jakiś sposób, aby komputer opracował odpowiednią krzywą, biorąc pod uwagę tylko te dwie podstawowe wartości.
#include <iostream>
int main()
{
int levels = 40;
if (levels < 2) levels = 2;
int experience_for_last_level = 1e6;
float fraction = 1.0 / levels;
{
int i = 0;
float fraction_counter = fraction;
int counter = levels;
int total = 0;
for (i = 1; i <= levels; ++i, fraction_counter += fraction, --counter)
{
int a = static_cast<int>(fraction_counter * experience_for_last_level / counter);
std::cout <<"Level "<<i<<": "<<a<<" ("<<counter<<")"<<"\n";
total += a;
}
std::cout << "\nTotal Exp: " << total;
}
}
Wynik:
Level 1: 625 (40) Level 15: 14423 (26) Level 29: 60416 (12)
Level 2: 1282 (39) Level 16: 16000 (25) Level 30: 68181 (11)
Level 3: 1973 (38) Level 17: 17708 (24) Level 31: 77499 (10)
Level 4: 2702 (37) Level 18: 19565 (23) Level 32: 88888 (9)
Level 5: 3472 (36) Level 19: 21590 (22) Level 33: 103124 (8)
Level 6: 4285 (35) Level 20: 23809 (21) Level 34: 121428 (7)
Level 7: 5147 (34) Level 21: 26250 (20) Level 35: 145833 (6)
Level 8: 6060 (33) Level 22: 28947 (19) Level 36: 179999 (5)
Level 9: 7031 (32) Level 23: 31944 (18) Level 37: 231249 (4)
Level 10: 8064 (31) Level 24: 35294 (17) Level 38: 316666 (3)
Level 11: 9166 (30) Level 25: 39062 (16) Level 39: 487499 (2)
Level 12: 10344 (29) Level 26: 43333 (15) Level 40: 999999 (1)
Level 13: 11607 (28) Level 27: 48214 (14)
Level 14: 12962 (27) Level 28: 53846 (13)
źródło
Odpowiedzi:
Chociaż istnieje nieskończenie wiele sposobów ich wyboru, często krzywe niwelacyjne są zgodne z regułą mocy, taką jak następująca:
Główną zaletę tej formuły można łatwo wyjaśnić: dla danej reguły istnieje stała wartość N, tak że każdy poziom kosztuje N procent więcej niż poprzedni .
Twoje początkowe zmienne dodają następujące ograniczenia:
Dwa równania, dwie niewiadome. To wygląda dobrze. Proste matematyki dają
A
iB
:Wynikające z następującego kodu:
I następujące dane wyjściowe:
źródło
N
, że opisałeś powyżej? Co jeśli chcesz zmienićN
zmienną wtykową? Daj mi znać, czy powinienem zadać w tym celu osobne pytanie.N
iB
jestexp(B) = 1 + N
, lubB = log(1 + N)
. Jeśli więc chcesz, aby każdy poziom wymagał np. 15% więcej niż poprzedni, będziesz potrzebowaćB = log(1 + 0.15) = 0.13976
.Nie zapomnij zaokrąglić liczb po ustaleniu krzywej. Nie ma sensu mówić graczowi, że potrzebuje 119 378 punktów doświadczenia, aby przejść do następnego poziomu - ponieważ osoba ta zawsze rozumiałaby to jako „około 120 000”. W ten sposób lepiej będzie, jeśli wykonasz zaokrąglenie samodzielnie i zaprezentujesz swoim graczom „czyste” wyniki. Na przykład następujący kod (który rozciąga się na Sama Hocevara) będzie próbował zaokrąglić w górę do significant2.2 cyfr znaczących (oczywiście ta stała może być dowolnie dostosowywana):
Dane wyjściowe to:
źródło