所以我有一个用PHP和MYSQL编写的成员网站。
说一下,我想让我的用户升级为奖励系统,他们让XP从网站上做某些事情,比如发帖,什么不是。提供XP是一件容易的事情,我有点坚持的是调平将如何实际工作。
当有人加入时,它将自动处于lv 1.现在说它为lv x 2 for XP每次升级;
lv1 = 2 xp lv2 = 4 xp lv3 = 6xp lv4 = 8xp
如何将其纳入公式中,因此当达到XP时,它会针对某个LV,它会使用户升级并使所需的XP量增加一倍?
答案 0 :(得分:1)
如果我们从0级开始,并且要求2 *级xp从level-1
到level
(即: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
{
}
?>