Расчет постоянно растущей стоимости

Я хотел бы быть в состоянии сделать расчет в php, используя количество очков опыта (XP) в качестве базы для возврата значения уровня. Я хочу, чтобы каждому уровню становилось все труднее расти. Как это:

0-49 XP = Level 1
50-104 XP = Level 2
105-164 XP = Level 3
165-229 XP = Level 4 etc.

Для достижения уровня 2 требуется 50 XP. Чтобы достичь уровня 3, требуется еще 55 XP. Чтобы достичь уровня 4, нужно еще 60 XP и так далее.

Еще больше я хотел бы иметь возможность отображать количество XP, необходимое для достижения следующего порога.

Я понятия не имею, что искать, чтобы решить мою задачу. Я надеюсь, что вы можете помочь.

Заранее спасибо.

-7

Решение

Ваша структура очков не совпадает с вашим предложением.

Поэтому я отвечу:

Для достижения уровня 2 требуется 50 XP. Для достижения уровня 3 еще 55 XP
необходимо. Чтобы достичь уровня 4, нужно еще 60 XP и так далее.

<?php
$get_level = function () {
foreach (range(0, 300, 50) as $difficulty => $base) {
yield [$base + ($difficulty * 5) => 'Level '.($base / 50)];
}
};

foreach ($get_level() as $base => $level) {
echo print_r($level, true);
}

Результат:

Array
(
[0] => Level 0
)
Array
(
[55] => Level 1
)
Array
(
[110] => Level 2
)
Array
(
[165] => Level 3
)
Array
(
[220] => Level 4
)
Array
(
[275] => Level 5
)
Array
(
[330] => Level 6
)
2

Другие решения

Математика для расчета XP довольно проста:

XP = ∑50+5*(level-1)
= 5*∑10+(level-1)
= 5*∑9+level
= 5*(∑9 + ∑level)
= 5*(9*level + ∑level)

Сумму по натуральным числам можно посмотреть в каждой книге по математике или даже в Википедии.

0

В Python (я не очень хорошо знаю PHP :():

levelBoundaries = []
for i in range(number_of_levels_you_want): ## Loop through for all levels

level = len(levelBoundaries) + 1 ## Get the Level NumberlevelArr = [] ## Create the list for the level boundary
## The formula for your list is 2.5n^2 + 42.5n - 45
## The level boundary for level n is [Term n, (Term (n+1)) - 1]
## This is what has been done below
levelArr.append((2.5 * (level ** 2)) + (42.5 * level) - 45)
level += 1
levelArr.append( (2.5 * (level ** 2)) + (42.5 * level) - 45 - 1)
levelBoundaries.append(levelArr)
-1