経験値に基づいてレベルを動的に計算するアルゴリズム?[閉まっている]


41

私がゲーム開発で常に経験した苦労の1つは、レベルを上げることに起因する経験値を実装する方法を決定することです。私がプレイした多くのゲームでレベルを獲得するパターンはないようですので、経験点とレベルを含む静的な辞書テーブルがあると思います。例えば

Experience   Level
0            1
100          2
175          3
280          4
800          5

... 280ポイントがレベル4に等しい理由や理由はありません。

これらのレベルがどのように決定されるかはわかりませんが、それは確かに動的ではありません。また、指数レベルの可能性についても考えました。たとえば、別個のルックアップテーブルを保持する必要はありません。

Experience   Level
0            1
100          2
200          3
400          4
800          5
1600         6
3200         7
6400         8

...しかし、ゲーム内の敵はレベルを上げるために途方もない量の経験を提供する必要があるため、それはかなり急速に制御不能になりそうです。レベリングは不可能な作業になります。

経験に基づいてキャラクターを平準化する方法を決定するためのポインターやメソッドを持っている人はいますか?レベリングを公平にしたいので、常に新しい経験/レベルルックアップを追加することを心配しないように、プレーヤーの先を行きたいです。


4
いいえ、それは単なる遅い指数です(すべてのレベルではなく、〜3.3レベルごとに10倍、または〜6.6レベルごとに100倍)。幾何学は1 [00]、4、9、25、36などのようになります。11001210 1331 1464でも1.1を乗算する指数級数です。
-Random832

1
en.wikipedia.org/wiki/Exponential_growth物事を片付ける必要があります。
aaaaaaaaaaaa

