using System; namespace JNGame.Math { /// /// 伪随机序列计算器 /// public partial class Random { /// /// 随机数种子 /// public ulong randSeed = 1; /// /// 构造伪随机 /// /// public Random(uint seed = 17) { randSeed = seed; } /// /// 返回[0, 4294967295)范围内的一个无符号整数 /// /// public uint Next() { randSeed = randSeed * 1103515245 + 36153; return (uint)(randSeed / 65536); } /// /// 返回[0, max)范围内的一个无符号整数 /// /// 随机范围最大值,产出的随机数不包括该值 /// public uint Next(uint max) { return Next() % max; } /// /// 返回[0, max)范围内的一个有符号整数 /// /// 随机范围最大值,产出的随机数不包括该值 /// public int Next(int max) { return (int)(Next() % max); } /// /// 返回[min, max)范围内的一个无符号整数 /// /// 随机范围最小值,产出的随机数包括该值 /// 随机范围最大值,产出的随机数不包括该值 /// /// public uint Range(uint min, uint max) { if (min > max) throw new ArgumentOutOfRangeException("minValue", string.Format("'{0}' cannot be greater than {1}.", min, max)); uint num = max - min; return this.Next(num) + min; } /// /// 返回[min, max)范围内的一个有符号整数 /// /// 随机范围最小值,产出的随机数包括该值 /// 随机范围最大值,产出的随机数不包括该值 /// public int Range(int min, int max) { if (min >= max - 1) return min; int num = max - min; return this.Next(num) + min; } /// /// 返回[min, max)范围内的一个定点数 /// /// 随机范围最小值,产出的随机数包括该值 /// 随机范围最大值,产出的随机数不包括该值 /// /// public LFloat Range(LFloat min, LFloat max) { if (min > max) throw new ArgumentOutOfRangeException("minValue", string.Format("'{0}' cannot be greater than {1}.", min, max)); uint num = (uint)(max.rawValue - min.rawValue); return new LFloat(true, Next(num) + min.rawValue); } } #if false public class LRandom { private static Random _i = new Random(3274); public static LFloat value => _i.value; public static uint Next(){return _i.Next();} public static uint Next(uint max){return _i.Next(max);} public static int Next(int max){return _i.Next(max);} public static uint Range(uint min, uint max){return _i.Range(min, max);} public static int Range(int min, int max){return _i.Range(min, max);} public static LFloat Range(LFloat min, LFloat max){return _i.Range(min, max);} } #endif }