はじめに
学習用の自作RPGを個人で作成しています。
RPGといえばレベリング。
そのレべリングをするためにキャラに「経験値」という概念を持たせる必要がありました。
経験値が一定の値に達したらレベルが上がるように実装しようと思ったのですが
レベルアップするための経験値の値は?
敵を倒したら得られる経験値はどうやって決めようか?
と考え込んだ末、小難しい数式に出会ったので備忘録です。
等比数列を使って次のレベルアップまでの経験値を算出する
例えばレベル1→2に上がるまで10
の経験値が必要だとします。
2→3に上がるときは15
、3→4に上がるときは23
31→32に上がるときは1917511
の経験値が必要になります。
このようにレベルが上がっていくにつれて、次のレベルに上がるための経験値を増やしていかないといけません。
そこのバランスが良くないと、とてつもなくレベリングが簡単になったり、逆に難しくなったりしてゲーム性が壊れてしまう可能性が大です。(ゲームプランナーさんはすごい。。)
上記の次のレベルに上がるための経験値をどのように算出するか
ここで等比数列を使います。
今のレベルから次のレベルに上がるための経験値を『ネクスト経験値』とするならば
上記のネクスト経験値
はレベルが1上がるにつれて、1.5倍
ずつ増えていきます。
等比数列の言葉を使うなら、初項が10
、公比1.5になります。
公式はこんな感じ
等比数列の一般項をfor文で書くと以下のように求められます。
int Level = 20; // 現在のレベル
float a = 10; // 初項
float l = 1.5f; // 公比
float nextExperience; // ネクスト経験値
nextExperience = l;
// 公比を「レベル−1」の数だけかけます。
for (int i = 1; i < Level - 1; i++)
{
nextExperience *= l;
}
// 初項をかけます
nextExperience *= a;
数学の公式を見てみると、小難しく思えますが、コードで書いてしまえば簡単に見えてきますね。
乗数なんかはfor文で書いてしまえば、お茶の子さいさいです。
でもネクスト経験値が算出できても、自作のゲームでは仕様上これを使ってレベリングの実装は難しかったので、『累積経験値』という概念をキャラクターに持たせて実装しました。
現在の累積経験値と次のレベルの累積経験値がわかれば、次のレベルになるまであとどれくらいの経験値が必要か分かりますね。
こちらは長くなりそうなので、近日記事にしたいと思います。
See you later (最近英会話の勉強してる筆者)