1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #include "RURandomGenerator.hpp"
- NS_RU_BEGIN
- int RandomGenerator::generateNumber() {
- int number = (a * (long long)_seed + c) % m;
- // 更新种子值,准备下次生成
- _seed = number;
- return number;
- }
- void RandomGenerator::setSeed(int seed){
- _seed = seed;
- }
- int RandomGenerator::getSeed(){
- return _seed;
- }
- int RandomGenerator::randomInRange(int start, int end)
- {
- CCASSERT(end >= start, "随机值范围不对");
- int len = end - start + 1;
- int value = generateNumber() % len;
- return value + start;
- }
- int RandomGenerator::randomIndexByWeight(const std::vector<int> &weightArray)
- {
- CCASSERT(weightArray.size() > 0, "数组不能为空");
- int allWeight = 0;
- for (int i = 0; i < weightArray.size(); i++) {
- allWeight += weightArray[i];
- };
- int randomNum = randomInRange(1, allWeight);
-
- int flagWeight = 0;
-
- for (int i = 0; i < weightArray.size(); i++) {
- int tWeight = weightArray[i];
- flagWeight += tWeight;
- if (randomNum <= flagWeight) {
- return i;
- };
- };
- return 0;
- }
- NS_RU_END
|