gpt4 book ai didi

php - Mimik 调平算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:55 25 4
gpt4 key购买 nike

我正在尝试模仿 Steam 调平系统的调平算法。

以下是关卡详情: http://steamcommunity.com/sharedfiles/filedetails/?id=457523080

When you get started, each badge you craft will increase your level. Most badges give 100 XP, and it takes 100 XP to get to the next level. The amount needed to level up increases every 10 levels, meaning after Steam Level 10 you'll need 200XP per level, after level 20 you'll need 300XP per level, etc.

我一直在尝试创建一段代码,以编程方式返回此数据的列表。

这是我目前所拥有的:

for ( $i = 0; $i <= 900; $i++ ) {

// $i = level.

$xp_per_level = (ceil($i / 10) * 10) * 10;

$xp = $i * $xp_per_level;

echo 'Level: ' . $i . ' - XP Rate: ' . $xp_per_level . ' - XP: ' . number_format($xp) ;

echo '<br />';
}

输出(与上面提供的级别详细信息相比不正确):

enter image description here

它返回的前 10 个级别的所有信息都是正确的,但之后的所有信息都有不正确的 xp 数量。我认为这是因为 xp_per_level 会根据之前的级别发生变化。

有办法解决吗?我数学不太好!

谢谢

最佳答案

让我们来看看例如30级的计算。

$i = 30 ->  
$xp_per_level = (ceil(30 / 10) * 10) * 10; ->
$xp_per_level = 300

到目前为止一切顺利....但现在使用 $xp = $i * $xp_per_level; 您的代码“假设”每个 级别达到 30 也花费了300xp -> 错误。
您可以简单地跟踪达到级别所需的先前 XP,然后只需添加下一级别所需的 XP,即在循环之前初始化 $xp=0;然后在循环内 $xp += $xp_per_level;
但是那有点无聊;-)
让我们看看每级XP变化点的XP

Level    0 , XP:      0
Level 10 , XP: 1000
Level 20 , XP: 3000
Level 30 , XP: 6000
Level 40 , XP: 10000
Level 50 , XP: 15000
Level 60 , XP: 21000
Level 70 , XP: 28000
Level 80 , XP: 36000
Level 90 , XP: 45000
Level 100 , XP: 55000

现在让我们试着弄清楚 10 与 1000 之间的关系,例如 20 与 3000 之间的关系等等。
让我们直接解决这个问题

Level    0 , XP:      0
Level 10 , XP: 1000 =level*100
Level 20 , XP: 3000 =level *150
Level 30 , XP: 6000 =level *200
Level 40 , XP: 10000 =level *250
Level 50 , XP: 15000 =level *300
Level 60 , XP: 21000 ...
Level 70 , XP: 28000
Level 80 , XP: 36000
Level 90 , XP: 45000
Level 100 , XP: 55000

嗯,该系数似乎每 10 级增加 50。让我们看看 - 我已经很久没有这样做了......我觉得自己已经年轻了 20 岁 - 我刚高中毕业 ;-)

XP[level%10==0] = (level/10 + 1) * 50 * level
= (level*50/10 + 50) * level
= level*level*50/10 + 50*level
= level*level*50/10 + (500*level/10)
= level*level*50+500*level/10
= level*level*50+500*level/10
= level*(level*50+500)/10
= level*(level*5+50)

将(两种方法:a)仅添加到以前的 XP b)计算 mod10 级别的 XP)放入看起来像的代码中

<?php
$xp = 0;
for ( $level = 0; $level <= 100; $level++ ) {
$xp_per_level = (ceil($level / 10) * 10) * 10;
$xp += $xp_per_level;

$calc_xp = $level*(($level*5)+50);
if ( $level%10===0 ) {
printf("Level %4d , XP: %6d, calc: %6d\r\n", $level, $xp, $calc_xp);
}
}

打印

Level    0 , XP:      0,  calc:      0
Level 10 , XP: 1000, calc: 1000
Level 20 , XP: 3000, calc: 3000
Level 30 , XP: 6000, calc: 6000
Level 40 , XP: 10000, calc: 10000
Level 50 , XP: 15000, calc: 15000
Level 60 , XP: 21000, calc: 21000
Level 70 , XP: 28000, calc: 28000
Level 80 , XP: 36000, calc: 36000
Level 90 , XP: 45000, calc: 45000
Level 100 , XP: 55000, calc: 55000

http://steamcommunity.com/sharedfiles/filedetails/?id=457523080 中的值相同
您会注意到方法 b) 仅适用于 %10===0 级别,例如对于 11 级 $calc_xp 将是 1155 而不是 1200...
我会把它留给你。您几乎可以像 +10 步骤一样解决这个问题。

关于php - Mimik 调平算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34482614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com