1
@Stephen:@ Random832は正しいです。「指数」成長と「幾何」成長の両方は、連続した/等距離の用語間の一定の比率を持つことを意味します(つまり、成長率は現在の値に比例します-計算では、これは指数関数にはf'(x) = c*f(x))があります。「幾何学的」という用語は、ドメイン(入力)が離散(整数など)の場合に使用されます。レベル1より上の@Georgeの例の式はExperience = 100 * 2^(Level-2)、指数関数です。レベル1を超える進行の式Experience = 100^(Level-1)も、指数です。
BlueRaja-ダニーPflughoeft

回答:


36

二乗関係を使用することは非常に一般的です。

level = constant * sqrt(XP)

または、直線的に上昇するレベルギャップの近似値。

Level   XP      Difference
1       0       -
2       100     100
3       300     200
4       600     300
5       1000    400

XPのゲインがほぼ線形の場合、これらのシステムは非常にうまく機能します。高レベルのキャラクターが低レベルのキャラクターよりも早くXPを獲得できる場合、これは適切なシステムではありません。


3
Achieverタイプのプレイヤーの場合、キャラクターが進歩するにつれてXPが大きくなると強く期待していると思います。私はあなたのソリューションが面白いと思います、そしておそらく107-214-321-428のような違いを生み出すためにそれを少しだけ微調整して、プレイヤーがラウンド数だけを見ることを防ぎ、これがゲームを感じるようにすることを期待しますほんの少し「オーガニック」です(これよりも良い言葉を考えていますが、現時点では「オーガニック」だけです)。
ランドルフリチャードソン

1
1これは、私が過去にやったまさにある素晴らしい作品
BlueRaja -ダニーPflughoeft

3
直線的に上昇するレベルギャップの式。レベル=(sqrt(100(2experience + 25))+ 50)/ 100および経験=(level ^ 2 + level)/ 2 * 100-(level * 100)
C9HDN 14年

3
すばらしい答えであり、これが生み出す曲線が気に入っています。0.04の定数を使用することになりました。不思議な人のために、XPで計算するこの式の逆は、XP = level ^ 2 /定数です。
BradH 14年

3
@BradH実際、XP =(レベル/定数)^ 2のようです。phpでは、これはXP = pow(level / constant、2)またはそれ以降のバージョンでは(level / constant)** 2
Taylor Dondich

17

対数関数は、より多くの経験値が得られるにつれて増加を遅くするために使用できるため、おそらく役立つでしょう。これらの仕組みを説明する2つのWebページを次に示します。

  対数関数のグラフ
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  対数関数のグラフ化の概要
  http://www.purplemath.com/modules/graphlog.htm

グラフでは次のように表示されます。これは、ニーズに合うことを願っています。

ここに画像の説明を入力してください


1
@George係数をいじってみると、対数関数を簡単に使用してプレーヤーのレベリングを調整できます。数学を使用するための+1
スティーブン

2
これは指数関数的なXP要件の実装であることに注意してください。level = log(XP) <=> XP = e^level。要件は最後のレベルでは少し急になることがありますが、XPの蓄積が適切に増えれば問題なく機能します。
aaaaaaaaaaaa

@eBusiness:良い点ですが、より高いレベルのキャラクターはより簡単に、より短い時間でより多くのポイントを獲得する傾向があるため、これは問題ではないかもしれません(例えば、より速いヒット速度でより強力なモンスターを攻撃/殺すことによって)。これは、この数学がビデオゲームに(特にMMORPGのコンテキストで)適していると思う理由の1つです。
ランドルフリチャードソン

2
OPが指数関数的成長を特に心配していて、同じことを別の方法で説明する答えを受け入れるのは少し奇妙です。しかし、それが彼の問題だと思います。
aaaaaaaaaaaa

1
@eBusiness:多分、私の答えは指数関数的成長について、以前は明確ではなかった何かを明らかにしたのでしょうか?数学を適用するにはさまざまな方法がありますが、最高の数学の先生でさえそれらをすべて知っているかどうかはわかりません(まあ、とにかく2番目に最高の数学の先生かもしれません)。
ランドルフリチャードソン

9

これらは私がこれまで使ってきたいくつかの方法です。それらは成長率でソートされます(すべての方程式に定数値を掛けるだけです):

  1. exp =レベル

  2. exp =レベル*ログ10(レベル)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
    
  3. exp = level ^ const_value:この例では、const値を3/2に設定します

    1   1
    2   2.8
    3   5.1
    4   8
    5   11.2
    6   14.7
    

4

プレーヤーがどれだけ簡単にエクスペリエンスを取得できるかによって決まると思います。プレーヤーが20分でレベル1で200 xpを獲得し、2分でレベル2で200 xpを獲得できる場合、xpを指数関数的にスケーリングする必要があります。

ただし、レベルを取得してもxpを取得するのがわずかに簡単になるだけの場合は、さらにレベルのxp関数を実行する必要があります。(いくつかの係数が1より大きい線形かもしれません)


4

多くの場合、レベルを取得するために必要なポイントは曲線に基づいています。多くのRPGには、レベルに応じて増加するキャラクターの他の多くの特性や属性もあり、それらも独自の曲線上にあります。

RPGMakerを見て、どのように機能するかを確認してください。具体的には、「メインキャラクターの作成」ドキュメントの「起動機器のカスタマイズによるいくつかの一意性の追加」セクションのスクリーンショットでパラメーターカーブを確認します。

基本的に、レベルアップに必要なXPの量の曲線があり、その後、各レベルでHP、MP、スタミナ、筋力などがどれだけ得られるかについての異なる曲線があります。

ここに画像の説明を入力してください


2

時間を考慮する

最初に、レベルごとに経験獲得率がどのように拡大するかを把握する必要があります。その後、必要な時間でレベリングを調整できます。レベルを1つ追加するごとに経験値が2倍速くなり、レベル化に2倍の経験値が必要な場合、すべてのレベルで同じ時間が必要になります。

私の提案は、プレーヤーがどれだけの時間を費やすべきかを考え、それに合わせてレベリングを調整することです。


-3

たぶん、各レベルがまったく同じ量の経験を必要とするフラットレベリングシステムを使用する必要があります。


3
答えは、単なる提案よりも少し肉付けすべきです。求められているような動的システムを持つことに対するこの戦略の利点のいくつかを関連付けてみてください。
マイケルハウス

また、元の作者が追加情報を投稿する必要があることに注意してください。他のユーザーが追加する必要がある場合は、別の回答を投稿することを検討する必要があります。
ネムロック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.