RURandomGenerator.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "RURandomGenerator.hpp"
  2. NS_RU_BEGIN
  3. int RandomGenerator::generateNumber() {
  4. int number = (a * (long long)_seed + c) % m;
  5. // 更新种子值,准备下次生成
  6. _seed = number;
  7. return number;
  8. }
  9. void RandomGenerator::setSeed(int seed){
  10. _seed = seed;
  11. }
  12. int RandomGenerator::getSeed(){
  13. return _seed;
  14. }
  15. int RandomGenerator::randomInRange(int start, int end)
  16. {
  17. CCASSERT(end >= start, "随机值范围不对");
  18. int len = end - start + 1;
  19. int value = generateNumber() % len;
  20. return value + start;
  21. }
  22. int RandomGenerator::randomIndexByWeight(const std::vector<int> &weightArray)
  23. {
  24. CCASSERT(weightArray.size() > 0, "数组不能为空");
  25. int allWeight = 0;
  26. for (int i = 0; i < weightArray.size(); i++) {
  27. allWeight += weightArray[i];
  28. };
  29. int randomNum = randomInRange(1, allWeight);
  30. int flagWeight = 0;
  31. for (int i = 0; i < weightArray.size(); i++) {
  32. int tWeight = weightArray[i];
  33. flagWeight += tWeight;
  34. if (randomNum <= flagWeight) {
  35. return i;
  36. };
  37. };
  38. return 0;
  39. }
  40. NS_RU_END