棋牌類游戲中的洗牌和發(fā)牌算法
2019-11-14 17:20 作者:博毅創(chuàng)為 | 我要投稿
洗牌和發(fā)牌是棋牌類游戲中,非常重要的兩個關(guān)鍵節(jié)點,而這兩個關(guān)鍵節(jié)點涉及的算法,很多同學非常感興趣,今天,我們就以NodeJS環(huán)境為例,通過JS代碼給大家解說洗牌和發(fā)牌算法。(交流群:872282999)
一、 洗牌算法
1. 采用隨機交換策略
【方法一】核心思想:隨機產(chǎn)生一個位置與當前位置的牌交換。

運行結(jié)果如下:

【方法二】核心思想:隨機產(chǎn)生一個位置與第一張牌進行交換,交換的輪次越多,理論上次序越亂。

運行結(jié)果如下:

2. 采用隨機排序策略

運行結(jié)果如下:

二、 發(fā)牌算法
發(fā)牌:實質(zhì)上是將一副打亂順序后的撲克牌,保留一定底牌后,分給幾個不同的玩家。
思路一:由于牌已經(jīng)打亂了,所以我們可以用撲克牌的總張數(shù)-底牌數(shù)(arr.length-reservedNum),再拿此數(shù)值÷玩家數(shù)。得到每個玩家應(yīng)該得到的牌的張數(shù)(暫時不考慮不能整除的情況)。之后調(diào)用數(shù)組的slice方法從特定序號取牌分發(fā)給玩家即可。

運算結(jié)果如下:

思路二:一張張的從數(shù)組中取牌,直到數(shù)組中牌的數(shù)量小于等于底牌數(shù)為止。

運行結(jié)果如下:

實質(zhì)上洗牌我們就是利用了交換兩個變量的位置,發(fā)牌利用了數(shù)組的相關(guān)方法。當然我們還有其他方法可以實現(xiàn)。(交流群:872282999)
標簽: