亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#代碼實現(xiàn)撲克牌排序的幾種方式

 更新時間:2018年10月24日 14:21:33   作者:Czhenya  
今天小編就為大家分享一篇關于C#代碼實現(xiàn)撲克牌排序,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

撲克牌游戲,總是能用到很多的手牌排序,總結了幾種方式供參考,順便記錄一下方便以后使用。

我做的這個是由(1-13:黑桃A-K || 14 - 26:紅桃 || 27 - 39:梅花 || 39 - 52 : 方片 || 53.54:小王.大王)表示的一副撲克牌,這樣對數(shù)組除以13等于撲克花色(如:25/13 = 2 是紅桃),對數(shù)組值取模等于撲克點數(shù)(如:25%13 = 12 是Q),這樣25就表示了紅桃Q的撲克牌。

當處理特殊規(guī)則的時候單獨寫一個List,在組拼就可以了。

比如說:賴子斗地主的時候,當選出賴子牌之后,就需要對手牌再次排序,那么new List來存一下賴子牌,選定賴子牌之后,存到list中,再次調用排序,組拼就可以實現(xiàn),你想要的手牌排序的數(shù)組,那么在通過某種形式讓他顯示出來就可以了。

上代碼 :

 //參數(shù):要排序的牌值數(shù)組 & 數(shù)組長度
 public int[] PaiXu(int[] card, int number = 0) 
 {
    //Debug.Log(" ... 對手牌 進行 牌值 花色 的排序 ... ... ");
    if (number == 0){ number = card.Length; }
    if (card.Length == 0){ return card; }
    // ========== 根據(jù)牌值進行排序 ===============
    int temp = 0;
    for (int i = 0; i < card.Length; i++) //冒泡排序... 從大到小
    {
      for (int j = 0; j < card.Length - 1 - i; j++)
      {
        if (card[j] < card[j + 1])
        {
          temp = card[j];
          card[j] = card[j + 1];
          card[j + 1] = temp;
        }
      }
    }    
    List<int> hei = new List<int>();
    List<int> hong = new List<int>();
    List<int> mei = new List<int>();
    List<int> fang = new List<int>();
    List<int> wang = new List<int>();
    for (int i = 0; i < card.Length; i++)
    {
      #region ======= 根據(jù)花色分組 ..大小王 單獨一組 ...后續(xù)對花色中的 A 單獨處理 =========
      switch (sendFlower(card[i]))
      {
        case 3: //黑桃          
          hei.Add(card[i]);
          break;
        case 2: //紅桃         
          hong.Add(card[i]);
          break;
        case 1: //梅花          
          mei.Add(card[i]);
          break;
        case 0: //方片          
          fang.Add(card[i]);
          break;
        case 4: //小王
        case 5: //大王
          wang.Add(card[i]);
          break;
      }
      #endregion
    }
    QuA(hei); // 對A 的單獨處理
     QuA(hong);
    QuA(mei);
    QuA(fang);
    #region ========== 合并 排序后的牌組========
    List<int> cardlist = new List<int>(); 
    for (int i = 0; i < wang.Count; i++)  //王
    {
      cardlist.Add(wang[i]);
    }
    // ==========合并 組拼 ============
    List<int> cardtemp = new List<int>();   
    cardtemp = PaiXuZuPin(hei, hong, mei, fang);
    for (int i = 0; i < cardtemp.Count; i++)
    {
      cardlist.Add(cardtemp[i]);
    } 
    int[] cards = new int[cardlist.Count];
    for (int i = 0; i < cardlist.Count; i++)
    {
      cards[i] = cardlist[i];
    }
    #endregion        
    return cards;   
  } 
  /// <summary>
  /// 取A  -- 把每個花色牌中的A,放到前面(A.K.Q.J...)
  /// </summary>
  /// <param name="hei">花色牌</param> 
  void QuA(List<int> hei)
  {
    if (hei.Count == 0) return;
    List<int> cardlist = new List<int>();
    for (int i = 0; i < hei.Count; i++) // 將牌添加到新列表
    {
      cardlist.Add(hei[i]);
    }
    if (hei.Count > 2)
    {
      if (hei[hei.Count - 2] % 13 == 1)  //如果有兩個A (對兩幅牌的處理)
      {
        cardlist.Insert(0, hei[hei.Count - 2]);
        cardlist.Insert(0, hei[hei.Count - 1]);
        for (int i = 0; i < hei.Count; i++)
        {
          hei[i] = cardlist[i];
        }
        return;
      }
    }    
    if (hei[hei.Count - 1] % 13 == 1)  //如果有一個A
    {
      cardlist.Insert(0, hei[hei.Count - 1]);
    }
    for (int i = 0; i < hei.Count; i++)
    {
      hei[i] = cardlist[i];
    }   
  }
 /// <summary>
  /// 根據(jù)傳入牌組 的順序 進行組拼 
  /// </summary>
 public List<int> PaiXuZuPin(List<int> one, List<int> two, List<int> three, List<int> four)
  {
    List<int> cardlist = new List<int>();
    for (int i = 0; i < one.Count; i++)  
    {
      cardlist.Add(one[i]);
    }
    for (int i = 0; i < two.Count; i++)  
    {
      cardlist.Add(two[i]);
    }
    for (int i = 0; i < three.Count; i++)  
    {
      cardlist.Add(three[i]);
    }
    for (int i = 0; i < four.Count; i++)    
    {
      cardlist.Add(four[i]);
    }
    return cardlist;
  }
  /// <summary>
  /// 根據(jù)牌值取花色 5:大王 | 4:小王 | 3:黑桃 | 2:紅桃 | 1:梅花 | 0:方片 
  /// </summary>
  /// <param name="card"></param>
  public int sendFlower(int card)
  {
    if (card >= 1 && card <= 13)
    {
      return 3;
    }else if (card >= 14 && card <= 26)
    {
      return 2;
    }
    else if (card >= 27 && card <= 39)
    {
      return 1;
    }
    else if (card >= 40 && card <= 52)
    {
      return 0;
    }
    else if (card == 53)
    {
      return 4;
    }
    return 5;
  }

