洗牌算法
阿新 • • 發佈:2018-01-20
i++ style 是否 shuf 遍歷 body ring write col
原理:遍歷所有牌(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; } }
洗牌算法