php游戏,基于exp计算级别的公式

时间:2011-08-05 10:25:24

标签: php game-development

我正在制作一个基于浏览器的PHP游戏,并且在我的数据库中为玩家提供了该玩家总EXP或体验的记录。

我需要的是一个将exp转换为100级的等级或等级的公式。

所以他们从第1级开始,当他们点击时,50表示,进入第2级,然后当它们达到125/150时,第2级。

基本上是一个稳定地使每个级别更长的公式(更多exp)

有人可以帮忙吗?我不擅长数学:P

6 个答案:

答案 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)

如果您想要以下内容:

  • 等级1 @ 0分
  • 等级2 @ 50分
  • 等级3 @ 150分
  • 等级4 @ 300点
  • 等级5 @ 500分等。

将经验(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
               ) ;