所以我在 Lua 中进行脚本测试,我得到了这个问题:
- 创建一个算法来生成一副纸牌,1-52。洗牌(不要使用类似 array.randomize() 的东西)。然后将 5 张卡片分发给两个不同的玩家。因为每张牌必须一次发给不同的玩家。
通常我会做这样的事情来获得一个随机数
local newDeck = {} --assume this array has all 52 cards in a playing deck
math.randomseed( os.time() )
local card = math.random(#newDeck)
...但问题似乎是专门要求我不使用常用数学函数。
(不要使用像 array.randomize() 这样的东西)
这样做有什么好处?我无法想象这样一款游戏的玩家甚至会注意到随机和伪随机之间的区别。
最佳答案
要是这么简单就好了。语言中的大多数随机数生成器都是线性同余生成器,这意味着下一项 J
,比如说,与前一个有关I
通过
J = (aI + b) mod c
在哪里a
, b
, c
是常数。
这意味着可以从单个数字的项中破译序列!(这是一组联立方程,在处理模数时有些技巧)。
我想说的是,精明的玩家必然会注意到您的序列的伪随机性质,甚至可能通过取消选择您的生成器来游戏系统。您需要使用更复杂的方案。 (早期尝试包括 Park-Miller 和 Bays-Durham;相当知名的方法)。
关于algorithm - 我什么时候应该编写自己的随机数算法而不是使用常用的数学函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19612653/