我试图理解这个PHP函数所做的一切。游戏有这个代码,我试图确定每个级别的等级需要多少XP。
function xpToNextLevel($level){
if($level == 0){
return 200;
}
$s = 500;
$m = 0xFFFF * ($level / 98);
$xp = floor((($m - $s) * ($level / 98)) + $s);
return $xp;
}
谢谢!
答案 0 :(得分:1)
因此,让我们以数学方式简化公式。以下公式是不是 PHP代码,而是纯数学!
xp = ((65535 * (level / 98)) - 500) * (level / 98) + 500
......简化为......
xp = (65535 / 98^2) * level^2 - (500 / 98) * level + 500
... 大约等同于......
xp = 6.8 * level^2 - 5.1 * level + 500
正如你可以see,下一级所需的经验数量会按照上面的公式以二次方式增长。
答案 1 :(得分:1)
我认为查看其他人的代码(开源或获得许可)以更好地理解该语言非常棒。虽然我理解向下投票,但谷歌本来是一个很好的资源来解决这个问题,我会尽力解释它。
为了帮助解释它,我已经为你重写了一些代码。
function xpToNextLevel($level){
if($level == 0){
return 200;
}
$d = $level / 98;
$s = 500;
$m = 65535 * $d; /* 65535 is equivalent to 0xFFFF */
$k = $m - $s; /* takes (0xFFFF * ($level / 98)) - $s */
$dk = $k * $d; /* takes ($m - $s) * ($level/98) */
$unroundedXP = $dk + $s; /* adds (($m-$s) * ($level/98)) to $s */
$xp = floor($unroundedXP); /* rounds the experience down. */
return $xp;
}
所以,我知道你在评论中询问了4级。让我们来看看!
4 != 0 // thus we continue.
4/98 = 2/49 /*which is roughly ~0.04082, but for the sake of accuracy, I'll leave it as 2/49 */
65535 * (2/49) = ~2674.89795
2674.89795 - 500 = 2174.89795
2174.89795 * 2/49 = ~88.771345
88.771344 + 500 = 588.771344 //This is the unrounded experience
Experience = 588
floor函数基本上舍入到最小整数。在正数中,这意味着我们取数字并抛弃小数点后面的所有内容。所以返回的数字大约是588.我粗略地说,因为计算机更准确。
顺便说一句,我相信这与算术系列最相似。"有关这方面的更多信息,请访问:http://mathworld.wolfram.com/ArithmeticSeries.html