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);、レベルに到達するために必要なEXPを確認するには、配列であるため6これを行います.echo $aLevels[5];

今、私は逆のことをしようとしています。EXPでレベルアップ。

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);

レベル 3 がEXP、レベル 2 がEXP であるため、呼び出されると、getLevelByExp(131);または内部の任意の番号が返される1はずですが、返されるようです。参考画像はこちら:http: //i.imgur.com/gEYgu.png216780

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

あなたは2つの間違いを犯しています.levels配列に間違ったインデックスを付けています。そして、あなたはそれを間違った方法でチェックしています。これを使って:

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 に答える