我在数学上非常糟糕,我无法计算以下内容..
我有两列名为experience
和level
。
如果experience
超过200,则level
正在更新为1
如果experience
超过500,则level
正在更新为2
.... 我的意思是我从未重置experience
。
所以,我有一个加载条图像,我必须计算百分比的长度。我试过这样的事情
function lvlbar($xp, $level){
if($level == 0)
{
$percent = @round(($xp / 200)*100);
}
elseif($level == 1){
$percent = @round(($xp / 500)*100);
}
elseif($level == 2){
$percent = @round(($xp / 900)*100);
}
elseif($level == 3){
$percent = @round(($xp / 1400)*100);
}
elseif($level == 4){
$percent = @round(($xp / 1900)*100);
}
elseif($level == 5){
$percent = @round(($xp / 2500)*100);
}
elseif($level == 6){
$percent = @round(($xp / 3200)*100);
}
elseif($level == 7){
$percent = @round(($xp / 4000)*100);
}
elseif($level == 8){
$percent = @round(($xp / 4900)*100);
}
elseif($level == 9){
$percent = @round(($xp / 5800)*100);
}
elseif($level == 10){
$percent = @round(($xp / 6800)*100);
}
return $percent;
}
当你处于等级1
以下时它工作正常但是一旦你达到等级2
计算出错,百分比从50,60开始等等。
我想这是我的公式。帮帮我
答案 0 :(得分:2)
你的概念看起来不错,但有一点点错误。体验栏需要为每个级别重置。例如,当经验为350时,您希望显示50%。
这意味着,你的公式是:
下一级别的百分比=当前级别的经验/升级到下一级所需的经验
再次举例:
当经验为350 =(350 - 200)/(500 - 200)= 50%时,百分比为2级
答案 1 :(得分:1)
我没有完全解决问题,因此无法提出确切的解决方案。但肯定是杂乱的重复代码!我认为你划分的那个数字会在同一时间递增。因此,如果不确切知道它是做什么的,那就像:
function goUpLevel(){
$level++;
$experienceMax = $level * $experienceLevelMultiplier;
}
然后你发布的功能会更简单,例如:
function lvlbar($xp, $level){
$percent = @round(($xp / $experienceMax)*100);
}
如果你无法找出$ experienceLevelMultiplier的乘数,那么可能是每个级别的值数组,即
$experienceLevelMultiplierArray = array (
1 => 10
2 => 15.5
);
这看起来更好,更好地扩展,更易于管理和理解!如果你描述一下问题的背景,我肯定会有所帮助!
免责声明:我很长时间没有完成PHP,所以请忽略任何错误。我正在传达一个想法,而不是一个确切的解决方案。
答案 2 :(得分:1)
这就是我要做的事情。正如之前的海报提到的那样,你必须在升级时调整xp。
function lvlbar($xp, $level){
$levels = array(
0 => 200,
1 => 500,
2 => 900,
3 => 1400,
4 => 1900,
5 => 2500,
6 => 3200,
7 => 4000,
8 => 4900,
9 => 5800,
10 => 6800
);
if (array_key_exists($level, $levels)) {
$lastlevelXp = !empty($levels[$level-1]) ? $levels[$level-1] : 0;
$adjustedXp = $xp - $lastlevelXp;
$adjustedLevelMax = $levels[$level] - $lastlevelXp;
$percent = round(($adjustedXp / $adjustedLevelMax)*100);
}
return !empty($percent) ? $percent : 0;
}
示例输出:
Level 0 with 95xp: 48%
Level 1 with 370xp: 57%
Level 2 with 640xp: 35%
Level 3 with 1150xp: 50%
Level 4 with 1405xp: 1%
Level 5 with 2400xp: 83%
Level 6 with 3180xp: 97%
Level 7 with 3999xp: 100%
答案 3 :(得分:0)
如果你的问题是3级,请查看你的数学条件:
elseif($level == 3){
$percent = @round(($xp / 1400)*100);
}
如果您说的话,如果$ xp = 900,请使用计算器并将其除以1400,如上面的计算所示。
然后将结果乘以100,并且舍入结果为64%,因此数学正确返回,这只是错误的等式。
答案 4 :(得分:0)
如果您希望百分比栏回到0(不包括以前在栏中的经验),您需要减去上一级别的金额。
另外,我建议使用开关()。
试试这个:
function lvlbar($xp, $level){
switch($level) {
case 0:
$percent = @round(($xp / 200)*100);
case 1:
$percent = @round((($xp - 200) / 500)*100);
case 2:
$percent = @round((($xp - 500) / 900)*100);
case 3:
$percent = @round((($xp - 900) / 1400)*100);
case 4:
$percent = @round((($xp - 1400) / 1900)*100);
case 5:
$percent = @round((($xp - 1900) / 2500)*100);
case 6:
$percent = @round((($xp - 2500) / 3200)*100);
case 7:
$percent = @round((($xp - 3200) / 4000)*100);
case 8:
$percent = @round((($xp - 4000) / 4900)*100);
case 9:
$percent = @round((($xp - 4900) / 5800)*100);
case 10:
$percent = @round((($xp - 5800) / 6800)*100);
}
return $percent;
}