MySQL的RAND()是否适合用于卡片游戏的“洗牌”卡片?

时间:2011-02-18 21:33:32

标签: mysql random probability

我有一个扑克和二十一点游戏,在MySQL数据库中存储一个基卡牌组。为了洗牌,我使用ORDER BY RAND()随机订购表格,然后将卡片按顺序插入另一张表格中。使用RAND()会导致玩真实牌和物理混乱的现实赔率,还是这个功能不够随机?

2 个答案:

答案 0 :(得分:5)

除非你经常练习,否则使用真实卡片进行随机播放并不是那么随意。不正确地进行洗牌很容易,因此包装的顶部或底部都没有很好地改组。

使用ORDER BY RAND()进行混洗是一种合理的方法,但有一些事情需要注意:

  • 如果RAND()生成两个完全相同的随机数,则会引入轻微的偏差,因为它不会相对于彼此正确地混洗这两个卡。
  • RAND()不具有加密安全性。通过查看套牌中的第一张牌,技术娴熟的攻击者可能会推断出用于洗牌的PRNG的内部状态,从而预测剩余的牌。
  • ORDER BY RAND()需要O(n log(n))次操作。例如,它很可能具有可以接受的洗牌52行的性能,但它可能不是你想要用于洗牌数百万行的东西。

出于娱乐目的,您的方法应该没问题。如果这是为了赚钱,你可能想要使用更好的shuffle算法,例如Fisher Yates shuffle和加密安全的随机数生成器。

答案 1 :(得分:0)

供您使用:可能。

从游戏行业的角度来看:没有。

内华达州博彩委员会监督批准的游戏的可能性和随机性。出于这样的目的,消除RE随机化器的可能性符合房屋的利益,因此真正的游戏软件使用必须通过认证方法(通常使用一些自然混乱输入)获得的“真正的随机”种子。银行通常会使用类似的工具。

如需进一步阅读,请参阅LavaRand

http://www.lavarand.com/