这是我的功能,
这意味着要获得用户级别所需的xp数量,直到下一级别,它只能通过级别1到2,但是如果输入级别3所需的xp则失败。
XP每级翻倍,因此从1级到2级是10,2到3是20,3到4是40等;
$ user ['xp']是一个更好解释的int,下面是函数返回不同值的一些示例。
7。 $ user ['xp'] == 30,级别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']);
答案 0 :(得分:4)
我认为您需要关注:将%=
替换为-=
:
$xpGot -= $xpNeeded;
答案 1 :(得分:3)
采取这一行
$xpGot %= $xpNeeded;
如果$ xpGot为15或45,则没有区别,% 10
仍将返回5.模数运算符将左操作数除以右并返回余数。
如@scessor建议的那样将其更改为-=
可能就是你要找的。 p>
答案 2 :(得分: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']);
?>