Algorytm do dynamicznego obliczania poziomu na podstawie punktów doświadczenia? [Zamknięte]

41

Jedną z trudności, które zawsze miałem przy tworzeniu gier, jest decydowanie o tym, jak wdrożyć punkty doświadczenia przypisywane do zdobywania poziomów. Wydaje się, że w wielu grach, w które grałem, nie ma wzorca, aby osiągnąć poziom, więc zakładam, że mają one statyczną tabelę słowników, która zawiera punkty doświadczenia w stosunku do poziomu. na przykład

Experience   Level
0            1
100          2
175          3
280          4
800          5

... Nie ma rymowania ani powodu, dla którego 280 punktów jest równe poziomowi 4, po prostu jest.

Nie jestem pewien, w jaki sposób wybierane są te poziomy, ale z pewnością nie byłby to dynamiczny. Pomyślałem także o możliwości poziomów wykładniczych, aby nie musieć utrzymywać osobnej tabeli odnośników, np

Experience   Level
0            1
100          2
200          3
400          4
800          5
1600         6
3200         7
6400         8

... ale wydaje się, że wymknęłoby się to spod kontroli dość szybko, ponieważ na wyższych poziomach wrogowie w grze musieliby zapewnić ogromne doświadczenie na poziomie - i byłoby to trudne do kontrolowania. Wyrównanie stałoby się zadaniem niemożliwym.

Czy ktoś ma jakieś wskaźniki lub metody, których używa, aby zdecydować, jak wyrównać postać na podstawie doświadczenia? Chcę być uczciwy w zdobywaniu poziomów i chcę wyprzedzać graczy, aby nie martwić się o ciągłe dodawanie nowych doświadczeń / przeszukiwania poziomów.

