export interface RNG { /** 设置随机数种子 */ setSeed(seed: number): void; getSeed(): number; /** 获取一个 [0,1) 随机数 */ next(max?: number): number; /** 获取一个 [0,max) 随机整数 */ nextInt(max: number): number; } /** * 使用 mulberry32 算法实现的伪随机数生成器 * 这是一个快速、高质量的 32 位 PRNG */ export function createRNG(seed?: number): RNG { return new Mulberry32RNG(seed); } /** Mulberry32RNG 类实现(用于类型兼容) */ export class Mulberry32RNG { private seed: number = 1; constructor(seed?: number) { if (seed !== undefined) { this.seed = seed; } } /** 设置随机数种子 */ call(seed: number): void { this.seed = seed; } /** 获取一个 [0,1) 随机数 */ next(max?: number): number { let t = (this.seed += 0x6d2b79f5); t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t | 61); const result = ((t ^ (t >>> 14)) >>> 0) / 4294967296; return max !== undefined ? result * max : result; } /** 获取一个 [0,max) 随机整数 */ nextInt(max: number): number { return Math.floor(this.next(max)); } /** 重新设置种子 */ setSeed(seed: number): void { this.seed = seed; } /** 获取当前种子 */ getSeed(): number { return this.seed; } }