Sadece iki değeri değiştirerek değiştirilebilecek bir formül oluşturmaya çalışıyorum: number_of_levels ve last_level_experience. Bu, insanların oyunu seviyelendirme gerekliliklerini değiştirmeleri için modlamalarını sağlamaktır.
Son seviye yukarı için gerekli olan XP sayısını belirleyebildiğim için, bu durumda çılgınca değişebilecek olan birinci seviye için gereken XP'yi kontrol etmek istiyorum. Örneğin, son seviye için 40 seviyem ve 1.000.000 XP'ye sahipsem, ilk seviye yükselme şartı 625'tir. Fakat seviyeleri 80'e değiştirirsem, ilk seviye yükselme 156 olur. 1,000,000.
Bilgisayarın sadece bu iki temel değer verilen uygun bir eğriyi ortaya çıkarmasının bir yolu olmalı.
#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;
}
}
Çıktı:
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)