PS:代碼僅供參考,優(yōu)化自行處理

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

相關文章

  • c#中DataTable轉List的2種方法示例

    c#中DataTable轉List的2種方法示例

    這篇文章主要給大家介紹了關于c#中DataTable轉List的2種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C#實現(xiàn)char字符數(shù)組與字符串相互轉換的方法

    C#實現(xiàn)char字符數(shù)組與字符串相互轉換的方法

    這篇文章主要介紹了C#實現(xiàn)char字符數(shù)組與字符串相互轉換的方法,結合實例形式簡單分析了C#字符數(shù)組轉字符串及字符串轉字符數(shù)組的具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-02-02
  • C# Socket通信的實現(xiàn)(同時監(jiān)聽多客戶端)

    C# Socket通信的實現(xiàn)(同時監(jiān)聽多客戶端)

    這篇文章主要介紹了C# Socket通信的實現(xiàn)(同時監(jiān)聽多客戶端),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#/VB.NET實現(xiàn)從PPT中提取圖片的示例代碼

    C#/VB.NET實現(xiàn)從PPT中提取圖片的示例代碼

    PPT是用于制作幻燈片(演示文稿)的應用軟件,每張幻燈片中都可以包含文字、圖形、圖形、表格、聲音和影像等多種信息。本文主要介紹了如何實現(xiàn)從PPT中提取圖片的功能,需要的可以參考一下
    2023-03-03
  • 深入理解c#多態(tài)

    深入理解c#多態(tài)

    這篇文章主要介紹了c#多態(tài)的相關知識,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • C#中委托的進一步理解

    C#中委托的進一步理解

    這篇文章主要介紹了C#中委托的進一步理解,本文講解了委托類型、建立委托鏈、移除委托鏈等內容,需要的朋友可以參考下
    2015-02-02
  • C#使用DirectX.DirectSound播放語音

    C#使用DirectX.DirectSound播放語音

    這篇文章主要為大家詳細介紹了C#使用DirectX.DirectSound播放語音,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C#使用xsd文件驗證XML格式是否正確的實現(xiàn)方法

    C#使用xsd文件驗證XML格式是否正確的實現(xiàn)方法

    這篇文章主要介紹了C#使用xsd文件驗證XML格式是否正確的實現(xiàn)方法,結合實例形式分析了C#針對xml文件的創(chuàng)建、驗證相關操作技巧,需要的朋友可以參考下
    2017-01-01
  • C#字符串左不足位數(shù)時補充0的幾種方式

    C#字符串左不足位數(shù)時補充0的幾種方式

    想讓一個整數(shù)或字符串轉換為字符串后,如果其長度不足5位,則在左邊補充0直到達到5位,本文給大家介紹了C#字符串左不足位數(shù)時補充0的幾種方式,感興趣的朋友可以參考下
    2024-04-04
  • C#中比較常用的DateTime結構的使用方法

    C#中比較常用的DateTime結構的使用方法

    這篇文章主要介紹了C#中比較常用的DateTime結構的使用方法,需要的朋友可以參考下
    2015-11-11

最新評論