PHP网站用户XP和练级系统

时间:2011-04-01 12:36:07

标签: php mysql

所以我有一个用PHP和MYSQL编写的成员网站。

说一下,我想让我的用户升级为奖励系统,他们让XP从网站上做某些事情,比如发帖,什么不是。提供XP是一件容易的事情,我有点坚持的是调平将如何实际工作。

当有人加入时,它将自动处于lv 1.现在说它为lv x 2 for XP每次升级;

lv1 = 2 xp lv2 = 4 xp lv3 = 6xp lv4 = 8xp

如何将其纳入公式中,因此当达到XP时,它会针对某个LV,它会使用户升级并使所需的XP量增加一倍?

4 个答案:

答案 0 :(得分:1)

如果我们从0级开始,并且要求2 *级xp从level-1level(即:2 xp会让你达到1级,2 + 4总计会让你达到2级,等级为2 + 4 + 6等,然后我们有一个算术序列,总和等于(level/2) * (2 + (2*level))

进一步简化:

$total_xp_required = $level * (1 + $level);

现在,如果我们使用二次公式来解析level^2 + level + -xp = 0的{​​{1}},我们会得到level

正根将永远是我们想要的那个,所以在+/-中,我们只关心+。此外,非整数级别没有意义,因此将其转换为int。唯一的问题是,花车有点片状 - 数字可能会变得像1.99999999998或者不是2.0。我们可以在截断之前为数字添加一个微小的软糖因子。

level = (-1 ± sqrt(1 - 4*(-xp))) / 2

现在,如果你想每次都需要加倍xp,那就更容易了。比较级别1需要2 xp,级别2需要4,等级3需要8等等。然后,给定级别所需的总xp为$level = int((sqrt(1 + ($xp*4)) - 1) / 2 + .000000005);

2的幂是二进制的特例,2 ^ x可以用2 ^ level表示。

1 << x

要计算水平,有很多技巧。在数学上,级别是得分的log 2

$total_xp_required = 1 << $level;

或者按字符串,我们可以只计算数字的base-2表示中的位数。这里不需要软糖因素,因为花车永远不会出现在图片中。

$level = intval(log($xp) / log(2) + .000000005);

无论哪种方式,此时,由于我们可以从xp计算水平,反之亦然,你根本不需要存储水平 - 只需在需要时计算它。

答案 1 :(得分:0)

$ expRequired = 2 ^ $ level;

或 $ expRequired = 2 * $ level;

答案 2 :(得分:0)

公式: 你的样本:

//level => required XP to reach it 1 => 0; 2=>2; 3=>6; 4=>8....
$xpForNextLevel = ($currentLevel)*2;

每个级别后双倍需要xp

//level => required XP to reach it 1 => 0; 2=>2; 3=>4; 4=>8; 5=>16; 6=>32....
$xpForNextLevel = pow(2,$currentLevel);

编辑: 其中$ xpForNextLevel是达到下一级所需的xp总量,而不是此级别与下一级别之间的差异。

答案 3 :(得分:0)

我做了这样的练级和EXP系统,但是我的技能点更高级了。

        <?php
    $level_up = ($level + 1);
if ($exp >= $max_exp)
    {
    $sql = "UPDATE users SET level=(level + 1) , max_exp=(exp + 300) , skill_points=(skill_points + 3) WHERE id='".$id."' LIMIT 1";
    $res = mysql_query($sql);
        echo '<div class="Leveled">' . 'You sucessfully leveled up to ' . $level_up . '!' . ' As a reward you were given 3 skill points!' . '</div>';
    }
    else
    {
    } 
    ?>