如果我知道它的价值$c_xp,我怎么能在$c_level不写100条if语句的情况下找到它.
Level XP
1 0-99
2 100
3 500 +400 xp points from last level
4 1000 +500 xp points from last level
5 1600 +600 xp points from last level
6 2300 +700 xp points from last level
7 3100 +800 xp points from last level
8 4000 +900 xp points from last level
Run Code Online (Sandbox Code Playgroud)
等等.
$c_level = ;
Run Code Online (Sandbox Code Playgroud)
如果我正确理解你的模式:
$c_level = floor((-1 + sqrt(1 + 4 * ($c_xp + 500) / 100 * 2)) / 2) - 1;
Run Code Online (Sandbox Code Playgroud)
您将添加100,然后是400,然后是500,600,700,800等.因为100种打破模式,我们暂时忽略它.
假设你正在追寻这种模式
Level XP
1 0-99
2 100-299
3 300-599
4 600-999
5 1000-1499
6 1500-2099
Run Code Online (Sandbox Code Playgroud)
这会更容易,因为增量为100,200,300等.100以下的任何东西都是1级.300以下的任何东西都是2级.600以下的任何东西都是3级.方便:
0+1=1 (hence 100)
0+1+2=3 (hence 300)
0+1+2+3=6 (hence 600)
Run Code Online (Sandbox Code Playgroud)
等等第四个.前x个整数的总和是0.5*x*(1 + x)= y,其中y是总和 - 见http://en.wikipedia.org/wiki/Summation.
在我们的例子中,我们有100倍的总和.我们可以简单地将XP除以100得到y,并使用二次公式求解x.如果XP为600,则级别为4.
600/100 = 6,和0.5*x*(1 + x)= 6.二次公式告诉我们x是3.我们必须在它上面使用floor()并加上1我无法解释的原因.长话短说,在500点以下缺乏模式进行调整,我们增加500和主题2到最终量的公式工作.