【问题标题】:Calculating experience for a text-based RPG计算基于文本的 RPG 的经验
【发布时间】:2014-10-08 06:26:55
【问题描述】:

好的,使用at this question 上的答案,我能够生成以下代码来计算我正在开发的基于文本的 RPG 升级所需的经验。我会从一开始就说我的数学能力不是很好,所以请尽可能“低调”。

function calcExp($L) {
    if($L <= 5) { 
        //If Level 5 or less then just 12 exp per level
        return 12*$L;
    }
    if($L > 1000) {
        //If over level 1,000, we need to slow them down
        //add an additional 500k per level required
        $calc = $L - 1000;
        $c2 = 500000*$calc;
        return (5*$L*$L-5*$L)+$c2;
    }
    else {
        //otherwise, calculate as follows
        $exp = 5 * $L * $L - 5 * $L;
        return $exp;
    }
}

这会返回正确的经验量,现在我正试图弄清楚如何扭转这个过程,以便我可以checkLvl($EXPERIENCE) 并让它返回它应该处于的水平。

如果我要这样做

$level = 10;
$exp = 450;
$check = checkLvl($exp);
if($check != $level) { die('Unknown Error'); }
else { echo "Success!"; }

注意:上面的代码只是我想清楚。

我不知道如何扭转我造成的小混乱。

【问题讨论】:

  • 哇,几秒钟内就投了反对票。有什么特别的原因吗?
  • 你为你尝试过什么checkLvl方法?你能把 calcExp 的数学计算出来,然后解一个代数方程吗?
  • @BrianJ - 根据我链接类似 floor(12 + sqrt(12 * 12 - 4 * 12 * (-$exp) ))/ 12 的答案应该反转它,但不会甚至接近;加入我对 1000 所做的修改,我完全不知道如何扭转它。
  • @Solstice - 如果我明白你在寻找什么......你只需要对你所拥有的条件进行逆向工程。因此,您需要检查一下 XP 是否为 60 或更低;看看它是否超过(呃)4,995,000;然后进行适当的计算。
  • @andrewsi - 是的,我把它弄得太复杂了。想太多,睡眠不足哈哈谢谢!

标签: php algorithm


【解决方案1】:

你的前五个级别只有 12 个经验值,所以你可以反过来说前 60 个经验值 (5 * 12) 应该是 floor($exp / 12)

您的第二级范围是从 6 到 1000。因此,如果 exp 大于 60,但小于 1000 级所需的任何 exp,您将求解 $exp = 5 * $L * $L - 5 * $L 以获得 $L,这是一个二次方程。它看起来像$L = (5 + sqrt(25 - 4 * 5 * -$exp)) / (2 * 5)

1000 级以上的所有其他东西都应该解决类似的二次方程,$exp = (5 * $L * $L - 5 * $L) + 500000 * ($L - 1000) 用于 $L。它看起来像$L = ((5 + 500000) + sqrt((5 + 500000)^2 - 4 * 5 * (500000 - $exp))) / (2 * 5)

【讨论】:

  • 换句话说,我把它搞得太复杂了,得到了答案,而且太累了,看不到它。谢谢,在一杯新鲜的咖啡和你的逻辑之间,我明白了。 羞愧地低着头
  • 有时只需要一双全新的眼睛。最后一步是弄清楚你是否正在解决 6 到 1000 范围内的级别,我不想知道级别 1000 需要多少 exp。
  • 我写了一个while() 循环来为我做这件事,哈哈,最后我得到了checkLvl($current_experience,$current_level),只需运行calcExp($current_level) 看看它是否在范围内;如果 exp 比需要的多,升级...occam's razor 是最好的。
猜你喜欢
  • 1970-01-01
  • 2016-05-09
  • 2023-03-22
  • 2013-07-07
  • 2017-04-09
  • 2011-04-02
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多