각 레벨에 비례하여 더 많은 XP가 필요한 경우 총 XP에서 현재 레벨을 계산하려면 어떻게해야합니까? 2: 100 more XP needed to reach

내 게임에서 XP는 다음 레벨에 도달하기 위해 Current Level × Level Threshold 입니다. 그렇다면 총 XP 에서 현재 레벨 을 어떻게 얻을 수 있습니까?


예를 들면 다음과 같습니다.

Level Threshold = 50
Current Level = 1

레벨 1에서 시작하여 레벨 2에 도달하려면 (1 × 50) = 50 XP 등이 필요합니다.

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

즉, 진행률 테이블은 다음과 같습니다.

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

300 XP를 사용하면 레벨 4에 도달합니다. 일반적으로 어떻게 계산할 수 있습니까?



답변

수학을 연습하고 Level조건부 경험을 해결 XP하면 다음을 얻습니다.

Level=1+1+8×XP÷502

예를 들어, 의 플레이어 레벨은 무엇 입니까?

XP=300

1+1+8×300÷502=4

요청대로.

또는의 수준은 XP = 100000무엇입니까?

1+1+8×100000÷502=63

보다 일반적으로 표현하면 레벨 1 임의 시작 임계 값 에 .

Level=1+1+8×threshold÷502

XPXP에 대해 위의 공식을 해결하여 역순으로 수행하고 주어진 수준에 필요한 것을 계산할 수도 있습니다 .

XP=(Level2−Level)×threshold2

위의 수식은 분수와 함께 작동하지만 다음 정수 값으로 내림해야합니다. 예를 들어 C ++ / C #에서는 (int) Level을 사용할 수 있습니다.

위의 닫힌 형식 수식을 얻기 위해 차이 방정식, 가우스 합산 및 2 차 수식을 사용했습니다.

이 공식의 솔루션을 단계별로 관심이 있다면 …

우리는 궁극적으로 고려 사항을 시작하여 재귀 알고리즘을 수행합니다. Experience(next_level) = Experience(current_level) + current_level*50 .

예를 들어,

XPLevel3

우리가있다 :

XPLevel3=XPLevel2+2×50

어디에, 2*50 경험을 다음 수준에 도달하기 위해 필요한 것을 OP의 요청에서 비롯 현재 레벨 * 50입니다.

이제 우리는 X p L e v e l 2를 대체합니다

XpLevel2

를 동일한 논리로 공식에 합니다. 그건:

대체

XPLevel2=XPLevel1+2×50

위의 공식에 을 :

XpLevel3=XpLevel1+1×50+2×50

그리고

XpLevel1

은 50에 불과합니다. 이것이 우리의 출발점입니다. 금후

엑스피엘이자형V이자형엘삼=50+2×50=150

더 높은 수준을 재귀 적으로 계산하기위한 패턴과 유한 한 합의 체인을 인식 할 수 있습니다.

엑스피엘이자형V이자형엘엔=50+2×50+삼×50+...+(엔−1)×50=∑나는=0엔−1나는×50

여기서 N은 달성해야 할 수준입니다. 레벨 N의 XP를 얻으려면 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)−2엔

마지막으로 모든 것을 한쪽에 두십시오.

0=N2−N−2×XpLevelN÷50

이것은 이제 음과 양의 솔루션을 산출하는 2 차 공식이며, 음의 레벨이 없으므로 양의 솔루션 만 관련됩니다. 이제 다음을 얻습니다.

N=1+1+4×2×XpLevelN502

따라서 XP의 조건부 전류 레벨과 선형 임계 값은 다음과 같습니다.

Level=1+1+8×XP÷threshold2

