php game, формула для вычисления уровня на основе exp

Я создаю браузерную игру на базе PHP, и в моей базе данных для игроков у нее есть запись об общем количестве игроков или опыте игроков.

Мне нужна формула для перевода этого exp на уровень или ранг из 100.

Таким образом, они начинаются на уровне 1, и когда они говорят, 50 exp, перейдите на уровень 2, затем, когда они ударят, возможно, 125/150, уровень 2.

В основном формула, которая постоянно увеличивает каждый уровень (более exp)

Может ли кто-нибудь помочь? Я не очень хорошо разбираюсь в математике: P

Многие формулы могут соответствовать вашим потребностям, в зависимости от того, насколько быстро вы хотите, чтобы требуемый объем экспорта увеличивался.

Фактически, вы действительно должны сделать эту конфигурацию (или, по крайней мере, легко изменить в одном центральном месте), чтобы вы могли сбалансировать игру позже. В большинстве игр эти (и другие) формулы определяются только после playtesting и playtesting нескольких вариантов.

Вот одна формула: Первый уровень происходит при 50 exp; второй при 150exp; третий – 300 exp; четвертый при 500 exp; и т. д. Другими словами, сначала вы должны собрать 50 exp, затем 100 exp, затем 150exp и т. д. Это арифметическая прогрессия .

Для levelup X вам понадобится 25*X*(1+X) exp.

Добавлено: Чтобы получить это наоборот, вы просто используете базовую математику. Как это:

 y=25*X*(1+X) 0=25*X*X+25*Xy 

Это стандартное квадратичное уравнение , и вы можете решить для 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-й уровень , так что это означает уровень 4.

Если вы хотите следующее:

  • Уровень 1 @ 0 очков
  • Уровень 2 @ 50 очков
  • Уровень 3 @ 150 очков
  • Уровень 4 @ 300 очков
  • Уровень 5 @ 500 пунктов и т. Д.

Уравнение, связанное с опытом (X) с уровнем (L), есть:

 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 – точки опыта

Это действительно зависит от того, как вы хотите, чтобы exp для масштабирования для каждого уровня. Допустим,

 LvL1 : 50 Xp Lvl2: LvL1*2=100Xp LvL3: LvL2*2=200Xp Lvl4: LvL3*2=400Xp 

Это означает, что у вас есть геометрическая прогрессия. Требуется Xp для завершения уровня n.

 `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 

и т. д. Общий игровой момент, когда игрок получает новый уровень, будет:

  base*(Q^n-1)/(Q-1) 

В вашем случае вы уже знаете, сколько у игрока xp. Для отношения 2 формула упрощается:

 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

для получения от lvl x до lvl (x + 1) вам понадобится

 $totalXprequired=50*pow(2,$playerLevel-1); 

Google дал мне это:

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

Я понимаю, что вы ищете, это количество опыта, чтобы решить, на каком уровне они находятся? Например: Уровень 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; } } 

Это так просто, как я могу сделать алгоритм для уровней, я не проверял его, чтобы могли быть ошибки.

Дайте мне знать, если вы используете это, здорово думать, что алгоритм, который я написал, может быть в игре!

Оригинал был основан на базе 50, таким образом, 25 разбросаны по уравнению.

Это ответ как реальное уравнение. Просто поставьте свой множитель (базу) и свой бизнес.

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