洗牌算法

原理:遍历所有牌(52+大小王),每张牌随机一个小于54的数,交换当前遍历的index和随机数对应数组下标的值。random 方法为伪随机,并非等概率随机。
c#实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  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#实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  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;
}
  }