참고이 단계를 아는 것이 훨씬 복잡한 진행 상황을 해결하는 데 유용 할 수 있습니다. RPG 영역에서는 여기에서와 같이 선형 진행 외에 실제로 더 일반적인 분수 힘 또는 제곱 관계가 표시됩니다 (예 :

Level=XP5.0

XPLevel 100 이 공식은 OP의 특정 질문에 대답하는 가장 빠른 방법을 제공합니다.

편집 :이 수식은 정상적으로 작동 하며 OP의 요청에 따라 선형 임계 값 진행 으로 현재 level조건을 올바르게 출력합니다 . (이전 공식은 플레이어가 실수 인 레벨 0에서 시작했다고 가정하여 “level + 1″을 출력했습니다. 작은 조직에 글을 써서 점심 시간에 해결했습니다! 🙂XP


답변

그만큼 간단하고 일반적인 당신이 (당신이 할 경우, 당신이있어 초당 시간이 계산 수백만을 반복 할 필요가없는 경우 솔루션은 아마 뭔가 잘못하고), 루프를 사용하는 단지입니다 :

expLeft = playerExp
level = 1
while level < levelCap and expLeft >= 0:
    expLeft = expLeft - expToAdvanceFrom(level)
    level = level + 1

if expLeft < 0: level = level - 1     # correct overshoot

이 방법의 가장 큰 장점은 복잡한 수학을 필요로하지 외에, 그것은 작동한다는 것입니다 어떤 임의의 특급 당 수준의 기능. 원하는 경우 레벨 당 임의의 exp 값을 구성하여 테이블에 저장할 수도 있습니다.

더 이상한 해결책이 필요한 경우 각 레벨에 도달하는 데 필요한 비용을 미리 계산하고 테이블에 저장 한 다음 이진 검색을 사용하여 플레이어의 레벨을 찾을 수도 있습니다. 사전 계산에는 여전히 총 ​​레벨 수에 비례하는 시간이 걸리지 만 조회에는 레벨 수의 로그 에 비례하는 시간 만 필요 합니다.


답변

질문에 코드로 대답했지만 수학으로 대답해야한다고 생각합니다. 누군가 복사하여 붙여 넣기 대신 이해 하고 싶을 수도 있습니다 .

: 시스템이 되풀이 관계에 의해 쉽게 설명됩니다.

XP수평+1=XP수평+수평⋅문지방

XP

XP수평=(수평−1)⋅수평⋅문지방2

우리는 위해 해결할 수있는

수평

:

수평=⌊문지방2+8⋅XP⋅문지방2⋅문지방+12⌋

(정수로 잘라 내기, 플레이어가 필요하기 때문에 모든 얻기 위해 필요한 XP를 어떤 수준 업 보너스를)


답변

기본 대수를 사용하여 문제를 해결하는 한 가지 방법이 있습니다. 단계에 신경 쓰지 않으면 맨 아래로 건너 뜁니다.

한 가지 쉬운 점은 레벨이 주어지면 해당 레벨 을 얻는 데 필요한 n총 경험치 e입니다.

e = sum from k=1 to n of (t(k-1))

t용어는 예제에서 레벨 당 필요한 XP의 증가-50를 나타냅니다.

산술 시퀀스 공식을 사용하여 위의 문제를 해결할 수 있습니다 ( sum identity ).

e = t/2 * n(n-1)

그러나 우리는 반대의 공식을 원합니다. 플레이어의 레벨은 전체 경험이 주어집니다. 우리가 정말로하고 싶은 것은 레벨을 해결하는 것입니다 n. 먼저 용어를 그룹화합시다.

n^2 - n - 2e/t = 0

이제 2 차 공식을 사용할 수 있습니다.

n = (1 + sqrt(1+8e/t))/2

최종 방정식 :

level = 0.5 + sqrt(1 + 8*(total experience)/(threshold)) / 2

답변

여기에 관련된 모든 수학 은 모든 종류의 이유를 아는 것이 매우 중요 하며 그 중 일부는 게임 개발에 적용됩니다.

그러나

이것은 수학 사이트가 아닌 게임 개발 사이트입니다. 이러한 것들이 알고리즘 시리즈가 아니라 세트 로 어떻게 작동하는지 논의 해 봅시다. . 왜냐하면 실제로 판매하기 위해 개발할 게임의 레벨링에 적용되는 일종의 수학이기 때문입니다. 이것이 대부분의 레벨링의 기초가되는 시스템입니다. 시스템 (적어도 역사적으로).

플레이어는 기억하기 쉽고 시각화하기 쉬운 반올림 숫자를 선호하는 경향이 있으며, 플레이어가 Y 레벨로 나아 가기 위해 X 양의 xp가 필요한 레벨 기반 게임 시스템보다 더 중요한 곳은 없습니다.

라운드 숫자를 선택해야하는 두 가지 이유가 있습니다.

  • 레벨 경험 자체는 훌륭하고 둥근 숫자입니다. “100; 200; 1,000,000; 등”
  • 레벨 사이의 델타 는 플레이어가 눈으로보고 계산할 수 있는 또 다른 멋진 라운드 수인 경향이 있습니다 .

둥근 숫자는 즐겁습니다. 게임의 목적은 즐겁습니다. 유쾌함은 중요합니다. 특히 게임 딜레마는 디자인 상 유쾌하지 않은 경우가 많기 때문입니다.

이 점을 명심해야하는 이유는 무엇입니까?

대부분의 복합 계열 알고리즘은 좋은 둥근 숫자를 생성하지 않습니다.

대부분의 시리즈는 예쁜 시점에 멈추지 않습니다 (여기서 본 모든 대답은 영원히 계속됩니다). 그래서 우리는 무엇을합니까? 우리는 근사한 다음 게임 시스템에 적용 할 레벨 세트를 결정합니다. .

어떤 근사가 적절한 지 어떻게 알 수 있습니까? 우리는 게임 시스템 내에서 레벨링 포인트가 무엇인지 고려합니다.

대부분의 게임에는 레벨 캡이있어 어느 시점에서 시작됩니다. 이것이 가능한 몇 가지 방법이 있습니다.

  • 레벨 시스템은 플레이어가 완전한 게임 시스템을 배우도록 강요하는 집중된 방식으로 게임의 첫 단계를 통과 할 수 있도록하기 위해 레벨 시스템이 존재하는 비교적 초기에 발생합니다. 그들이 “완전히 자란”후에는 긴 게임이 시작됩니다.
  • XP의 난이도 vs 난이도는 어느 정도의 경제가 있습니다. 예, 레벨 한도가 있지만, 플레이어가 레벨링 차트의 절반 쯤에 게임을 완료 할 것으로 예상됩니다. 문자 / 클래스가 여러 개인 DQ / FF 스타일 RPG에서는 문자 클래스 당 각 레벨에 필요한 XP를 변경하는 것보다 다른 속도로 경험쌓아서 다른 문자 / 클래스를 쉽게 레벨링 할 수 있습니다 . 그렇게하면 플레이어는 귀여운 작은 반올림 숫자를 보편적 인 목표로 쉽게 기억할 수 있으며, 각 캐릭터가 게임 시스템에서 설정 한 임의의 속도 ( 또는 그 밖의 어떤 속도로)를 향해 진행한다는 것을 알 수 있습니다.XP + (XP * Modifier)
  • 레벨 캡은 외부 문자 범주를 기반으로합니다. 즉, 게임 시스템 외부의 일부 요소는 레벨 시스템의 모양을 결정합니다. 많은 게임이 P2P 게임이지만 무료 게임이기 때문에 더욱 일반적입니다. 무료 플레이어는 70 레벨에서 제한 될 수 있으며, 가입자는 80 레벨에서 제한 될 수 있으며, 일회성 구매는 일부 일반 캡 이상의 수준으로 누군가를 승진시킬 수 있습니다.
  • 레벨 캡은 보편적이며 어떤 식 으로든 게임 세계에 묶여 있습니다. 이 시스템은 와우에 의해 대중화되었습니다.
  • 다른 레벨 캡 시스템은 다른 플레이어보다 메이크업 월드에서 더 많은 시간을 낭비하여 플레이어에게 보상하는 것보다 똑똑하게 게임 플레이를 향상시키는 다른 레벨 캡 시스템입니다.

있습니다 거기에 어떤 수준의 캡없는 시스템이 알고리즘 결정되는 일부 게임 시스템. 일반적으로 이와 같은 시스템은 X-powers-of-Y 시스템을 사용하여 숫자가 빠르게 폭발하도록합니다. 따라서 L-1 레벨에 도달하는 것이 매우 쉬워지며, 대부분의 플레이어는 L 레벨에 도달하고 L + 1 레벨에 도달하기가 매우 어려울 것으로 예상되며 L + 2에 도달하기 전에 나이가 들면서 죽습니다. 이 경우 “L”은 플레이에 적합한 목표 레벨이며 일반적으로 시스템을 제한했을 것입니다. 그러나 사람들이 XP에 대한 좋은 아이디어를 영원히 생각할 수 있도록 옵션을 열어 둡니다. 이런 종류의 시스템에서 여기서 발견 된 수학은 완벽하게 이해됩니다. 그러나 실제 게임에서는 매우 좁고 거의 발생하지 않습니다.

그래서 우리는 무엇을합니까?

레벨과 XP를 계산 하시겠습니까? 아니요. 결정 수준과 XP를? 예.

어떤 레벨의 의미를 결정한 다음 사용 가능한 레벨 세트를 결정하십시오. 이 결정은 게임 시스템 내에서 세분성으로 귀결됩니다 ( 거대한 레벨 사이의 힘에 차이가 있습니까? 각 레벨이 새로운 능력을 부여합니까? 등)과 레벨이 게이팅 시스템으로 사용되는지의 여부에 따라 결정됩니다 ( “Ca n’t 레벨 10이 될 때까지 다음 마을로 가십시오. “

이에 대한 코드는 매우 간단하며 범위 결정입니다.

level(XP) when XP < 100  -> 1;
level(XP) when XP < 200  -> 2;
level(XP) when XP < 500  -> 3;
level(XP) when XP < 1000 -> 4;
% ...more levels...
level(XP) when XP > 1000000 -> 70. % level cap

또는 if 문, case 또는 if / elif 체인 또는 사용중인 언어가 지원하는 언어 (이 부분은 모든 게임 시스템에서 가장 흥미로운 요소입니다. Erlang 모드에 있고 위의 구문이 모든 사람에게 명확하지 않을 수도 있습니다.) :

level(XP) ->
    if
        XP < 100  -> 1;
        XP < 200  -> 2;
        XP < 500  -> 3;
        XP < 1000 -> 4;
        % ...more levels...
        XP > 1000000 -> 70 % level cap
    end.

놀라운 수학인가요? 아뇨 세트 요소 결정의 수동 구현입니까? 네. 그것이 전부입니다. 그리고 이것은 제가 수년 동안 대부분의 게임에서 실제로 해왔 던 방식과 거의 같습니다.

부수적으로, 이것은 플레이어가 경험을 얻을 때마다 수행 해서는 안됩니다 . 일반적으로 “XP to go”를 하나의 값으로 추적하고 플레이어가 “to go”값을 소진하거나 초과하면 (어떻게하든) 플레이어가 실제로 어디에 있는지 파악하기 위해이 값을 한 번 계산합니다. 에서 저장하고 다음 남은 “빼기”에서 남은 금액을 뺀 값을 계산하고 (XP를 전달할 수있는 경우) 반복하십시오.