W mojej grze XP potrzebny do osiągnięcia następnego poziomu to Bieżący poziom × Próg poziomu . Biorąc to pod uwagę, w jaki sposób mogę uzyskać swój obecny poziom z całkowitej liczby zdobytych XP ?
Na przykład:
Level Threshold = 50
Current Level = 1
Począwszy od poziomu 1 potrzebowałbym (1 × 50) = 50 XP, aby dostać się na poziom 2 i tak dalej.
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
Innymi słowy, tabela progresji wygląda następująco:
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
Jeśli mam 300 XP, właśnie osiągnęłam poziom 4. Jak mogę to ogólnie obliczyć?
levels
mathematics
progression
Jay van Diyk
źródło
źródło
Odpowiedzi:
Opracowując matematykę i rozwiązując pod
Level
warunkiem doświadczeniaXP
, otrzymujemy:Na przykład, jaki jest poziom gracza dla ?XP=300
Zgodnie z prośbą.
Lub jaki jest poziom
XP = 100000
?Mówiąc bardziej ogólnie, dla dowolnego progu początkowego na poziomie 1:
Możesz także zrobić odwrotną czynność i obliczyć
XP
wymagany poziom dla danego poziomu, rozwiązując powyższą formułę dla XP.Zauważ, że powyższa formuła działa z ułamkami, ale musisz zaokrąglić w dół do następnej liczby całkowitej. Na przykład w C ++ / C # możesz użyć (int) Level.
Aby uzyskać powyższą formułę w postaci zamkniętej, zastosowałem równania różnicowe, sumowanie Gaussa i wzór kwadratowy.
Jeśli jesteś zainteresowany rozwiązaniem tej formuły krok po kroku ...
Wykonujemy algorytm rekurencyjny, rozpoczynając nasze rozważania, które ostatecznie
Experience(next_level) = Experience(current_level) + current_level*50
.Na przykład, aby uzyskać , mamy:XP.L e v e l 3
Gdzie
2*50
pochodzi z prośby PO, że doświadczenie potrzebne do osiągnięcia następnego poziomu to obecny poziom * 50.Teraz podstawiamy tą samą logiką do wzoru. To jest:XpLevel2
Zastąp w powyższym wzorze:XPLevel2=XPLevel1+2×50
a wynosi zaledwie 50, co jest naszym punktem wyjścia. StądXpLevel1
Możemy rozpoznać wzór rekurencyjnego obliczania wyższych poziomów i skończonego łańcucha sumowań.
Gdzie N jest poziomem do osiągnięcia. Aby zdobyć XP za poziom N, musimy rozwiązać dla N.
Teraz prawej stronie jest po prostu sumą od 1 do N-1, która może być wyrażona za pomocą znanego Gaussa sumowania . StądN.× ( N+ 1 ) ÷ 2 - N
Lub tylko
Wreszcie, stawiając wszystko na jednej stronie:
Jest to teraz formuła kwadratowa dająca rozwiązanie negatywne i pozytywne, z których tylko dodatnia jest istotna, ponieważ nie ma poziomów ujemnych. Teraz otrzymujemy:
Obecny poziom uzależniony od XP i liniowego progu wynosi zatem:
XP
Level 100
Edycja : Ta formuła działa w pełni tak, jak powinna i prawidłowo generuje prąd
level
,XP
z liniowym progiem progowym, zgodnie z wymaganiami PO. (Poprzednia formuła dawała „poziom + 1”, zakładając, że gracz zaczął od poziomu 0, co było moim błędem - rozwiązałem go podczas przerwy na lunch pisząc na małej chusteczce! :)źródło
Prosty i rodzajowe rozwiązanie, jeśli nie trzeba powtarzać tego obliczenia miliony razy na sekundę (a jeśli nie, jesteś prawdopodobnie robi coś złego), jest po prostu użyć pętli:
Dużą zaletą tej metody, poza tym, że nie wymaga skomplikowanej matematyki, jest to, że działa ona dla dowolnej dowolnej funkcji exp-per-level. Jeśli chcesz, możesz nawet utworzyć dowolne wartości exp na poziom i zapisać je w tabeli.
Jeśli potrzebujesz (z jakiegoś dziwnego powodu) jeszcze szybszego rozwiązania, możesz również wstępnie obliczyć całkowitą liczbę exp potrzebną do osiągnięcia każdego poziomu, przechowywać go w tabeli i użyć wyszukiwania binarnego, aby znaleźć poziom gracza. Wstępne obliczenie nadal zajmuje czas proporcjonalny do całkowitej liczby poziomów, ale wyszukiwanie wymaga wtedy tylko czasu proporcjonalnego do logarytmu liczby poziomów.
źródło
Na pytanie odpowiedziano kodem, ale myślę, że należy na nie odpowiedzieć matematyką. Ktoś może chcieć to zrozumieć zamiast po prostu skopiować i wkleić.
Twój system można łatwo opisać za pomocą relacji powtarzalności:
Który oferuje ładne proste rozwiązanie w formie zamkniętejXP :
Co możemy rozwiązaćPoziom :
(Przybliżenie do liczby całkowitej, ponieważ gracz musi cały wymagany XP, aby uzyskać dowolny premii level-up)
źródło
XP_Level(0) = 50
a wtedy moglibyśmy po prostu uniknąć rozwiązania? Jakieś korzyści, zalety, wady? Myślę, że dobrze byłoby dotknąć tej odpowiedzi. +1Oto jedno podejście do rozwiązania problemu za pomocą podstawowej algebry. Jeśli nie przejmujesz się krokami, przejdź na sam dół.
Łatwo wymyślić, biorąc pod uwagę poziom
n
, całkowite doświadczeniee
potrzebne do uzyskania tego poziomu:t
Termin oznacza wzrost XP potrzebne na poziomie - 50, w tym przykładzie.Możemy rozwiązać powyższe za pomocą wzoru na sekwencje arytmetyczne ( tożsamość sumy ):
Chcemy jednak przeciwnej formuły - poziomu gracza, biorąc pod uwagę jego całkowite doświadczenie. Co naprawdę chcemy zrobić, to rozwiązać na poziomie
n
. Najpierw zgrupujmy warunki:Teraz możemy użyć formuły kwadratowej:
Ostateczne równanie:
źródło
Cała matematyka, o której tu mowa, jest bardzo ważna z wielu powodów, niektóre z nich dotyczą tworzenia gier.
ALE
To jest strona poświęcona tworzeniu gier, a nie strona matematyczna. Porozmawiajmy więc o tym, jak te rzeczy nie działają jako szeregi algorytmiczne, ale jako zestawy , ponieważ jest to rodzaj matematyki, który ma zastosowanie do wyrównywania poziomów w grach, które możesz rozwinąć w celu sprzedaży, i to jest system, który leży u podstaw (ale nie wszystkich) wyrównywania systemy (przynajmniej historycznie).
Gracze preferują ładne, okrągłe liczby, które są łatwe do zapamiętania i wizualizacji, i nigdzie nie jest to ważniejsze niż w systemie gier opartych na poziomach, w którym gracz potrzebuje X xp, aby przejść do poziomu Y.
Istnieją dwa dobre powody, aby wybierać okrągłe liczby:
Okrągłe liczby są przyjemne. Celem gier jest bycie przyjemnym. Przyjemność jest ważna, zwłaszcza że dylematy w grze często są z założenia przyjemne.
Dlaczego warto o tym pamiętać?
Większość algorytmów szeregów złożonych nie generuje ładnych, okrągłych liczb
Większość serii nie kończy się w ładnym momencie (każda odpowiedź, którą do tej pory widziałem, trwa wiecznie). Więc co robimy? Przybliżamy, a następnie my jaki zestaw poziomów powinien obowiązywać w systemie gry .
Skąd wiemy, jakie przybliżenia są odpowiednie? Rozważamy, jaki jest sens wyrównywania w systemie gry.
Większość gier ma ograniczenia poziomów, które zaczynają się w pewnym momencie. Można to rozegrać na kilka sposobów:
XP + (XP * Modifier)
lub cokolwiek innego).Tam są niektóre systemy gry, gdzie nie ma ograniczenia poziomu i system jest algorytmem. Zwykle takie systemy wykorzystują system X-Power-of-Y, aby liczby szybko wybuchały. To sprawia, że bardzo łatwo jest dostać się do poziomu L-1, co, jak można się spodziewać, większości graczy dostanie się na poziom L, niezwykle trudno jest dostać się na poziom L + 1, a gracze zestarzeją się i umrą przed osiągnięciem L + 2. W tym przypadku „L” jest poziomem, który zdecydowałeś, że jest poziomem docelowym odpowiednim do gry i na którym normalnie ograniczałby system, ale pozostawia opcję otwartą dla ludzi, którzy mogą się łudzić, że dobrym pomysłem jest XP na zawsze. (Sinister!) W tego rodzaju systemie znaleziona tutaj matematyka ma doskonały sens. Ale jest to bardzo wąski i rzadko spotykany przypadek w rzeczywistych grach.
Więc co robimy?
Oblicz poziomy i XP? Nie. Określić poziomy i XP? Tak.
Określ, co oznaczają poziomy, a następnie zdecyduj, jaki dostępny zestaw poziomów powinien być dostępny. Ta decyzja sprowadza się do ziarnistości w systemie gry (czy istnieje ogromna różnica w sile między poziomami? Czy każdy poziom nadaje nową zdolność? Itp.) I czy poziomy są używane jako system bramkowania („Nie można idź do następnego miasta, dopóki nie osiągniesz 10 poziomu, dzieciaku. ”lub system drabin konkurencyjnych wymusza poziomy oparte na poziomach itp.).
Kod do tego jest dość prosty i polega jedynie na określeniu zasięgu:
Lub z instrukcją if, sprawą, łańcuchem if / elif lub jakimkolwiek językiem, w którym używasz wsparcia (ta część jest najmniej interesującym elementem każdego systemu gry, przedstawiam tylko dwa sposoby, ponieważ być teraz w trybie Erlang, a powyższa składnia może nie być oczywista dla wszystkich.):
Czy to niesamowita matematyka? Nie, wcale nie. Czy jest to ręczna implementacja wyznaczania elementu zestawu? Tak. To wszystko, co jest, i to dość dużo droga Widziałem to faktycznie odbywa się w większości gier przez lata.
Na marginesie, nie należy tego robić za każdym razem, gdy gracz zdobywa doświadczenie. Zazwyczaj śledzisz wartość „XP to go” jako jednej wartości, a gdy gracz wyczerpuje lub przekracza wartość „go to” (niezależnie od tego, w jaki sposób to robisz), obliczasz to raz, aby dowiedzieć się, gdzie naprawdę jest gracz w, zapisz to, oblicz następny „iść” minus resztki (jeśli dozwolone jest przenoszenie XP do przodu) i powtórz.
źródło