根据权重随机一个值,这个在游戏里面还是挺常见的,今天突然有人到了这个怎么整,想了一下,这种常用的东西,封装一下应该还是可以省不少事情的
兴致来了就这么顺手敲一波,没经过编译的,不过应该没啥大问题,有问题的大佬留言咯
#include <vector>
class Weight
{
public:
Weight() : mTotalWeight(0) {};
Weight(const std::vector<int>& tmpVec)
: mTotalWeight(0)
{
mWeightVec = tmpVec;
for (int i = 0; i < (int)mWeightVec .size(); ++i)
{
mTotalWeight += mWeightVec[i];
}
}
int GetRandIndex()
{
if (mTotalWeight <= 0)
{
return -1;
}
// 由于rand()函数的随机性问题,各位在改成自己项目内更为有效的实现咯
int randnum = rand() % mTotalWeight;
for (int i = 0; i < (int)mWeightVec.size(); ++i)
{
if (randnum < mWeightVec[i])
{
return i;
}
else
{
randnum -= mWeightVec[i];
}
}
return -1;
}
private:
std::vector<int> mWeightVec;
int mTotalWeight;
}