浅谈种子随机数和函数在js中的实现

浅谈种子随机数和函数在js中的实现
前言

在前端开发中,特别是在游戏开发中,我们经常使用随机数。然后我们将第一次想:Math.random,让我们来看下面的代码。
对于(var i = 0;i );}
运行上面的代码确实生成10个不同的数字。当然,您可以生成更多。看起来不错。如果是这样的话,就没有必要写这篇文章了。

样品

想象一下,如果在一个场景中,我们玩一个游戏,当用户玩出口的一半,这样用户可以选择继续进入下一次计划去玩,所以现在的问题是:用户数据的描述游戏进程以及用户的积分简单,我们可以记录,但障碍,飞碟游戏渲染和装饰的小玩意,他们甚至开始随机输出用户每次点到画布上,所有的事情和他们的大小,位置都记录下来,这是没有必要的。

所以种子随机数在初次登场时,如果我们在画布元素上随机绘制时,有一个种子值,所有元素的页面大小和位置都是以种子计数为基础的,那么等待第二次渲染的时候只需要通过这种类型的孩子,就不能在返回之前完成画布元素。

所以这一次,你会发现Math.random JS不足以满足要求,我们继续看代码:

复制代码代码如下所示:

math.seed = 5;math.seededrandom =功能(max,min){λmax = min | | | | 1;0分钟;math.seed =(math.seed * 9301 + 49297)% 233280;var RND = math.seed / 233280;回报+ RND *最小(最大-最小);}为(VAR;我= 0;我);}
运行上面的代码,你会发现如果种子math.seed相同,然后随机数发生器不改变,哦,如果这个函数介绍,然后返回游戏的场景是可以实现的,尽管细节还需要做得更多,但机制保证,本文的重点是实现这样的游戏。

本文的重点是:(math.seed * 9301 + 49297)% 233280,为什么这三个值,而不是其他的,这三个数的神秘的起源是什么

伪随机数发生器像math.seededrandom叫做线性同余发生器(LCG、线性同余发生器)。几乎所有的品牌所提供的运行时库LCG。
i + 1 = ai + C(mod M)
所产生的伪随机数序列的最大周期为0,m-1.to达到最大周期之间,我们必须满足:

1。C和m互质
2 a - 1可由m的所有质量因子整除。
三.如果m是4的倍数,A - 1也必须是4的倍数。

以上三个被称为赫尔多贝尔定理。作为一个伪随机数发生器,时间不够大,不好意思,所以这是一个要求。因此我们有:A = 9301,C = 49297,M = 233280,这组参数,以上三个满意。

总结

以上是JS中种子随机数的引入和作用的内容,希望能对javascript学习者有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部