e08485787ba9b2ad7c98e435102c966d3f5c64ae.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. System.register(["cc"], function (_export, _context) {
  2. "use strict";
  3. var _cclegacy, Random, _crd;
  4. function get_new_random(seed) {
  5. return new Random(seed);
  6. }
  7. _export("default", get_new_random);
  8. return {
  9. setters: [function (_cc) {
  10. _cclegacy = _cc.cclegacy;
  11. }],
  12. execute: function () {
  13. _crd = true;
  14. _cclegacy._RF.push({}, "0df919aG5RLDb2SUzCkvbif", "Random", undefined);
  15. /**设种一个随机种子保证随机结果一致
  16. * 后面需要可以引入 seedrandom 库
  17. */
  18. Random = class Random {
  19. /**当前种子*/
  20. get seed() {
  21. return this._seed;
  22. }
  23. /**原始种子*/
  24. get start_seed() {
  25. return this._start_seed;
  26. }
  27. /**随机种子*/
  28. constructor(seed) {
  29. this._seed = void 0;
  30. this._start_seed = void 0;
  31. this.set_seed(seed);
  32. }
  33. /**设置当前开始种子*/
  34. set_seed(seed) {
  35. this._seed = seed;
  36. this._start_seed = seed;
  37. }
  38. _nextSeed() {
  39. this._seed = (this._seed * 9301 + 49297) % 233280;
  40. }
  41. /**0.0(含)-1.0(不含)*/
  42. _nextFloat() {
  43. this._nextSeed();
  44. return this._seed / 233280;
  45. }
  46. /**0(含)-max(不含) */
  47. _nextInt(max) {
  48. max = Math.floor(max);
  49. this._nextSeed();
  50. return this._seed % max;
  51. }
  52. /**
  53. * 生成指定范围的随机浮点数
  54. * @param min 最小值(含)
  55. * @param max 最大值(不含)
  56. */
  57. float(min = 0, max = 1) {
  58. return this._nextFloat() * (max - min) + min;
  59. }
  60. /**
  61. * 生成指定范围的随机整数
  62. * @param min 最小值(含)
  63. * @param max 最大值(不含)
  64. * @returns
  65. */
  66. int(min = 0, max = 100) {
  67. return this._nextInt(max - min) + Math.ceil(min);
  68. }
  69. /** 生成随机整数 -1 或 1*/
  70. dir() {
  71. return Math.floor(this.float() * 2) === 0 ? -1 : 1;
  72. }
  73. /**
  74. * 在指定数组中随机取出N个不重复的数据
  75. * @param resArr
  76. * @param ranNum
  77. * @returns {Array}
  78. */
  79. getDiffValueFromArr(resArr, ranNum) {
  80. let arr = new Array();
  81. let result = new Array();
  82. if (!resArr || resArr.length <= 0 || ranNum <= 0) {
  83. return result;
  84. }
  85. for (let i = 0; i < resArr.length; i++) {
  86. arr.push(resArr[i]);
  87. }
  88. if (ranNum >= arr.length) return arr;
  89. ranNum = Math.min(ranNum, arr.length - 1);
  90. for (let i = 0; i < ranNum; i++) {
  91. let ran = this.int(0, arr.length - 1);
  92. result.push(arr.splice(ran, 1)[0]);
  93. }
  94. return result;
  95. }
  96. /**
  97. * 生成指定范围的随机整数
  98. * @param min 最小值
  99. * @param max 最大值
  100. * @param type 类型
  101. * @example
  102. //type=1 [min,max) 得到一个两数之间的随机整数,这个值不小于min(如果min不是整数的话,得到一个向上取整的 min),并且小于(但不等于)max
  103. //type=2 [min,max] 得到一个两数之间的随机整数,包括两个数在内,这个值比min大(如果min不是整数,那就不小于比min大的整数),但小于(但不等于)max
  104. //type=3 (min,max) 得到一个两数之间的随机整数
  105. */
  106. int_type(min, max, type) {
  107. min = Math.ceil(min);
  108. max = Math.floor(max);
  109. switch (type) {
  110. case 1:
  111. // [min,max) 得到一个两数之间的随机整数,这个值不小于min(如果min不是整数的话,得到一个向上取整的 min),并且小于(但不等于)max
  112. return Math.floor(this._nextFloat() * (max - min)) + min;
  113. case 2:
  114. // [min,max] 得到一个两数之间的随机整数,包括两个数在内,这个值比min大(如果min不是整数,那就不小于比min大的整数),但小于(但不等于)max
  115. return Math.floor(this._nextFloat() * (max - min + 1)) + min;
  116. case 3:
  117. // (min,max) 得到一个两数之间的随机整数
  118. return Math.floor(this._nextFloat() * (max - min - 1)) + min + 1;
  119. }
  120. return 0;
  121. }
  122. };
  123. /**创建一个设定好种子的随机数实例*/
  124. _cclegacy._RF.pop();
  125. _crd = false;
  126. }
  127. };
  128. });
  129. //# sourceMappingURL=e08485787ba9b2ad7c98e435102c966d3f5c64ae.js.map