#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 &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