Saya mencoba membuat formula yang dapat dimodifikasi hanya dengan mengubah dua nilai: number_of_levels, dan last_level_experience. Ini untuk memungkinkan orang memodifikasi game untuk mengubah persyaratan leveling.
Saya sudah mendapatkannya sehingga saya dapat menentukan jumlah XP yang diperlukan untuk level terakhir, tetapi saya ingin dapat mengontrol XP yang diperlukan untuk level pertama, yang dalam kasus ini dapat sangat berbeda. Misalnya, jika saya memiliki 40 level, dan 1.000.000 XP untuk level terakhir, persyaratan level pertama adalah 625. Tetapi jika saya mengubah level menjadi 80, level pertama naik menjadi 156. Dalam kedua kasus, level terakhir membutuhkan 1.000.000.
Pasti ada beberapa cara untuk membuat komputer bekerja dengan kurva yang sesuai mengingat hanya dua nilai dasar ini.
#include <iostream>
int main()
{
int levels = 40;
if (levels < 2) levels = 2;
int experience_for_last_level = 1e6;
float fraction = 1.0 / levels;
{
int i = 0;
float fraction_counter = fraction;
int counter = levels;
int total = 0;
for (i = 1; i <= levels; ++i, fraction_counter += fraction, --counter)
{
int a = static_cast<int>(fraction_counter * experience_for_last_level / counter);
std::cout <<"Level "<<i<<": "<<a<<" ("<<counter<<")"<<"\n";
total += a;
}
std::cout << "\nTotal Exp: " << total;
}
}
Keluaran:
Level 1: 625 (40) Level 15: 14423 (26) Level 29: 60416 (12)
Level 2: 1282 (39) Level 16: 16000 (25) Level 30: 68181 (11)
Level 3: 1973 (38) Level 17: 17708 (24) Level 31: 77499 (10)
Level 4: 2702 (37) Level 18: 19565 (23) Level 32: 88888 (9)
Level 5: 3472 (36) Level 19: 21590 (22) Level 33: 103124 (8)
Level 6: 4285 (35) Level 20: 23809 (21) Level 34: 121428 (7)
Level 7: 5147 (34) Level 21: 26250 (20) Level 35: 145833 (6)
Level 8: 6060 (33) Level 22: 28947 (19) Level 36: 179999 (5)
Level 9: 7031 (32) Level 23: 31944 (18) Level 37: 231249 (4)
Level 10: 8064 (31) Level 24: 35294 (17) Level 38: 316666 (3)
Level 11: 9166 (30) Level 25: 39062 (16) Level 39: 487499 (2)
Level 12: 10344 (29) Level 26: 43333 (15) Level 40: 999999 (1)
Level 13: 11607 (28) Level 27: 48214 (14)
Level 14: 12962 (27) Level 28: 53846 (13)
sumber
Jawaban:
Meskipun ada banyak cara untuk memilihnya, sangat umum jika kurva leveling mengikuti aturan kekuasaan seperti yang berikut:
Keuntungan utama dari formula ini dapat dengan mudah dijelaskan: untuk aturan yang diberikan, ada nilai tetap N sehingga setiap tingkat biaya N persen lebih dari yang sebelumnya .
Variabel awal Anda menambahkan batasan berikut:
Dua persamaan, dua tidak diketahui. Ini terlihat bagus. Matematika sederhana memberi
A
danB
:Menghasilkan kode berikut:
Dan output berikut:
sumber
N
yang Anda jelaskan di atas? Bagaimana jika Anda ingin membuatN
variabel pluggable? Beri tahu saya jika saya harus mengajukan pertanyaan terpisah untuk ini.N
danB
adalahexp(B) = 1 + N
, atauB = log(1 + N)
. Jadi jika Anda ingin setiap level membutuhkan mis. 15% lebih tinggi dari yang sebelumnya, Anda perluB = log(1 + 0.15) = 0.13976
.Jangan lupa untuk membulatkan angka setelah Anda mengetahui kurva Anda. Tidak masuk akal untuk mengatakan pada pemain bahwa ia membutuhkan 119.378 poin pengalaman untuk mencapai level berikutnya - karena orang itu akan selalu memahaminya sebagai "sekitar 120.000". Dengan demikian Anda akan lebih baik melakukan pembulatan diri sendiri, dan menyajikan hasil "bersih" kepada pemain Anda. Misalnya kode berikut (yang meluas pada Sam Hocevar) akan berusaha untuk membulatkan ≈2,2 angka signifikan (jelas bahwa konstanta dapat diubah sesuai keinginan Anda):
Outputnya adalah:
sumber