示例#1
0
        //----------------------------------------------------------------end

        /// <summary>
        /// 检测出的牌可能组成的顺子
        /// </summary>
        /// <param name="cdsplitStruct"></param>
        /// <param name="hdSplitSutuct">所有手牌</param>
        private int[] CheckPossbShunzi(CdSplitStruct cdsplitStruct, CdSplitStruct hdSplitSutuct)
        {
            var danCds = cdsplitStruct.DanCds;

            if (cdsplitStruct.OrgCds.Length != danCds.Count || danCds.Count < 2)
            {
                return(null);
            }

            //排序好的 框出来的牌
            var sortedCds = PokerRuleUtil.GetSortedValues(danCds.ToArray());

            var listTemp = new List <int>();

            listTemp.AddRange(hdSplitSutuct.DanCds);
            listTemp.AddRange(hdSplitSutuct.DuiCds);
            listTemp.AddRange(hdSplitSutuct.ThreeCds);
            listTemp.AddRange(hdSplitSutuct.FourCds);

            var keys = listTemp.ToArray();

            var allposbShunList = PokerRuleUtil.GetAllPossibleShun(keys, 5);

            if (allposbShunList == null || allposbShunList.Count < 1)
            {
                return(null);
            }

            //存手牌中最终找到的那组顺牌
            var findShun = new List <int>();

            foreach (var shunCds in allposbShunList)
            {
                var shuncdsLen = shunCds.Length;
                if (shuncdsLen >= 5)
                {
                    if (shunCds[0] <= sortedCds[0] && shunCds[shuncdsLen - 1] >= sortedCds[sortedCds.Length - 1])
                    {
                        findShun.Clear();
                        findShun.AddRange(shunCds);
                        break;
                    }
                }
            }
            if (findShun.Count < 1)
            {
                return(null);
            }

            return(findShun.ToArray());
        }
示例#2
0
        /// <summary>
        /// 检测出牌可能组成的连对
        /// </summary>
        /// <param name="cdsplitStruct"></param>
        /// <param name="hdSplitSutuct"></param>
        /// <returns></returns>
        private int[] CheckpossbLianDui(CdSplitStruct cdsplitStruct, CdSplitStruct hdSplitSutuct)
        {
            var danCds = cdsplitStruct.DanCds;
            var duiCds = cdsplitStruct.DuiCds;

            if (cdsplitStruct.OrgCds.Length != danCds.Count + duiCds.Count * 2 || (danCds.Count + duiCds.Count) < 2)
            {
                return(null);
            }

            var chooseCdsValueList = new List <int>();

            chooseCdsValueList.AddRange(danCds);
            chooseCdsValueList.AddRange(duiCds);
            chooseCdsValueList.Sort();

            //存手牌中对牌的值列表
            var allduiHandCdValue = hdSplitSutuct.DuiCds;

            //框选出的牌
            var chooseCds = chooseCdsValueList.ToArray();
            //所有可能的连对 组
            var alposbLdList = PokerRuleUtil.GetAllPossibleShun(allduiHandCdValue.ToArray(), 3);

            if (alposbLdList == null || alposbLdList.Count < 1)
            {
                return(null);                                             //没有找到符合条件的连对
            }
            var findLd = new List <int>();

            foreach (var ldCds in alposbLdList)
            {
                var ldLen = ldCds.Length;
                if (ldLen >= 3)
                {
                    if (ldCds[0] <= chooseCds[0] &&
                        ldCds[ldCds.Length - 1] >= chooseCds[chooseCds.Length - 1])
                    {
                        findLd.Clear();
                        findLd.AddRange(ldCds);
                        break;
                    }
                }
            }

            if (findLd.Count < 1)
            {
                return(null);                  //没有找到符合条件的连对
            }
            var findldLen   = findLd.Count;
            var returnLdCds = new int[findldLen * 2];
            int j           = 0;

            for (int i = 0; i < findldLen; i++)
            {
                returnLdCds[j++] = findLd[i];
                returnLdCds[j++] = findLd[i];
            }

            return(returnLdCds);
        }