我正在制作一个基于浏览器的PHP游戏,对于玩家,我的数据库中记录了其总经验值。
我需要的是将这个经验转化为等级或排名的公式,以100为最高分。
所以,他们从一级开始,当他们达到50点经验时,进入二级,然后当他们达到125/150点经验时,进入三级。
基本上,我需要一个公式来平稳地增加每个等级所需的经验值。
有谁能帮帮忙吗?我不太擅长数学 :P
我正在制作一个基于浏览器的PHP游戏,对于玩家,我的数据库中记录了其总经验值。
我需要的是将这个经验转化为等级或排名的公式,以100为最高分。
所以,他们从一级开始,当他们达到50点经验时,进入二级,然后当他们达到125/150点经验时,进入三级。
基本上,我需要一个公式来平稳地增加每个等级所需的经验值。
有谁能帮帮忙吗?我不太擅长数学 :P
X
,则需要25*X*(1+X)
经验值。
添加:要反过来得到它,您只需使用基本数学知识。像这样:y=25*X*(1+X)
0=25*X*X+25*X-y
这是一个标准的二次方程,你可以使用以下公式求解X:
X = (-25±sqrt(625+100y))/50
X = (sqrt(625+100y)-25)/50
例如,如果我们有300经验值,我们可以看到:
(sqrt(625+100*300)-25)/50 = (sqrt(30625)-25)/50 = (175-25)/50 = 150/50 = 3
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表示经验值。
X = 25 * L * L - 25 * L
给出了达到特定等级所需的经验值。 - Mike这取决于你希望每个级别的经验如何缩放。
假设
LvL1 : 50 Xp
Lvl2: LvL1*2=100Xp
LvL3: LvL2*2=200Xp
Lvl4: LvL3*2=400Xp
`XPn=base*Q^(n-1)`
在我的例子中,基础经验为初始的50 xp,Q为2(比率)。
假设玩家从1级开始没有经验:
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
$playerLevel=floor(log($playerXp/50+1,2));
但是,如果采用等比数列的方式,玩家升级会变得越来越困难。
要显示下一级所需的经验值,您只需计算下一级的总经验值即可。
$totalXpNextLevel=50*(pow(2,$playerLevel+1)-1);
$reqXp=$totalXpNextLevel - $playerXp;
检查帖子的开头: 要从等级1到等级2,需要50经验值 等级2到等级3需要100经验值
要从等级x到等级(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
这是我用于类似问题的快速解决方案。当然,您可能需要更改数学公式,但它将为您提供从总经验值中得出的等级。
$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);
$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
) ;