2011-10-29 95 views
0

這裏是我的功能,爲什麼這個功能在php中不起作用?

這意味着要獲得用戶級別所需的xp數量,直到下一級別,它工作,但只能通過級別1到2,然後如果輸入了級別3所需的xp它失敗。

XP每層次翻一番,所以從1級到2級是10級,2級到3級是20級,3級到4級是40級等;

$ user ['xp']是一個更好的解釋的int,下面是一些函數返回不同值的例子。

  1. $用戶[ 'XP'] == 1,級別1,xpGot 1,xpNeeded 9,10%
  2. $用戶[ 'XP'] == 5,級別1,xpGot 5,xpNeeded 5 ,50%
  3. $ user ['xp'] == 9,level 1,xpGot 9,xpNeeded 1,90%
  4. $ user ['xp'] == 10,level 2,xpGot 0,xpNeeded 20 ,0%
  5. $ user ['xp'] == 15,level 2,xpGot 5,xpNeeded 15,25%
  6. $ user ['xp'] == 29,level 2,xpGot 19,xpNeeded 1 ,95%

7. $ user ['xp'] == 30,level 2,xpGot 0,xpNeeded 0,0% 它在那裏失敗。

function calculateLevel($xpGot) { 
    $level = 1; 
    $xpNeeded = 10; 

    while ($xpGot >= $xpNeeded) { 
     $level++; 
     $xpGot %= $xpNeeded; 
     $xpNeeded *= 2; 
    } 

    if ($xpGot < $xpNeeded) { 
     $xp = $xpGot/$xpNeeded * 100; 
     echo '<p>Level: ' . $level . '</p>'; 
     echo '<div class="displayBarWrap" title="' . $xpGot . '/' . $xpNeeded . ' XP (' . $xp . '%)"> 
       <p>XP:</p> 
      <div class="displayBar"><div style="width: ' . $xp . '%;"></div></div></div>'; 
    } 
} 

calculateLevel($user['xp']); 
+3

什麼'$ user ['xp']'的值? – rocketscientist

+1

它如何「失敗」? – animuson

+0

編輯的問題。 – cgweb87

回答

4

我想你想要以下:%=-=取代:

$xpGot -= $xpNeeded; 
+0

這是有效的,但如果用戶一次性升級2級,那麼它是否會將每個級別的剩餘部分餘數提高?那正是我試圖用modolus實現的嗎? – cgweb87

+0

不能提你的答案,不投票你;)+1 –

+0

但它現在失敗,如果我得到1xp,它會把所有東西都丟到大聲笑 – cgweb87

3

走這條線

$xpGot %= $xpNeeded; 

沒有區別,如果$ xpGot是15或45,% 10仍然會返回5.模運算由右分左操作,並返回餘。

更改爲-=作爲@scessor建議可能是你在找什麼。

+0

+1爲更好的解釋:-) – scessor

0

與修訂別人提到和回聲可能的錯誤,這個工作對我來說:

<?php 
    function calculateLevel($xpGot) { 
     $level = 1; 
     $xpNeeded = 10; 

     if ($xpGot < $xpNeeded) /* NEW! */ 
      return; 

     while ($xpGot >= $xpNeeded) { 
      $level++; 
      $xpGot -= $xpNeeded; /* FIXED (other answers!) */ 
      $xpNeeded *= 2; 
     } 
     if ($xpGot < $xpNeeded) { 
      $xp = $xpGot/$xpNeeded * 100; 
      echo '<p>Level: ' . $level . '</p>'; 

      /* FIXED ? */ 
      echo '<div class="displayBarWrap" title="' . $xpGot . '/' . $xpNeeded . ' XP (' . $xp . '%)"> <p>XP:</p> <div class="displayBar"><div style="width: ' . $xp . '%;"></div></div></div>'; 
     } 
    } 

    calculateLevel($user['xp']); 

?> 
+0

試試它的值爲1000,它不會超過我的第2級,使用wamp php 5.3.5 – cgweb87

+0

您還需要使用其他人發佈的修復程序。'$ xpGot - = $ xpNeeded;' – Smamatti

+0

現在已經排序謝謝:) – cgweb87

相關問題