当前位置: 首页 小程序开发

消消乐系列--伪随机数生成器

时间:2023年05月20日 阅读:875
以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!
淘客轩-衣食住行外卖生活好助手

梅森旋转算法(Mersenne twister)是一个伪随机数发生算法。由松本真和西村拓士在1997年开发,基于有限二进制字段上的矩阵线性递归。可以快速产生高质量的伪随机数,修正了古典随机数发生算法的很多缺陷。

在游戏里开发中录像回放,bug追踪 都需要一致的随机数种子,默认玩家操作。在消除游戏中需要恢复盘面,追踪bug,录像回放。都需要用到一致的随机数。

根据java版本代码,重新书写一边ts版本。

/** 
 * 梅森旋转算法(Mersenne twister)是一个伪随机数发生算法。
 * 由松本真和西村拓士在1997年开发,基于有限二进制字段上的矩阵线性递归。
 * 可以快速产生高质量的伪随机数,修正了古典随机数发生算法的很多缺陷。
 */
export class EMRandom {
    private readonly N: number = 624;
    private readonly M: number = 397;
    private readonly MATRIX_A: number = 0x9908b0df;
    private readonly UPPER_MASK: number = 0x80000000;
    private readonly LOWER_MASK: number = 0x7fffffff;
    private readonly TEMPERING_MASK_B: number = 0x9d2c5680;
    private readonly TEMPERING_MASK_C: number = 0xefc60000;

    private mt: number[] = [];
    private mti: number;

    private _seed: number = 0;

    public constructor(seed: number = 0) {
        this.mti = this.N + 1;
        if (seed == 0) {
            let data = new Date();
            seed = data.getTime() / 1000;//因为毫秒超出了最大值
        }
        this.setSeed(seed);
    }

    private setSeed(val: number) {
        this._seed = val;
        this.randomSeed(val);
    }

    private randomSeed(seed: number) {
        this.mti = 0;
        this.mt[0] = seed & 0xffffffff;
        for (this.mti = 1; this.mti < this.N; this.mti++) {
            this.mt[this.mti] = this._multi(1812433253, (this.mt[(this.mti - 1)] ^ (this.mt[(this.mti - 1)] >> 30))) + this.mti;
            this.mt[this.mti] &= 0xffffffff;
        }
    }
    private _multi(a: number, b: number): number {
        let a_low = a & 0xffff;
        let a_high = a >> 16;
        let b_low = b & 0xffff;
        let b_high = b >> 16;
        return (((((a_low * b_low >> 16) + a_low * b_high) & 0xffff) + a_high * b_low) & 0xffff) << 16 | a_low * b_low & 0xffff;
    }
    public randomInt32(): number {
        //关注微信获取更多代码
        return y;
    }
}

请赞赏

朋友,创作不易;为犒赏小编的辛勤劳动,请她喝杯咖啡吧!

给她赞赏,您将财运亨通


打赏

本文地址:https://www.momojc.cn/wapp/xiaoxiaole.html

相关推荐
支付宝领大额红包
支付宝领大额红包
似水流年
    今日已经过去小时
    这周已经过去
    本月已经过去
    今年已经过去个月
小姐姐视频

关于本站 | 隐私政策 | 免责声明 | 广告合作 | 我要投稿 | 后台管理

CopyRight © 2023-2024 MOMO教程 WWW.MOMOJC.CN , All Rights Reserved.

站长E-mail:378074730@qq.com 网站已运行:  运行时长:0.029 秒

京ICP备20029690号-1京ICP备20029690号-2 京公网安备11011402013892号京公网安备11011402013892号 中国互联网违法和不良信息举报中心 网络违法犯罪举报网站

本网站托管于 腾讯云 .由网站卫士提供网站加速和攻击防御服务 提供CDN加速/防御服务.由zblogcn强力驱动 又拍云提供CDN加速/云存储服务 51la网站统计