1. 程式人生 > >洗牌算法

洗牌算法

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; }   }

洗牌算法