我该怎样做才能获得正确的等级?
示例:
int gXP = globalDoHandle::PlayerStats_XP(p);
ostringstream sXP; sXP << "XP(RP): " << gXP;
ostringstream sLEVEL; sLEVEL << "Level: " << gLEVEL;
我想使用XP值来获得正确的等级。 如果我得到值24450应该给我它然后&#34; 10&#34;背部 我知道我可以使用这样的东西,但在游戏中它是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
答案 0 :(得分:0)
使用带有exp值的std::array
。
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
。从文件中读取它。使用一些数学公式。
答案 1 :(得分:0)
要做这样的工作,你需要std::lower_bound
。 std::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
值相关的达到的水平。