我正在制作一个基于浏览器的PHP游戏,并且在我的数据库中为玩家提供了该玩家总EXP或体验的记录。
我需要的是一个将exp转换为100级的等级或等级的公式。
所以他们从第1级开始,当他们点击时,50表示,进入第2级,然后当它们达到125/150时,第2级。
基本上是一个稳定地使每个级别更长的公式(更多exp)
有人可以帮忙吗?我不擅长数学:P
答案 0 :(得分:23)
许多公式可能会满足您的需求,具体取决于您希望所需exp的上升速度。
事实上,你真的应该让这个可配置(或至少在一个中心位置轻松改变),以便你以后可以平衡游戏。在大多数游戏中,这些(和其他)公式仅在playtesting
之后确定并尝试了几个选项。
这是一个公式:第一次升级发生在50 exp;第二个是150exp;第三名是300 exp;第四名,500分;换句话说,首先你必须收集50 exp,然后是100 exp,然后是150exp等。这是Arithmetic Progression。
对于levelup X
,您需要25*X*(1+X)
exp。
已添加:为了让它完全相反,您只需使用基本数学。像这样:
y=25*X*(1+X)
0=25*X*X+25*X-y
这是标准的Quadratic equation,您可以使用以下方法解决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个 levelup ,因此这意味着第4级。
答案 1 :(得分:7)
如果您想要以下内容:
将经验(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是经验值
答案 2 :(得分:4)
这实际上取决于您希望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开始而没有xp:
when he dings lvl2 he would have 50 total Xp
at lvl3 150xp
at lvl4 350xp
等等 玩家获得新等级时所拥有的总xp将是:
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);
答案 3 :(得分:2)
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
答案 4 :(得分:0)
我认为你正在寻找的是确定他们所处水平的经验数量?如: 等级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;
}
}
这就像我可以为级别制作算法一样简单,我没有测试它,所以可能会有错误。
如果你确实使用了这个,请告诉我,很酷的想法我写的算法可能在游戏中!
答案 5 :(得分:0)
原作是基于50的基础,因此25分散在等式中。
这是一个真正的等式的答案。只需提供您的乘数(基数)和您的业务。
$_level = floor( floor( ($_multipliter/2)
+ sqrt( ($_multipliter^2) + ( ($_multipliter*2) * $_score) )
)
/ $_multipliter
) ;