2011-02-18 71 views
2

我有一個撲克和二十一點遊戲,它將一張基卡卡片存儲在一個MySQL數據庫中。爲了洗牌,我使用ORDER BY RAND()隨機地訂購表格,並按照該順序將卡片插入到不同的表格中。使用RAND()會導致逼真的賠率,這種賠率會被真實的牌和物理洗牌玩弄,或者這個功能不夠隨機?MySQL的RAND()足夠用於紙牌遊戲的「洗牌」牌套牌嗎?

回答

5

與真正的卡片混洗並不是真的都是隨機的,除非你練習很多。不正確地洗牌很容易,因此包裝的頂部或底部不能很好地洗好。

使用ORDER BY RAND()洗牌是一種合理的做法,但也有一些事情需要注意的:

  • 如果由RAND產生了兩個完全相等的隨機數引入略有偏差()作爲它不會將這兩張卡相互正確地洗牌。
  • RAND()不是密碼安全的。通過觀察甲板上的一些第一張牌,熟練的攻擊者可以推斷用於洗牌的PRNG的內部狀態,並因此預測剩餘的牌。
  • ORDER BY RAND()需要O(n log(n))操作。例如,它很可能具有可接受的性能來混洗52行,但它可能不是您想要用於洗牌數百萬行的東西。

爲了娛樂目的,你的方法應該沒問題。如果這是嚴重的錢,你可能想使用更好的洗牌算法,如Fisher Yates shuffle和密碼安全的隨機數發生器。

0

供您使用:可能。

從遊戲行業來看:

內華達州博彩委員會監督的可能性,並在這裏批准了遊戲的隨機性。爲了達到這個目的,消除隨機發生器RE的可能性是符合房屋利益的,所以真正的遊戲軟件使用必須通過認證方法(通常使用一些自然混沌輸入)獲得的到期「真隨機」種子。銀行通常會使用類似的工具。

如要進一步瞭解,請參閱LavaRand

http://www.lavarand.com/