Jerzy
źródło
4
Nie, jest to po prostu wolniejszy wykładniczy (mnożenie przez 10 co ~ 3,3 poziomy lub 100 co ~ 6,6 poziomów zamiast każdego poziomu). Geometryczne byłoby jak 1 [00], 4, 9, 25, 36 itd. Nawet 1100 1210 1331 1464 jest szeregiem wykładniczym, pomnożonym przez 1,1.
Random832
1
en.wikipedia.org/wiki/Exponential_growth Powinno to wyjaśnić.
aaaaaaaaaaaa
1
@Stephen: @ Random832 jest poprawny, zarówno wzrost „wykładniczy”, jak i „geometryczny” odnosi się do posiadania stałego stosunku między kolejnymi / równoodległymi terminami (co oznacza, że tempo wzrostu jest proporcjonalne do bieżącej wartości - w rachunku różniczkowym stwierdza się to, mówiąc: funkcja wykładnicza ma f'(x) = c*f(x)) . Termin „geometryczny” jest stosowany, gdy domena (wejście) jest dyskretna (np. Liczba całkowita). Wzór na przykład @ George'a, powyżej poziomu 1, Experience = 100 * 2^(Level-2)jest wykładniczy. Wzór na twój postęp, powyżej poziomu 1, jest Experience = 100^(Level-1)również wykładniczy.
BlueRaja - Danny Pflughoeft

Odpowiedzi:

36

Stosowanie relacji kwadratowej jest dość powszechne.

level = constant * sqrt(XP)

Lub przybliżony ekwiwalent liniowo rosnącej różnicy poziomów.

Level   XP      Difference
1       0       -
2       100     100
3       300     200
4       600     300
5       1000    400

Systemy te działają całkiem dobrze, gdy wzmocnienie XP jest w przybliżeniu liniowe. Jeśli postać wysokiego poziomu może zdobyć XP szybciej niż postać niskiego poziomu, to nie jest to odpowiedni system.

aaaaaaaaaaaa
źródło
3
Podejrzewam, że dla graczy typu Achiever istnieje duże prawdopodobieństwo, że w miarę postępów ich postaci będzie więcej zdobywanych PD. Uważam, że twoje rozwiązanie jest interesujące i prawdopodobnie poprawię je tylko nieznacznie, aby uzyskać różnice, takie jak 107-214-321-428, uniemożliwiając w ten sposób graczowi wyświetlanie tylko okrągłych liczb, a także nadzieję, że może to zwiększyć wrażenia z gry tylko trochę bardziej „organiczne” (staram się wymyślić lepsze słowo niż to, ale „organiczne” to wszystko, co mam w tej chwili).
Randolf Richardson,
1
+1 to jest dokładnie to, co robiłem w przeszłości, działa świetnie
BlueRaja - Danny Pflughoeft
3
Równania dla liniowo rosnącej różnicy poziomów. poziom = (sqrt (100 (2 doświadczenie + 25)) + 50) / 100 i doświadczenie = (poziom ^ 2 + poziom) / 2 * 100- (poziom * 100)
C9HDN
3
Świetna odpowiedź i podoba mi się ta krzywa. Skończyło się na użyciu stałej 0,04. Dla tych, którzy zastanawiają się, odwrotność tej formuły do ​​obliczenia XP to: XP = poziom ^ 2 / stały
BradH
3
@BradH Właściwie wydaje się, że to XP = (poziom / stała) ^ 2. W php może to być reprezentowane jako XP = pow (poziom / stała, 2) lub w późniejszych wersjach, (poziom / stała) ** 2
Taylor Dondich
17

Prawdopodobnie przydatne będą funkcje logarytmiczne, które można wykorzystać do spowolnienia wzrostu, gdy zdobywane są kolejne punkty doświadczenia. Oto dwie strony internetowe, które wyjaśniają, jak działają:

  Wykresy funkcji logarytmicznych
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  Wprowadzenie do tworzenia graficznych funkcji logarytmicznych
  http://www.purplemath.com/modules/graphlog.htm

Oto jak to wygląda na wykresie, który, mam nadzieję, spełni twoje potrzeby:

wprowadź opis zdjęcia tutaj

Randolf Richardson
źródło
1
@George Grając ze współczynnikami możesz łatwo użyć funkcji logarytmicznej do skalowania poziomu gracza. +1 za użycie matematyki
Stephen
2
Zauważ, że jest to implementacja wykładniczego wymagania XP. level = log(XP) <=> XP = e^level. Wymaganie może okazać się nieco strome dla ostatnich poziomów, ale będzie działać dobrze przy odpowiednim wzroście akumulacji XP.
aaaaaaaaaaaa
@eBusiness: Dobra uwaga, ale nie może to stanowić problemu, ponieważ postacie na wyższym poziomie zwykle zdobywają więcej punktów w krótszym czasie (np. atakując / zabijając potężniejsze potwory o większej prędkości trafienia). To jeden z powodów, dla których uważam, że matematyka ta może być odpowiednia do gier wideo (szczególnie w kontekście MMORPG).
Randolf Richardson
2
Po prostu uważam, że to trochę dziwne, że OP martwi się wykładniczym wzrostem, a następnie akceptuje odpowiedź, która po prostu opisuje to samo w inny sposób. Ale chyba to jego problem.
aaaaaaaaaaaa
1
@eBusiness: Być może moja odpowiedź wyjaśniła coś o wykładniczym wzroście, co wcześniej nie było jasne? Istnieje wiele różnych sposobów zastosowania matematyki i nie jestem pewien, czy nawet najlepszy nauczyciel matematyki mógłby je wszystkie znać (no, może i tak drugi najlepszy nauczyciel matematyki).
Randolf Richardson,
9

Oto niektóre sposoby, z których korzystałem do tej pory. Są one sortowane według szybkości wzrostu (wystarczy pomnożyć każde równanie przez stałą wartość):

  1. exp = poziom (ten może wydawać się dziwny, ale w przypadku niektórych gier, które nagradzają zmiany exp zgodnie z poziomem gracza, np. Borderlands, ten może się zmieścić)

  2. exp = poziom * log 10 (poziom)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
    
  3. exp = poziom ^ const_value: w moim przykładzie ustawiłem wartość const na 3/2

    1   1
    2   2.8
    3   5.1
    4   8
    5   11.2
    6   14.7
    
Ali1S232
źródło
4

Myślę, że to zależy od tego, jak łatwo gracz może zdobyć doświadczenie. Jeśli gracz może zdobyć 200 PD na poziomie 1 w ciągu 20 minut, a następnie zdobyć 200 PD na poziomie 2 w ciągu 2 minut, musisz skalować swoją ekspozycję w sposób wykładniczy.

Jeśli jednak zdobycie poziomu tylko nieznacznie ułatwia zdobycie xp, powinieneś wykonać funkcję xp na wyższym poziomie. (Może liniowy z pewnym współczynnikiem> 1)

Wangburger
źródło
4

Często punkty potrzebne do uzyskania poziomu oparte są na krzywej. W wielu grach RPG, w których istnieje również wiele innych cech i atrybutów twojej postaci, które rosną wraz z poziomem, będą one również miały własne krzywe.

Spójrz na RPGMaker, aby zobaczyć, jak to robią. W szczególności spójrz na krzywe parametrów na zrzutach ekranu sekcji „Dodaj trochę wyjątkowości, dostosowując wyposażenie początkowe” w dokumencie Tworzenie głównej postaci .

Zasadniczo możesz mieć krzywą określającą ilość XP potrzebną do awansu, a następnie różne krzywe określające, ile HP, MP, wytrzymałości, siły itp. Jest uzyskiwanych na każdym poziomie.

wprowadź opis zdjęcia tutaj

Adam Harte
źródło
2

Zastanów się

Najpierw musisz dowiedzieć się, w jaki sposób szybkość zdobywania doświadczenia zmienia się wraz z poziomem. Następnie możesz dostosować poziomowanie do wymaganego czasu . Jeśli każdy dodatkowy poziom pozwoli ci zdobyć doświadczenie dwa razy szybciej i potrzebujesz dwa razy więcej doświadczenia, aby każdy poziom wymagał takiej samej ilości czasu.

Sugeruję, aby pomyśleć o tym, ile czasu gracz powinien poświęcić, a następnie dostosować poziomowanie do tego.

Willy Goat
źródło
-3

Może powinienem po prostu użyć płaskiego systemu poziomowania, gdzie każdy poziom wymagałby dokładnie takiej samej ilości doświadczenia.

Łukasz Baran
źródło
3
Odpowiedzi powinny być nieco bardziej dopracowane niż zwykła sugestia. Spróbuj powiązać niektóre zalety tej strategii z dynamicznym systemem takim jak ten, o który prosiłeś.
MichaelHouse
Należy również pamiętać, że autor powinien zamieścić dodatkowe informacje ; jeśli inni użytkownicy mają więcej do dodania, powinni rozważyć opublikowanie osobnej odpowiedzi.
Gnemlock,