0

我有这段代码循环 1 到 99 并且是一个公式。

function getExperienceByLevel ($maxLevel)
{
    $levels = array ();
    $current = 0;

    for ($i = 1; $i <= $maxLevel; $i++)
    {
        $levels[$i - 1] = floor ($current / 4);
        $current +=  floor($i+300*pow(2, ($i/9.75)));
    }

    return $levels;
}

首先你像这样启动它,$aLevels = getExperienceByLevel(99);然后看看你需要多少经验才能升级6你这样做,echo $aLevels[5];因为它是一个数组。

现在我正在尝试反向操作。通过经验获得等级。

function getLevelByExp($exp) 
{
    $aLevels = getExperienceByLevel(99);

    for ($i = 1; $i < 100; $i++)
    {
        if ($exp > $aLevels[$i-1]) 
        { 
            return $i;
        }
    }
}

所以我尝试这样做:

$aLevels = getExperienceByLevel(99);
echo getLevelByExp(131);

当被调用getLevelByExp(131);或内部的任何数字时,它似乎返回 a1即使它应该是2因为 3 级是167EXP 而 2 级是80EXP。这是一个参考图片:http: //i.imgur.com/gEYgu.png

4

5 回答 5

2
function getLevelByExp($exp) {
    $aLevels = getExperienceByLevel(99);

   for ($i = 99; $i >= 1; $i--)
    {
       if ($exp > $aLevels[$i-1])
        {
        return $i;
        }
    }  
}

只要 $exp > $aLevels[$i-1],您就会返回。在原始循环的第一次运行中,$aLevels[$i-1] = $aLevels[0] = 0,因此对于任何非负 $exp 值,它总是会立即返回。

于 2012-09-28T04:33:58.543 回答
1

你犯了两个错误:你索引你的级别数组错误。而你检查它的方式是错误的。用这个:

http://codepad.viper-7.com/MGpOUu

function getExperienceByLevel($maxLevel) {
    $levels = array ();
    $current = 0;
    for ($i = 1; $i <= $maxLevel; $i++) {
        $levels[$i] = floor ($current / 4);
        $current +=  floor($i+300*pow(2, ($i/9.75)));
    }
    return $levels;
}

function getLevelByExp($exp)  {
    $levels = getExperienceByLevel(99);
    $current = 0;
    foreach($levels as $level => $required) {
        if($required>$exp)return $current;
        $current = $level;
    }
    return $current;
}

echo getLevelByExp(131);

// returns 2
于 2012-09-28T04:40:14.037 回答
0

您需要相反的条件,并与下一个级别进行比较,因此您可以确定给定的 exp 级别不适合任何更高级别。这段代码对我有用:

if ($exp < $aLevels[$i])
{ 
    return $i;
}

很好很简单。试试看:http ://codepad.viper-7.com/FrjtHT

于 2012-09-28T04:34:22.037 回答
0

改变

if ($exp > $aLevels[$i-1]) 

if ($exp > $aLevels[$i-1] && $exp < $aLevels[$i]) 

检查并且它正在工作

工作示例http://codepad.viper-7.com/BjmHad

于 2012-09-28T04:37:36.610 回答
0

我认为你应该这样做

function getLevelByExp($exp)      
{     
    $aLevels = getExperienceByLevel(99);     

    for ($i = 1; $i < count($aLevels); $i++) 
    { 
        if ($exp >= $aLevels[$i-1] && ($exp - $aLevels[$i-1] < $aLevels[$i] - $aLevels[$i-1]))  
        {  
            return $i; 
        } 
    } 
}

查看http://www.phpfiddle.org/main/code/paw-08f

于 2012-09-28T04:44:11.787 回答