Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Фактически, вы действительно должны сделать эту конфигурацию (или, по крайней мере, легко изменить в одном центральном расположении), чтобы вы могли сбалансировать игру позже. В большинстве игр эти (и другие) формулы определяются только после 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*X-y

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

Теперь это третий уровень levelup, поэтому это означает уровень 4.

Ответ 2

Это действительно зависит от того, как вы хотите, чтобы шкала 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);

Ответ 3

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

  • Уровень 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

Затем округлите вниз, используя функцию floor, чтобы получить окончательную формулу:

L = floor(25 + sqrt(625 + 100 * X)) / 50

Где L - уровень, а X - точки опыта

Ответ 4

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

Ответ 5

Вот быстрое решение, которое я использовал для аналогичной проблемы. Вы, скорее всего, захотите изменить математику, но она даст вам уровень от суммированного 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);

Ответ 6

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

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

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

Ответ 7

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

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

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