最近写了一个梭哈牌戏Demo,简单介绍用到的洗牌算法。123456789101112131415161718public void shuffle(){ // 随机位数索引 int tmpIndex; // 临时存储数组当前值 Card tmpCard; for (int i = 0; i < CardDeck.DECK_SIZE; i++) { tmpIndex = (int)(Math.random() * CardDeck.DECK_SIZE); if (tmpIndex != i) { tmpCard = cards[tmpIndex]; cards[tmpIndex] = cards[i]; cards[i] = tmpCard; } } return;}
思想:从数组第一位开始,随机random一个数字,第一位和随机出的那位交换;然后依次遍历这个过程到最后一张牌。时间复杂度O(n),空间复杂度O(1)。
优点:与抽牌算法(随机抽牌放到新数组,直到抽完为止)相比,当前洗牌算法随机性更强,已随机的位数仍会与后面随机的数位交换;无需开辟新数组,空间复杂度降低。
另外,Demo与传统梭哈相比,加入五张鬼牌,难度升级。
牌型判断及简单机器博弈算法还是有点难度的。感兴趣可看下Demo:Github链接