⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddzdesk.cs

📁 ddz(C#后C++核心)ddz(C#后C++核心)ddz(C#后C++核心)ddz(C#后C++核心)ddz(C#后C++核心)ddz(C#后C++核心)
💻 CS
📖 第 1 页 / 共 5 页
字号:
                if (tmpPaiArray[i] == 4)
                {
                    m4 = i;
                }
                if (tmpPaiArray[i] == 2)
                {
                    m2++;
                }
                if (tmpPaiArray[i] == 1)
                {
                    m1++;
                }
            }
            if (m4 > 0 && m2 * 2 + m1 == 2)
            {
                for (int k = 0; k < paiArrayList.Count; k++)
                {
                    int pai = int.Parse(paiArrayList[k].ToString());
                    if (m4 == (pai / 10) % 100)
                    {
                        return pai;
                    }
                }
            }

            return 0;
        }

        // > 5 判断是否是单顺(莲子),此函数适合5-12张牌情况;(返回最小单牌,0 表示不是单顺)
        private int IsOneTrain(string paistrlist)
        {
            ArrayList paiArrayList = new ArrayList(paistrlist.Split(','));
            paiArrayList.Sort();

            int m_nTypeValue = 0;	     //单牌的起始大小;
            int counter = 0;             //总牌张数;
            counter = paiArrayList.Count;
            if (counter < 5 || counter > 12)
                return 0;

            for (int i = 0; i < paiArrayList.Count; i++)
            {
                int m_ben = int.Parse(paiArrayList[i].ToString()) / 10;
                if (m_ben >= 113)  //有2 或 鬼直接返回
                {
                    return 0;
                }
                if (i == 0)
                {
                    m_nTypeValue = m_ben;
                }
                else
                {
                    if (m_nTypeValue + i != m_ben)  //判断是否比上一张大一
                    {
                        return 0;
                    }
                }
            }
            return int.Parse(paiArrayList[0].ToString());
        }

        // > 6 判断是否是双顺(姊妹对);此函数适合6-20张牌情况;(返回最小牌,0 表示不是双顺)
        private int IsTwoTrain(string paistrlist)
        {
            ArrayList paiArrayList = new ArrayList(paistrlist.Split(','));
            paiArrayList.Sort();

            int m_nTypeValue = 0;	     //单牌的起始大小;
            int counter = 0;             //总牌张数;
            counter = paiArrayList.Count;
            if (counter < 6 || counter > 20 || counter % 2 == 1)
                return 0;

            for (int i = 0; i < paiArrayList.Count; i++)
            {
                int m_ben = int.Parse(paiArrayList[i].ToString()) / 10;
                if (m_ben >= 113)  //有2 或 鬼直接返回
                {
                    return 0;
                }
                if (i == 0)
                {
                    m_nTypeValue = m_ben;
                }
                else
                {
                    if (m_nTypeValue + i / 2 != m_ben)  //判断比上一张大一或等于上一张(i为单数就等于,双数就大一)
                    {
                        return 0;
                    }
                }
            }
            return int.Parse(paiArrayList[0].ToString());
        }

        // = 6 判断是否是飞机(不带牌);此函数适合6-18张牌情况;(返回最小顺牌,0 表示不是三顺)
        private int Is33(string paistrlist)
        {
            ArrayList paiArrayList = new ArrayList(paistrlist.Split(','));
            paiArrayList.Sort();

            int counter = 0;                        //总牌张数;
            counter = paiArrayList.Count;
            if (counter < 6 || counter > 18)
                return 0;

            int m_startValue = 0;	                //三顺的起始牌
            int[] tmpPaiArray = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };  //保存对应大小牌的张数
            for (int i = 0; i < paiArrayList.Count; i++)
            {
                int pai = int.Parse(paiArrayList[i].ToString());
                int index = (pai > 5000) ? (pai / 10) % 100 + 13 : (pai / 10) % 100;            //判断大小鬼
                tmpPaiArray[index]++;
            }

            for (int i = 1; i < tmpPaiArray.Length - 3; i++)
            {
                counter = 0;
                if (tmpPaiArray[i] == 3)
                {
                    counter++;
                    m_startValue = i;
                    for (int j = i + 1; j < tmpPaiArray.Length; j++)    //从表第i+1项开始扫描;
                    {
                        if (tmpPaiArray[j] == 3)
                        {
                            counter++;
                        }
                        else
                        {                           
                            for (int k = j; k < tmpPaiArray.Length; k++)
                            {
                                if (tmpPaiArray[k] != 0)
                                {
                                    counter++;
                                    return 0;
                                }
                            }

                            if (counter > 1)
                            {
                                for (int k = 0; k < paiArrayList.Count; k++)
                                {
                                    int pai = int.Parse(paiArrayList[k].ToString());
                                    if (m_startValue == (pai / 10) % 100)
                                    {
                                        return pai;
                                    }
                                }
                            }
                            break;
                        }
                    }
                    return 0;
                }
                else if(tmpPaiArray[i] != 0)
                {
                    return 0;
                }
            }
            return 0;
        }

        // = 6 判断是否是飞机(带牌);此函数适合6-20张牌情况;(返回最小顺牌,0 表示不是三顺) ______ 该算法包含了 Is33
        private int Is33_Tail(string paistrlist)
        {
            ArrayList paiArrayList = new ArrayList(paistrlist.Split(','));
            paiArrayList.Sort();

            int counter = 0;                        //总牌张数;
            counter = paiArrayList.Count;
            if (counter < 6 || counter > 20)
                return 0;

            int m_startValue = 0;	                //三顺的起始牌
            int[] tmpPaiArray = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };  //保存对应大小牌的张数
            for (int i = 0; i < paiArrayList.Count; i++)
            {
                int pai = int.Parse(paiArrayList[i].ToString());
                int index = (pai > 5000) ? (pai / 10) % 100 + 13 : (pai / 10) % 100;            //判断大小鬼
                tmpPaiArray[index]++;
            }

            for (int i = 1; i < tmpPaiArray.Length - 3; i++)
            {
                int m1 = 0;
                counter = 0;
                if (tmpPaiArray[i] > 2)
                {
                    if (tmpPaiArray[i] > 3) m1++;
                    counter++;
                    m_startValue = i;
                    for (int j = i + 1; j < tmpPaiArray.Length; j++)    //从表第i+1项开始扫描;
                    {
                        if (tmpPaiArray[j] > 2 && j < tmpPaiArray.Length - 3)
                        {
                            if (tmpPaiArray[j] > 3) m1++;
                            counter++;
                            i++;
                        }
                        else
                        {
                            if (counter < 2) break;
                            int m2 = 0, m3 = 0, m4 = 0;
                            int mz = m1;

                            #region 统计不连续的牌张
                            for (int k = j; k < tmpPaiArray.Length; k++)
                            {
                                if (tmpPaiArray[k] == 1)
                                {
                                    m1++;
                                }
                                else if (tmpPaiArray[k] == 2)
                                {
                                    m2++;
                                }
                                else if (tmpPaiArray[k] == 3)
                                {
                                    m3++;
                                }
                                else if (tmpPaiArray[k] == 4)
                                {
                                    m4++;
                                }
                            }
                            for (int k = 1; k < m_startValue; k++)
                            {
                                if (tmpPaiArray[k] == 1)
                                {
                                    m1++;
                                }
                                else if (tmpPaiArray[k] == 2)
                                {
                                    m2++;
                                }
                                else if (tmpPaiArray[k] == 3)
                                {
                                    m3++;
                                }
                                else if (tmpPaiArray[k] == 4)
                                {
                                    m4++;
                                }
                            }
                            #endregion

                            if (counter == m1 + m2 * 2 + m3 * 3 + m4 * 4 ||
                                (counter == m2 + m4 * 2 && m1 == 0 && m3 == 0) ||
                                (counter == 3 && mz == 1 && m1 + m2 + m3 + m4 == mz && tmpPaiArray[m_startValue + 1] == 3) ||
                                 m1 + m2 + m3 + m4 + mz == 0 ||
                                (counter == 5 && mz == 1 && m1 + m2 + m3 + m4 == mz && (tmpPaiArray[m_startValue] == 4 || tmpPaiArray[i] == 4))
                                )
                            {
                                for (int k = 0; k < paiArrayList.Count; k++)
                                {
                                    int pai = int.Parse(paiArrayList[k].ToString());
                                    if (m_startValue == (pai / 10) % 100)
                                    {
                                        return pai;
                                    }
                                }
                            }
                            break;
                        }
                    }
                    m_startValue = 0;
                }
            }
            return 0;
        }

        // = 8 判断是否是四带两对;      
        private int Is4_22(string paistrlist)
        {
            ArrayList paiArrayList = new ArrayList(paistrlist.Split(','));
            paiArrayList.Sort();

            int counter = 0;                        //总牌张数;
            counter = paiArrayList.Count;
            if (counter != 8)
                return 0;

            int[] tmpPaiArray = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };  //保存对应大小牌的张数
            for (int i = 0; i < paiArrayList.Count; i++)
            {
                int pai = int.Parse(paiArrayList[i].ToString());
                int index = (pai > 5000) ? (pai / 10) % 100 + 13 : (pai / 10) % 100;            //判断大小鬼
                tmpPaiArray[index]++;
            }

            int m4 = 0, m2 = 0;
            for (int i = 1; i < tmpPaiArray.Length; i++)
            {
                if (tmpPaiArray[i] == 4)
                {
                    m4 = i;
                }
                if (tmpPaiArray[i] == 2)
                {
                    m2++;
                }
            }
            if (m4 > 0 && m2 == 2)
            {
                for (int k = 0; k < paiArrayList.Count; k++)
                {
                    int pai = int.Parse(paiArrayList[k].ToString());
                    if (m4 == (pai / 10) % 100)
                    {
                        return pai;
                    }
                }
            }
            return 0;
        }
       
        #endregion

        /*检查出牌的逻辑合法性
         * 函数介绍:检查出牌的逻辑合法性;
         * 输入参数:paistrlist 牌值字符串,中间用逗号隔开,不出就是 "pass" 字符;
         * 返回值 : 匹配成功返回1,不成功返回0;
         */
        private int CheckChuPai(string paistrlist)
        {
            paiMin = 0;                                 //牌型最小值
            paiType = PaiType.Not;                      //牌型
            chuPaiCount = paistrlist.Length / 5 + 1;    //牌总张数

            #region 1到4张牌的判断 (包括 Pass)
            if (paistrlist == "pass")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -