有人可以向我解释这个PHP功能吗?

时间:2014-03-20 17:42:15

标签: php

我试图理解这个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;
}

谢谢!

2 个答案:

答案 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