1. C#代碼實現 - 撲克牌排序

    2021-03-11 11:04發布

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


    我做的這個是由(1-13:黑桃A-K || 14 - 26:紅桃 || 27 - 39:梅花 || 39 - 52 : 方片 || 53.54:小王.大王)表示的一副撲克牌,,,這樣對數組可以根據下面的sendFlower方法取得撲克花色返回值代表花色(3.2.1.0 分別是 黑.紅.梅.方.),對數組值取模等于撲克點數(如:25%13 = 12 是Q),,,


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

    比如說:賴子斗地主的時候,當選出賴子牌之后,就需要對手牌再次排序,那么new List來存一下賴子牌,

    選定賴子牌之后,存到list中,再次調用排序,組拼就可以實現,你想要的手牌排序的數組,,,那么在通過某種形式讓他顯示出來就可以了。。。


    上代碼 :

    //參數:要排序的牌值數組 & 數組長度

    public int[] PaiXu(int[] card, int number = 0)  

    {

            //Debug.Log(" ... 對手牌 進行 牌值 花色 的排序 ... ... ");

            if (number == 0){ number = card.Length; }

            if (card.Length == 0){ return card; }


            // ==========  根據牌值進行排序  ===============

            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 =======  根據花色分組 ..大小王 單獨一組 ...后續對花色中的 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>

        ///  根據傳入牌組 的順序 進行組拼  

        /// </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>

        /// 根據牌值取花色 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:代碼僅供參考,優化自行處理…



    ————————————————

    版權聲明:本文為CSDN博主「妳是我改卟了的bug」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

    原文鏈接:https://blog.csdn.net/Czhenya/article/details/83246231



    日日摸夜夜添夜夜添无码,free性欧美极度另类,超清中文乱码字幕在线观看,真人美女两腿张开露PP图片