洗牌和發牌是棋牌類游戲中,非常重要的兩個關鍵節點,而這兩個關鍵節點涉及的算法,很多同學非常感興趣,今天,我們就以NodeJS環境為例,通過JS代碼給大家解說洗牌和發牌算法。
一、 洗牌算法
1. 采用隨機交換策略
【方法一】核心思想:隨機產生一個位置與當前位置的牌交換。
運行結果如下:
【方法二】核心思想:隨機產生一個位置與第一張牌進行交換,交換的輪次越多,理論上次序越亂。
運行結果如下:
2. 采用隨機排序策略
運行結果如下:
二、 發牌算法
發牌:實質上是將一副打亂順序后的撲克牌,保留一定底牌后,分給幾個不同的玩家。
思路一:由於牌已經打亂了,所以我們可以用撲克牌的總張數-底牌數(arr.length-reservedNum),再拿此數值÷玩家數。得到每個玩家應該得到的牌的張數(暫時不考慮不能整除的情況)。之后調用數組的slice方法從特定序號取牌分發給玩家即可。
運算結果如下:
思路二:一張張的從數組中取牌,直到數組中牌的數量小於等於底牌數為止。
運行結果如下:
實質上洗牌我們就是利用了交換兩個變量的位置,發牌利用了數組的相關方法。