在使用罗技的lua写脚本的时候发现,math.random()
函数下所提供出来的随机数是伪随机数,但是我需要的是真的随机数,而不是每次都是从固定值开始随机的。随后去网上搜了各种解决方案,但是发现都是通过os.time()
函数来实现真随机,但是罗技的lua标准库下并没有os
这个库,所以只能自己想办法。
实现
这里我通过了罗技提供的函数GetRunningTime()
,来获取脚本运行时间,使用脚本运行时间来作为随机数的种子,通过math.randomseed(N)
函数来设置种子
注意:种子设置一次即可。
math.randomseed(GetRunningTime()*math.random(10000,99999)) --这里*10000的原因是因为种子必须大于10000才有用。
随后我发现了一个问题,就是这样子还是会伪随机数,因为脚本每次的记录运行时间都是从1ms开始。
解决
提前调用一次math.random()
函数,将脚本运行时间延后,即可实现随机种子。
math.randomseed(GetRunningTime()*math.random(10000,99999))
math.random(GetRunningTime())
a = math.random(1,100)
b = math.random(1,100)
OutputLogMessage("a = %d\n",a)
OutputLogMessage("b = %d\n",b)
至此便解决了罗技脚本随机数的实现,具体能做什么,反正用途挺多的。
未设置随机种子之前的数据如下:
-------第一次运行脚本--------
a = 20
b = 37
a = 29
b = 45
-------第二次运行脚本--------
a = 20
b = 37
a = 29
b = 45
设置随机种子之后的数据如下:
-------第一次运行脚本--------
a = 53
b = 37
a = 47
b = 46
-------第二次运行脚本--------
a = 33
b = 27
a = 31
b = 46
可以看出来数据是很随机的,所以就可以确认是真随机,而不是伪随机。并且脚本的运行时间决定了种子的大小,具体请参考罗技API文档。