设Xn为n级所需经验值,令An=Xn+1-Xn;则An为等差数列
X1=3; X2=7;
A1=X2-X1=4;
An=A1+(n-1)d =n+3;
Sn=(A1+An)n/2=(n+7)n/2;
Xn=(Xn-Xn-1)+(Xn-1-Xn-2)+...(X2-X1)+X1=Sn-1+X1=(n+6)(n-1)/2+3;
(n+6)(n-1)-2Xn+6=0;
n²+5n-2Xn=0;
n=(-5+根号(25+8*Xn))/2;
//echo getLevelByXP(100000);
echo "\r\n";
echo getLevelByXP2(100000);
function getLevelByXP($xp){
return floor((-5+sqrt(25+8*$xp))/2);
}
function getLevelByXP2($xp){
$level=1;
$j=1;//起始经验值 间隔值
$min=3;
$i=1;//等级
$before=0;//上一级经验值
for($i=1;$i<100;$i++){
$j+=1;
$j=$j>7?7:$j;
$before=$before==0?$min:$before+$j;
if($xp>=$before){
$level=$i;
}
// echo "Level=",$i,"XP=",$before;
//echo "\r\n";
}
return $level;
}