Плохая функция exp calc? - PullRequest
       12

Плохая функция exp calc?

0 голосов
/ 23 сентября 2011

Что не так с этой функцией?Когда я использую 31 для exp, эта функция становится бесконечным циклом!Как я могу это исправить?Пожалуйста, помогите и оптимизируйте эту функцию для меня, если можете, спасибо.

public function exp_calc($exp)
    {
        $level2 = 30; // Required EXP for 2nd level
        $current_lvl = 0; // Current level
        $level = 0; // Required EXP for next level

        while((int)$level <= $exp)
        {
            $level += $level2;
            $level2 *= 0.25;
            $current_lvl++;
        }

        if($current_lvl >= 80)
            $current_lvl = 80;

        return array ($current_lvl, (int)$level);
    }

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

$level2 *= 0.25;

 1   2     3
30 7.5 1.125

Я предполагаю, что вы имеете в виду * = 1,25, чтобы экспоненциально увеличить количество опыта, необходимого для следующего уровня:).

Текущая функция где-то ограничиваетниже 40, я думаю (получим немного исчисления для расчета лимита;)).

Редактировать;чтобы прояснить (так как я думал, что это еще не было):

первый уровень теперь требует всего 30 опыта;второй уровень требует 7,5 дополнительного опыта;всего 37,5 третьего уровня требует 1,125 опыта;всего 38,625 и т. д.

При использовании * = 1,25;количество опыта, необходимое для достижения следующего уровня, фактически увеличивается: 30 -> 37.5 -> 46.875 -> 58.594 -> etc

1 голос
/ 23 сентября 2011

Я не уверен, что вы хотите, чтобы результат был, но причина, по которой он становится бесконечным циклом, состоит в том, что на каждой итерации вы уменьшаете $ level2 (на четверть его размера), пока в итоге он практически не станет 0. Цикл не выйдет, пока $ level не станет равным (или равен) $ exp, что никогда не произойдет, если $ level2 станет 0. Без математики я предполагаю, что 31 - это порог, который никогда не может быть достигнут, так как $ level2 становится слишком маленьким увеличить на.

...