也许很多人会奇怪为什么使用LUA的时候,第一个随机数总是固定,而且常常是最小的那个值,下面我就简要的说明一下吧,说得不好,还请谅解。我现在使用的4.0版本的LUA,看的代码是5.0的,呵呵
LUA4.0版本中的自带函数库中有两个关于随机数的函数,一个是random,一个是randomseed。random有两个参数,用来设置随机数的范围,比如random(1,100)设置随机数的范围为1至100之间。由于C中所产生的随机序列是固定的,并且第一个随机数比较小,只有41。LUA重新设计了random函数,使得它可以产生范围固定的随机数,但由于LUA的random只是封装了C的rand函数,使得random函数也有一定的缺陷,那就是如果random的两个输入参数的值相差很小的时候,那么随机序列的第一个随机数就会和第一个输入参数很接近,比如第一次调用random(1,100)的时候,返回值肯定是1,只有相差大于799时,如random(1,800)第一次调用才会返回2,也是很接近1。
由于这个原因,为了实现真正的随机,那么第一次就不能让玩家调用random函数,不然玩家就可以获得一些低概率的东西了。比如if random(1,100) == 1 then ...... do,看起来是1%的的概率,但是第一次执行的时候是100%成立的,存在一定的隐患。解决这个问题的方法有两个,一就是第一次random函数不能让玩家执行,二就是使用randomseed先设一个随机种子。对于第一种方法,可能还是有一定的风险,毕竟随机序列还是固定的,玩家第一次调用random的时候还是得到有规律的返回值。第二