設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;code
//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; }