我正在製作一個基於瀏覽器的PHP遊戲,並且在我的數據庫中爲玩家記錄了該玩家的總體EXP或經驗。php遊戲,公式來計算基於exp的水平
我需要的是一個公式到EXP轉化爲一個級別或等級,出了100
於是他們開始在1級,並且當他們擊中說,50 EXP,進入2級,然後當他們擊中也許125/150,2級
基本上是一個公式,穩步使得每個級別較長的(更EXP)
誰能幫助?我不擅長數學:P
我正在製作一個基於瀏覽器的PHP遊戲,並且在我的數據庫中爲玩家記錄了該玩家的總體EXP或經驗。php遊戲,公式來計算基於exp的水平
我需要的是一個公式到EXP轉化爲一個級別或等級,出了100
於是他們開始在1級,並且當他們擊中說,50 EXP,進入2級,然後當他們擊中也許125/150,2級
基本上是一個公式,穩步使得每個級別較長的(更EXP)
誰能幫助?我不擅長數學:P
許多公式可能適合您的需求,具體取決於您希望所需exp的上升速度。
事實上,你真的應該做到這一點(或者至少在一箇中心位置很容易改變),以便以後可以平衡遊戲。在大多數遊戲中,這些(以及其他)公式僅在playtesting
之後確定並嘗試了幾個選項。
這裏有一個公式:第一級升級發生在50 exp;第二次在150exp;第三在300 exp;第四次在500 exp;換句話說,首先你必須收集50 exp,然後是100 exp,然後是150exp等。這是一個Arithmetic Progression。
對於levelup X
那麼你需要25*X*(1+X)
exp。
加了:爲了得到它,只需使用基礎數學。就像這樣:
y=25*X*(1+X)
0=25*X*X+25*X-y
這是一個標準的Quadratic equation,你可以解決X:現在
X = (-25±sqrt(625+100y))/50
,因爲我們希望X和Y是大於0,我們可以刪除的一個問題的答案,只剩下:
X = (sqrt(625+100y)-25)/50
因此,舉例來說,如果我們有300 EXP,我們看到:
(sqrt(625+100*300)-25)/50 = (sqrt(30625)-25)/50 = (175-25)/50 = 150/50 = 3
現在,這是第3 的LevelUp,所以這意味着4級
謝謝,但是我說我只有人物EXP變量,並且我想把它放到一個等式中,並且它會返回一個等級號。我會怎麼做? – user880356
我會說這個公式對於練級非常好。它的增長速度比幾何學的緩慢,每個新的水平需要X倍的經驗。這種進步保持着良好的平衡,並且感覺每個等級都更難實現,但並非不可能。但我認爲你應該使用Excel或其他東西來製作兩張圖,然後看看你自己。 –
其實,150/5 = 30 –
我想你要找的是什麼的經驗來決定他們是在什麼樣的水平是多少?如: 級別1:50exp 級別2:100exp 級別3:150exp?
如果這是你可以使用一個循環是這樣的情況:
$currentExp = x;
$currentLevel;
$i; // initialLevel
for($i=1; $i < 100; $i *= 3)
{
if(($i*50 > $currentExp) && ($i < ($i+1)*$currentExp)){
$currentLevel = $i/3;
break;
}
}
這很簡單,只要我可以爲水平的算法,我沒有測試過所以有可能是錯誤的。
讓我知道如果你真的使用這個,酷想認爲我寫的算法可以在遊戲中!
當我把高數字作爲exp(例如,14554),然後它不輸出一個級別。 – user880356
哦,如果你已經超過了最高級別(設置爲100),我會在for循環之後添加一個if語句。 – John
這實際上取決於你想如何按比例縮放每個級別。 假設
LvL1 : 50 Xp
Lvl2: LvL1*2=100Xp
LvL3: LvL2*2=200Xp
Lvl4: LvL3*2=400Xp
這意味着你有一個幾何級數來完成n級所需 Xp的將是
`XPn=base*Q^(n-1)`
在我的例子鹼是inital 50 xp和Q是2-(比率) 。
提供了一個玩家開始在LVL1沒有XP:
when he dings lvl2 he would have 50 total Xp
at lvl3 150xp
at lvl4 350xp
等 總XP時,他得到了玩家一個新的水平達到是:
base*(Q^n-1)/(Q-1)
在你如果你已經知道玩家擁有多少xp。對於2:1的比例的公式變得更簡單:
base * (2^n-1)=total xp at level n
找出給定XP量,所有你需要做的是應用一個簡單的公式
$playerLevel=floor(log($playerXp/50+1,2));
水平,但以幾何級數它對於玩家來說會變得越來越難。
要顯示下一級所需的XP,您可以計算下一級的總XP。
$totalXpNextLevel=50*(pow(2,$playerLevel+1)-1);
$reqXp=$totalXpNextLevel - $playerXp;
檢查後開始: 從LVL1得到 - > LVL2需要50 XP LVL2 - > LVL3 100xp
從拉特X到拉特(X + 1) 你會需要
$totalXprequired=50*pow(2,$playerLevel-1);
謝謝你,完美:D 有無論如何,我可以做一個循環來顯示每個級別的EXP要求列表? – user880356
也有任何公式可以找出你的當前等級有多少exp?所以它會輸出當前級別的exp標記,並且exp會打到下一個級別。所以我可以計算一下他們目前的水平有多遠。 – user880356
用所需的xp編輯下一級,顯示一些東西只需使用XP所需的當前級別 – Sleeperson
如果你想以下幾點:
與同級別(L)的經驗(X)的公式是:
X = 25 * L * L - 25 * L
要計算水平,爲給定的經驗,使用二次方程式獲得:
L = (25 + sqrt(25 * 25 - 4 * 25 * (-X)))/ (2 * 25)
這簡化爲:
L = (25 + sqrt(625 + 100 * X))/50
然後使用地板的功能,讓您的最終公式:
L = floor(25 + sqrt(625 + 100 * X))/50
其中L是級別,X爲點經驗
謝謝。假設我想要調平速度比使用你的要慢,那麼我需要編輯哪個變量? – user880356
以及我會用什麼公式來查找需要多少exp直至下一個級別?謝謝我的數學可怕,需要這個。 – user880356
我在上面的答案中的第一個方程'X = 25 * L * L - 25 * L'給出了達到一個特定水平所需的經驗點的數量 – Mike
谷歌給了我這個:
function experience($L) {
$a=0;
for($x=1; $x<$L; $x++) {
$a += floor($x+300*pow(2, ($x/7)));
}
return floor($a/4);
}
for($L=1;$L<100;$L++) {
echo 'Level '.$L.': '.experience($L).'<br />';
}
它應該的是公式RuneScape使用,你可能可以根據你的需要修改它。 輸出示例:
Level 1: 0
Level 2: 55
Level 3: 116
Level 4: 184
Level 5: 259
Level 6: 343
Level 7: 435
Level 8: 536
Level 9: 649
Level 10: 773
這裏是我用於類似問題快速的解決方案。你當然可能想改變數學,但它會給你從一個總結xp的水平。
$n = -1;
$L = 0;
while($n < $xp){
$n += pow(($L+1),3)+30*pow(($L+1),2)+30*($L+1)-50;
$L++;
}
echo("Current XP: " .$xp);
echo("Current Level: ".$L);
echo("Next Level: " .$n);
原來是基於50的基數,因此分散在等式中的25。
這是一個真正的方程式的答案。只需提供您的乘數(基數)和您的業務。
$_level = floor(floor(($_multipliter/2)
+ sqrt(($_multipliter^2) + (($_multipliter*2) * $_score))
)
/$_multipliter
) ;
你能選擇一個接受的答案嗎?這讓每個人都知道你已經找到了你的問題的答案。您可以點擊您認爲最好的答案旁邊的複選標記。 –