void AddHuluKeyToList(CardInfo[] cards, float score)
        {
            if (isCheckSuitCount)
            {
                int[]        value      = new int[14];
                List <int>[] suitCounts = new List <int>[4]
                {
                    new List <int>(value), new List <int>(value), new List <int>(value), new List <int>(value)
                };

                for (int i = 0; i < cards.Length; i++)
                {
                    suitCounts[cards[i].suit][cards[i].value]++;
                    if (suitCounts[cards[i].suit][cards[i].value] > limitSameSuitCount)
                    {
                        return;
                    }
                }
            }


            if (cards[0].value == cards[1].value &&
                cards[0].value == cards[2].value &&
                cards[0].value == cards[3].value &&
                cards[0].value == cards[4].value)
            {
                return;
            }

            CardKey cardkey = new CardKey();

            for (int i = 0; i < cards.Length; i++)
            {
                cardkey = AppendCardToCardKey(cardkey, cards[i].value, cards[i].suit);
            }

            AddToDict(huluKeyDict, cardkey, 0, score);

            //
            int   tmp1;
            float score2 = score;
            float tmpScore;

            if (cards[0].value < cards[3].value)
            {
                score2 = CardsTypeEvaluation.GetHuLuBaseScore(cards[3].value, cards[0].value);
            }

            for (int i = 0; i < 4; i++)
            {
                tmp1           = cards[i].value;
                cards[i].value = -1;

                cardkey = new CardKey();
                for (int j = 0; j < cards.Length; j++)
                {
                    if (cards[j].value == -1)
                    {
                        continue;
                    }

                    cardkey = AppendCardToCardKey(cardkey, cards[j].value, cards[j].suit);
                }

                if (i > 2)
                {
                    tmpScore = score2;
                }
                else
                {
                    tmpScore = score;
                }

                AddToDict(huluKeyDict, cardkey, 1, tmpScore);
                cards[i].value = tmp1;
            }
        }
        /// <summary>
        /// 生成葫芦字典
        /// </summary>
        void CreateHuluDict()
        {
            huluKeyDict.Clear();

            CardInfo[] cards = new CardInfo[5]
            {
                new CardInfo(), new CardInfo(),
                new CardInfo(), new CardInfo(),
                new CardInfo()
            };

            float score = 0;
            float a, b;

            for (int i = 1; i <= 13; i++)
            {
                cards[0].value = i;
                cards[1].value = i;
                cards[2].value = i;

                for (int s0 = 0; s0 < 4; s0++)
                {
                    cards[0].suit = s0;

                    for (int s1 = 0; s1 < 4; s1++)
                    {
                        cards[1].suit = s1;

                        for (int s2 = 0; s2 < 4; s2++)
                        {
                            cards[2].suit = s2;

                            for (int j = 1; j <= 13; j++)
                            {
                                cards[3].value = j;
                                cards[4].value = j;

                                if (i == 1)
                                {
                                    a = 14;
                                }
                                else
                                {
                                    a = i;
                                }

                                if (j == 1)
                                {
                                    b = 14;
                                }
                                else
                                {
                                    b = j;
                                }

                                score = CardsTypeEvaluation.GetHuLuBaseScore(a, b);

                                for (int m0 = 0; m0 < 4; m0++)
                                {
                                    cards[3].suit = m0;

                                    for (int m1 = 0; m1 < 4; m1++)
                                    {
                                        cards[4].suit = m1;

                                        AddHuluKeyToList(cards, score);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }