如何获得正确的价值

How to get the right value?

本文关键字:何获得      更新时间:2023-10-16

我必须做什么才能获得正确的水平?

示例:

int gXP = globalDoHandle::PlayerStats_XP(p);
ostringstream sXP; sXP << "XP(RP): " << gXP;
ostringstream sLEVEL; sLEVEL << "Level: " << gLEVEL;

我想使用XP值以获取正确的级别。如果我得到的值24450应该给我它,然后" 10"返回我知道我可以使用这样的东西,但是游戏中的水平是8000级!

if (gXP < 800) { Rank = "1"; }
else if (gXP < 2100) { Rank = "2"; }
else if (gXP < 3800) { Rank = "3"; }
...
LEVEL: XP
Level 1: 0
Level 2: 800
Level 3: 2100
Level 4: 3800
Level 5: 6100
Level 6: 9500
Level 7: 12500
Level 8: 16000
Level 9: 19800
Level 10: 24000
Level 11: 28500
Level 12: 33400
Level 13: 38700
Level 14: 44200
Level 15: 50200
Level 16: 56400
Level 17: 63000
Level 18: 69900
Level 19: 77100
Level 20: 84700
...Level 8000: 1787576850

要完成这样的工作,您需要std::lower_boundstd::lower_bound(l, h, v)在范围内返回迭代器it [l, h),该范围内的值是最小的验证*it > v

constexpr std::array<unsigned, 10> levels = { /* ... */ }; // xp needed for each level
unsigned level(unsigned xp)
{
    auto it = std::lower_bound(cbegin(levels), cend(levels), xp);
    return std::distance(begin(levels), it);
}

level(xp)返回xp相对于levels的值。

的级别

se完整的演示在线

使用 std::array,带有exp值。

std::array<int, 8000> exp_table = { 0, 800, 2100... };
int level=0;
for(; level < exp_table.size() && exp_table[level] < gXP; ++level);
Rank = std::to_string(level); // If this is needed?

将正确设置此level之后。剩下的唯一的是您如何生成exp_table。从文件中读取它。使用一些数学公式。