php游戏,根据exp计算等级的公式

Posted

技术标签:

【中文标题】php游戏,根据exp计算等级的公式【英文标题】:php game, formula to calculate a level based on exp 【发布时间】:2011-10-20 18:11:05 【问题描述】:

我正在制作一个基于浏览器的 php 游戏,在我的玩家数据库中,它记录了玩家的总 EXP 或经验。

我需要的是一个公式,可以将该 exp 转换为 100 个级别或排名。

所以他们从 1 级开始,当他们达到 50 exp 时,转到第 2 级,然后当他们达到 125/150 时,进入第 2 级。

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

有人可以帮忙吗?我数学不太好:P

【问题讨论】:

【参考方案1】:

许多公式可能适合您的需求,具体取决于您希望所需 exp 上升的速度。

事实上,你真的应该让它可配置(或至少在一个中心位置轻松更改),以便你以后可以平衡游戏。在大多数游戏中,这些(和其他)公式仅在 playtesting 并尝试了几个选项之后才确定。

这里有一个公式:第一次升级发生在 50 exp; 150exp 第二;第三,300 exp;第四,500 exp;等等。换句话说,首先你必须收集50 exp,然后是100 exp,然后是150 exp,等等。这是一个Arithmetic Progression。

要升级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 个升级,也就是说 4 级。

【讨论】:

我会说这个公式非常适合练级。它的增长速度比几何级数要慢,在几何级数中,每个新级别都需要 X 倍的经验。这个进度保持了很好的平衡,感觉每个级别都比较难达到,但也不是不可能。但我认为你应该使用 Excel 或其他东西制作两个图表并自己查看。【参考方案2】:

如果您想要以下内容:

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是经验值

【讨论】:

我在X = 25 * L * L - 25 * L 上面的答案中的第一个等式给出了达到特定级别所需的经验点数 如果你想调平更慢,例如。达到2级需要100分,3级需要300分,4级需要600分,5级需要1000分,将上面等式中的所有25改为50。基本上,这 25 分应该是达到 2 级所需分数的一半。【参考方案3】:

这实际上取决于您希望每个级别的 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);

【讨论】:

这取决于你想要提供什么样的练级体验,以及等级上限。其他人已经提出了一种更线性的方法(算术级数),平方函数也一样好。我只是喜欢保持努力,不想达到 maxlevel 快吗?【参考方案4】:

Google 给了我这个:

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

【讨论】:

【参考方案5】:

这是我用于类似问题的快速解决方案。当然,您可能会想要更改数学,但它会为您提供总经验值的级别。

    $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);

【讨论】:

【参考方案6】:

我认为您正在寻找的是决定他们处于什么级别的经验量?如: 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;
     

这就像我可以为关卡制作一个算法一样简单,我还没有测试过它,所以可能会有错误。

如果你确实使用这个,请告诉我,想想我写的算法可能会在游戏中很酷!

【讨论】:

当我将高数作为 exp(例如 14554)放入该等式时,它不会输出一个级别。 哦,我会在 for 循环之后添加一个 if 语句,以防您超过了最大级别(设置为 100)。【参考方案7】:

原来的基数是 50,因此 25 分散在等式中。

这是一个真实方程式的答案。只需提供您的乘数(基数)和您的业务。

$_level = floor( floor( ($_multipliter/2)
                      + sqrt( ($_multipliter^2) + ( ($_multipliter*2) * $_score) ) 
                      ) 
                      / $_multipliter
               ) ;

【讨论】:

以上是关于php游戏,根据exp计算等级的公式的主要内容,如果未能解决你的问题,请参考以下文章

电容充电放电时间计算公式

PHP根据经纬度计算距离

根据出生年份计算年龄的公式,如何根据出生日期求年龄?

C#数学公式(用户EXP公式)

exp在mathtype中如何打出来

怎样根据身份证号码计算年龄?