原理:遍历所有牌(52+大小王),每张牌随机一个小于54的数,交换当前遍历的index和随机数对应数组下标的值。random 方法为伪随机,并非等概率随机。
c#实现:
private static void Shuffle () { // 扑克牌初始化 List<string> allCard = new List<string>(); for (int i = 0; i < 54; i++) { allCard.Add(i); } // 定义随机数 Random random = new Random (); // 从数组的最后一个数开始递减 for (int i = allCard.Count - 1; i > 0; i--) { // 随机下标 int index = random.Next (0, i); // 随机出来的数与最后位置的数交换 string temp = allCard [i]; allCard [i] = allCard [index]; allCard [index] = temp; } foreach (string item in allCard) { Console.WriteLine (item); } }
获取牌类型:数组值除以13是否大于4,是则是大小王,否则为普通牌
c#实现:
for (int i = 0; i < allCard.Count; i++) { if (allCard [i] / 13 > 4) { if (allCard [i] % 4 == 1) { //小王 } else { /大王 } } else { //cardType为0时为黑桃,以次类推,cardNum代表A到K,可以以cardType_cardNum作为牌图片索引。 int cardType = allCard [i] / 13; int cardNum = allCard [i] % 13; } }