2011-08-05 26 views
12

我正在製作一個基於瀏覽器的PHP遊戲,並且在我的數據庫中爲玩家記錄了該玩家的總體EXP或經驗。php遊戲,公式來計算基於exp的水平

我需要的是一個公式到EXP轉化爲一個級別或等級,出了100

於是他們開始在1級,並且當他們擊中說,50 EXP,進入2級,然後當他們擊中也許125/150,2級

基本上是一個公式,穩步使得每個級別較長的(更EXP)

誰能幫助?我不擅長數學:P

+4

你能選擇一個接受的答案嗎?這讓每個人都知道你已經找到了你的問題的答案。您可以點擊您認爲最好的答案旁邊的複選標記。 –

回答

20

許多公式可能適合您的需求,具體取決於您希望所需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級

+0

謝謝,但是我說我只有人物EXP變量,並且我想把它放到一個等式中,並且它會返回一個等級號。我會怎麼做? – user880356

+0

我會說這個公式對於練級非常好。它的增長速度比幾何學的緩慢,每個新的水平需要X倍的經驗。這種進步保持着良好的平衡,並且感覺每個等級都更難實現,但並非不可能。但我認爲你應該使用Excel或其他東西來製作兩張圖,然後看看你自己。 –

+0

其實,150/5 = 30 –

0

我想你要找的是什麼的經驗來決定他們是在什麼樣的水平是多少?如: 級別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; 
    } 
} 

這很簡單,只要我可以爲水平的算法,我沒有測試過所以有可能是錯誤的。

讓我知道如果你真的使用這個,酷想認爲我寫的算法可以在遊戲中!

+0

當我把高數字作爲exp(例如,14554),然後它不輸出一個級別。 – user880356

+0

哦,如果你已經超過了最高級別(設置爲100),我會在for循環之後添加一個if語句。 – John

4

這實際上取決於你想如何按比例縮放每個級別。 假設

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); 
+0

謝謝你,完美:D 有無論如何,我可以做一個循環來顯示每個級別的EXP要求列表? – user880356

+0

也有任何公式可以找出你的當前等級有多少exp?所以它會輸出當前級別的exp標記,並且exp會打到下一個級別。所以我可以計算一下他們目前的水平有多遠。 – user880356

+0

用所需的xp編輯下一級,顯示一些東西只需使用XP所需的當前級別 – Sleeperson

4

如果你想以下幾點:

  • 等級1 @ 0點
  • 級別2 @ 50分
  • 等級3 @ 150點
  • 等級4 @ 300點
  • 等級5 @ 500點等

與同級別(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爲點經驗

+0

謝謝。假設我想要調平速度比使用你的要慢,那麼我需要編輯哪個變量? – user880356

+0

以及我會用什麼公式來查找需要多少exp直至下一個級別?謝謝我的數學可怕,需要這個。 – user880356

+0

我在上面的答案中的第一個方程'X = 25 * L * L - 25 * L'給出了達到一個特定水平所需的經驗點的數量 – Mike

2

谷歌給了我這個:

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 
1

這裏是我用於類似問題快速的解決方案。你當然可能想改變數學,但它會給你從一個總結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); 
0

原來是基於50的基數,因此分散在等式中的25。

這是一個真正的方程式的答案。只需提供您的乘數(基數)和您的業務。

$_level = floor(floor(($_multipliter/2) 
         + sqrt(($_multipliter^2) + (($_multipliter*2) * $_score)) 
        ) 
        /$_multipliter 
       ) ;