Как мне по-настоящему рассчитать уровень прогресса с помощью алгоритма? - PullRequest
4 голосов
/ 16 июня 2011

В моем приложении я получаю переменную $curxp, которая содержит int, теперь я хочу создать функцию, которая автоматически возвращает $xplvlup (которая содержит int, сколько всего XP требуется для следующего уровня, и функцию, которая возвращает текущий уровень.

Теперь я могу просто жестко закодировать операторы переключателей и вычисленные числа, например:

switch($curxp){
    case <10: $xplvlup = 10; break;
}

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

UPDATE

Благодаря Олтарусу я пришел к следующему решению:

$curxp = 20;

function level($lvl){
    return $xp = pow($lvl,2) + 5 * $lvl;
}

$lvl = 0;
while (level($lvl) < $curxp) $lvl++;
$totxp = level($lvl);
$xplvlup = level($lvl) - $curxp;

echo 'Level: '.$lvl."<br />";
echo 'Total XP: '.$totxp."<br />";
echo 'XP needed for Levelup: '.$xplvlup;

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Если, например, для первого уровня вам потребуется 500 очков опыта, а затем на каждом уровне вам понадобится на 10% больше опыта, вы можете сделать что-то вроде этого:

function xp_needed($cur_lvl){

    $start = 500;
    return   $start*pow(1.1,($cur_lvl-1));

}

Для каждого уровня xp рассчитывается как 500 * 1.1^(level-1)

Редактировать

Woops, $cur_lvl должно быть вычтено 1.

1 голос
/ 16 июня 2011

Я не знаю, как вы рассчитываете уровни, но, скажем, у вас есть функция level($n), которая возвращает количество XP, необходимое для того, чтобы иметь уровень $n.

$n = 0;
while (level($n) < $curxp) $n++;
$xplvlup = level($n) - $curxp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...