2012-09-27 67 views
1

我有這段代碼循環1到99,是一個公式。PHP通過級別獲得經驗

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) 
{ 
    $myLevel = 0; 
    $aLevels = getExperienceByLevel(99); 

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

當調用getLevelByExp(1124);或其中的任何數字時,它似乎返回零。但是,當你在迴應中加入回聲時似乎很有用。

贊,而不是return $myLevelecho "You are up to level $i<br />";,它會一直到您獲得EXP的當前級別。

但是,當我想簡單地返回一個數字時,仍然不起作用。

+0

關於這裏的設計的一個註釋......在這個函數的外部創建'$ aLeLevel'數組並將其作爲參數傳遞,比如'function getLevelByExp($ exp,$ aLeLevel)'可能更好。通過這種方式,您可以多次調用getLevelByExp,而不會增加重複getExperienceByLevel調用的額外開銷。它也將解耦這兩個函數,以便您可以對每個函數進行推理,而不必知道所有關於理解另一個函數的信息。 – grossvogel

回答

2

這似乎是工作比你更好地運作:

function getLevelByExp($exp) 
{ 
     $aLevels = getExperienceByLevel(99); 
     for ($i = 0; $i <= 99; ++$i) 
     { 
       //echo "cmp $exp >= aLevels[$i]={$aLevels[$i]}\n"; 
       if ($exp <= $aLevels[$i]) 
         return $i - 1; 
     } 
     return -1; 
} 

它需要改進例如當$exp爲零時。

+0

等級1是EXP 0到79 ...但是在做...說'getLevelByExp(50)'它輸出'0'時它應該是'1' ... – nn2

+0

@weka:我看到了假設輸出的正確性它使用的是坦克級近似。如果總是少一個,那麼將'return $ i - 1'改爲'return $ i'。 – wallyk

+0

啊,對。但是,然後做'回聲getLevelByExp(3145);'仍然說1,當它不應該... http://i.imgur.com/gEYgu.png – nn2

0

你永遠不會改變$myLevel,所以它總是會停留在0

,請返回$i代替$myLevel,爲$i實際上改變:

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

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

等級1是EXP 0到79 ...但是要說'getLevelByExp(50)'它應該是'1'時輸出'0' ... – nn2

+0

這是不對的。 '$ i'從'1'開始。 – Blender

+0

等一下。它沒有了。但是像'echo getLevelByExp(190)一樣做;'當它應該是'3'時仍然輸出'1' ... reff:http://i.imgur.com/gEYgu.png – nn2

1

返回$我,而不是因爲它總是 '0'

if ($exp > $aLevels[$i-1]) { 
     return $i; 
    } 
+0

「$ myLevel」你初始化了它 – Gautam3164

+0

我的代碼一定是錯誤的,因爲不管怎麼說...... getLevelByExp(11190);'outputs' 1'。 – nn2