我正在制作一个基于浏览器的PHP游戏,在我的数据库中的球员,它有一个球员的总经验或经验的记录。
我需要的是一个公式,以转换为一个级别或排名,从100。
所以他们从第一级开始,当他们点击50exp时,进入第二级,然后当他们达到125/150,第二级。
基本上是一个稳定地使每个关卡更长的公式(更多经验)
有人能帮上忙吗?我数学不是很好。
发布于 2011-08-05 18:56:04
这真的取决于您希望exp如何针对每个级别进行扩展。比方说
LvL1 : 50 Xp
Lvl2: LvL1*2=100Xp
LvL3: LvL2*2=200Xp
Lvl4: LvL3*2=400Xp
这意味着你有一个几何级数,完成级别n所需的Xp是
`XPn=base*Q^(n-1)`
在我的示例中,基数是初始的50XP,Q是2(比率)。
假设玩家在没有xp的情况下从lvl1开始:
when he dings lvl2 he would have 50 total Xp
at lvl3 150xp
at lvl4 350xp
以此类推,当玩家达到新的级别时,他拥有的总经验将是:
base*(Q^n-1)/(Q-1)
在你的例子中,你已经知道玩家有多少经验。当比率为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);
发布于 2011-08-05 19:59:06
谷歌给了我这个:
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
发布于 2012-07-27 19:58:44
这是我用来解决类似问题的快速解决方案。当然,您可能想要更改数学,但它将为您提供总和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);
https://stackoverflow.com/questions/6954874
复制相似问题