16

私はブラウザベースの PHP ゲームを作成しており、プレイヤー用のデータベースには、そのプレイヤーの合計 EXP または経験の記録があります。

私が必要としているのは、その経験値を 100 段階中のレベルまたはランクに変換する式です。

つまり、彼らはレベル 1 から始めて、例えば 50 経験値に達するとレベル 2 に進み、125/150 に達するとレベル 2 になります。

基本的に、各レベルを着実に長くする式(より多くのexp)

誰でも助けることができますか?私は数学があまり得意ではありません:P

4

7 に答える 7

28

必要な経験値をどれだけ速く上げたいかによって、多くの数式がニーズに合う場合があります。

実際、後でゲームのバランスを取ることができるように、これを構成可能にする (または少なくとも 1 つの中央の場所で簡単に変更する) 必要があります。ほとんどのゲームでは、これらの (およびその他の) 式は、playtestingいくつかのオプションを試してから決定されます。

ここに 1 つの公式があります。最初のレベルアップは 50 経験値で発生します。150expで2番目。300 expで3番目。500 exp で 4 番目。など。つまり、最初に 50 の exp、次に 100 の exp、次に 150 の exp などを収集する必要があります。これは、算術進行です。

レベルアップXには経験値が必要です25*X*(1+X)

追加:逆に取得するには、基本的な数学を使用するだけです。このような:

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

これは標準的な二次方程式であり、X については次のように解くことができます。

X = (-25±sqrt(625+100y))/50

ここで、X と Y の両方を 0 より大きくしたいので、答えの 1 つを削除して、次のようにします。

X = (sqrt(625+100y)-25)/50

たとえば、経験値が 300 の場合、次のようになります。

(sqrt(625+100*300)-25)/50 = (sqrt(30625)-25)/50 = (175-25)/50 = 150/50 = 3

さて、これは3回目のレベルアップなので、レベル4を意味します。

于 2011-08-05T10:36:24.583 に答える
11

以下が必要な場合:

  • レベル 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 は経験値です。

于 2011-08-05T11:14:30.290 に答える
6

それは、各レベルで exp をどのようにスケーリングするかによって大きく異なります。まあ言ってみれば

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

これは、等比数列があることを意味します。レベル n を完了するために必要な Xp は、次のようになります。

`XPn=base*Q^(n-1)`

私の例では、base は初期の 50 xp で、Q は 2 (比率) です。

プレイヤーが経験値なしで lvl1 から開始した場合:

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 の場合、式はより単純になります。

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);
于 2011-08-05T10:56:03.717 に答える
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
于 2011-08-05T11:59:06.133 に答える
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);
于 2012-07-27T11:58:44.477 に答える
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;
     }
}

これは、レベルのアルゴリズムを作成できるのと同じくらい簡単ですが、テストしていないため、エラーが発生する可能性があります。

これを使用する場合はお知らせください。私が書いたアルゴリズムがゲームに組み込まれる可能性があると考えるのはクールです!

于 2011-08-05T10:44:27.113 に答える
0

オリジナルは 50 のベースに基づいていたため、25 は方程式全体に散らばっていました。

これが実方程式としての答えです。あなたの乗数(ベース)とあなたのビジネスを提供するだけです。

$_level = floor( floor( ($_multipliter/2)
                      + sqrt( ($_multipliter^2) + ( ($_multipliter*2) * $_score) ) 
                      ) 
                      / $_multipliter
               ) ;
于 2014-11-10T19:32:38.733 に答える