我正在制作一个基于浏览器的 PHP 游戏,并在我的玩家数据库中记录了玩家的总 EXP 或经验。
我需要的是一个公式,可以将该 exp 转换为 100 个级别或等级。
所以他们从 1 级开始,当他们达到 50 exp 时,进入第 2 级,然后当他们达到 125/150 时,进入第 2 级。
基本上是一个稳定地使每个级别更长的公式(更多经验)
任何人都可以帮忙吗?我数学不是很好:P
我正在制作一个基于浏览器的 PHP 游戏,并在我的玩家数据库中记录了玩家的总 EXP 或经验。
我需要的是一个公式,可以将该 exp 转换为 100 个级别或等级。
所以他们从 1 级开始,当他们达到 50 exp 时,进入第 2 级,然后当他们达到 125/150 时,进入第 2 级。
基本上是一个稳定地使每个级别更长的公式(更多经验)
任何人都可以帮忙吗?我数学不是很好:P
许多公式可能适合您的需求,具体取决于您希望所需 exp 上升的速度。
事实上,你真的应该让它可配置(或者至少在一个中心位置很容易改变),这样你就可以在以后平衡游戏。在大多数游戏中,这些(和其他)公式只有在playtesting
尝试了几个选项后才确定。
这是一个公式:第一次升级发生在 50 exp;150exp 第二;第三,300 exp;第四,500 exp;等等。换句话说,首先你必须收集 50 exp,然后是 100 exp,然后是 150exp,等等。这是一个算术级数。
对于levelup X
,你需要25*X*(1+X)
exp。
补充:要反过来,您只需使用基本数学即可。像这样:
y=25*X*(1+X)
0=25*X*X+25*X-y
这是一个标准的二次方程,您可以通过以下方式求解 X:
X = (-25±sqrt(625+100y))/50
现在,由于我们希望 X 和 Y 都大于 0,我们可以放弃其中一个答案,剩下的是:
X = (sqrt(625+100y)-25)/50
因此,例如,如果我们有 300 exp,我们会看到:
(sqrt(625+100*300)-25)/50 = (sqrt(30625)-25)/50 = (175-25)/50 = 150/50 = 3
现在,这是第 3级升级,也就是说第 4 级。
如果您想要以下内容:
经验 (X) 与水平 (L) 相关的方程为:
X = 25 * L * L - 25 * L
要计算给定体验的级别,请使用二次方程得到:
L = (25 + sqrt(25 * 25 - 4 * 25 * (-X) ))/ (2 * 25)
这简化为:
L = (25 + sqrt(625 + 100 * X)) / 50
然后使用 floor 函数四舍五入得到最终公式:
L = floor(25 + sqrt(625 + 100 * X)) / 50
其中L是等级,X是经验值
这实际上取决于您希望 exp 如何针对每个级别进行扩展。比方说
LvL1 : 50 Xp
Lvl2: LvL1*2=100Xp
LvL3: LvL2*2=200Xp
Lvl4: LvL3*2=400Xp
这意味着你有一个几何级数完成第 n 级所需的 Xp 将是
`XPn=base*Q^(n-1)`
在我的示例中,基数是初始 50 xp,Q 是 2(比率)。
假设玩家从 lvl1 开始且没有经验:
when he dings lvl2 he would have 50 total Xp
at lvl3 150xp
at lvl4 350xp
以此类推 玩家升级新等级时的总经验值是:
base*(Q^n-1)/(Q-1)
在您的情况下,您已经知道玩家有多少 XP。对于 2 的比率,公式变得更简单:
base * (2^n-1)=total xp at level n
要找出给定 xp 数量的级别,您需要做的就是应用一个简单的公式
$playerLevel=floor(log($playerXp/50+1,2));
但是随着几何级数的增长,玩家升级的难度会越来越大。
要显示下一级别所需的 XP,您只需计算下一级别的总 XP。
$totalXpNextLevel=50*(pow(2,$playerLevel+1)-1);
$reqXp=$totalXpNextLevel - $playerXp;
检查帖子的开头:要从 lvl1 -> lvl2 你需要 50 xp lvl2 -> lvl3 100xp
从 lvl x 到 lvl(x+1) 你需要
$totalXprequired=50*pow(2,$playerLevel-1);
谷歌给了我这个:
function experience($L) {
$a=0;
for($x=1; $x<$L; $x++) {
$a += floor($x+300*pow(2, ($x/7)));
}
return floor($a/4);
}
for($L=1;$L<100;$L++) {
echo 'Level '.$L.': '.experience($L).'<br />';
}
它应该是 RuneScape 使用的公式,您也许可以根据您的需要对其进行修改。示例输出:
Level 1: 0
Level 2: 55
Level 3: 116
Level 4: 184
Level 5: 259
Level 6: 343
Level 7: 435
Level 8: 536
Level 9: 649
Level 10: 773
这是我用于类似问题的快速解决方案。当然,您可能会想要更改数学,但它会给您一个总和 xp 的级别。
$n = -1;
$L = 0;
while($n < $xp){
$n += pow(($L+1),3)+30*pow(($L+1),2)+30*($L+1)-50;
$L++;
}
echo("Current XP: " .$xp);
echo("Current Level: ".$L);
echo("Next Level: " .$n);
我认为您正在寻找的是决定他们处于什么级别的经验量?如: 1级:50exp 2级:100exp 3级:150exp ?
如果是这种情况,您可以使用类似的循环:
$currentExp = x;
$currentLevel;
$i; // initialLevel
for($i=1; $i < 100; $i *= 3)
{
if( ($i*50 > $currentExp) && ($i < ($i+1)*$currentExp)){
$currentLevel = $i/3;
break;
}
}
这就像我可以为级别制作算法一样简单,我还没有测试过它,所以可能会有错误。
让我知道你是否使用它,想想我写的算法可能在游戏中很酷!
原版是基于 50 的基数,因此 25 分散在等式中。
这是一个真实方程式的答案。只需提供您的乘数(基数)和您的业务。
$_level = floor( floor( ($_multipliter/2)
+ sqrt( ($_multipliter^2) + ( ($_multipliter*2) * $_score) )
)
/ $_multipliter
) ;