Exemplo n.º 1
0
        private static void find(CardRank rank, ref Card[] cards, ref CardRankDictionary result)
        {
            if (cards.Length < cardsNum[Convert.ToInt32(rank)])
            {
                return;
            }

            Card[] foundCards = new Card[cardsNum[Convert.ToInt32(rank)]];
            int    found      = 0;

            findRecursive(rank, ref cards, 0, ref foundCards, found, ref result);
        }
Exemplo n.º 2
0
        public static CardRank GetCardRank(ref uint[] cards)
        {
            Card[] sortCards = new Card[cards.Length];
            for (int i = 0; i < cards.Length; i++)
            {
                sortCards[i] = new Card(cards[i]);
            }

            Array.Sort(sortCards);

            CardRankDictionary ret = new CardRankDictionary();

            for (CardRank rank = CardRank.StraightFlush; rank > CardRank.HighCard; rank--)
            {
                find(rank, ref sortCards, ref ret);
                if (ret.Count > 0)
                {
                    var c = ret[rank].First <uint[]>();
                    if (c.Length == cards.Length)
                    {
                        cards = c;
                    }
                    else
                    {
                        var diff = new uint[cards.Length - c.Length];
                        int i    = 0;
                        foreach (var card in cards)
                        {
                            if (Array.IndexOf(c, card) == -1)
                            {
                                diff[i++] = card;
                            }
                            if (i >= diff.Length)
                            {
                                break;
                            }
                        }
                        Array.Copy(c, cards, c.Length);
                        Array.Copy(diff, 0, cards, c.Length, diff.Length);
                    }
                    return(rank);
                }
            }
            for (int j = 0; j < sortCards.Length; j++)
            {
                cards[j] = sortCards[j].CardValue();
            }
            return(CardRank.HighCard);
        }
Exemplo n.º 3
0
        public static CardRankDictionary Find(uint[] cards)
        {
            Card[] sortCards = new Card[cards.Length];
            for (int i = 0; i < cards.Length; i++)
            {
                sortCards[i] = new Card(cards[i]);
            }

            Array.Sort(sortCards);

            CardRankDictionary ret = new CardRankDictionary();

            for (CardRank rank = CardRank.StraightFlush; rank > CardRank.HighCard; rank--)
            {
                find(rank, ref sortCards, ref ret);
            }

            return(ret);
        }
Exemplo n.º 4
0
        private static void findRecursive(CardRank rank, ref Card[] cards, int pos, ref Card[] foundCards, int found, ref CardRankDictionary result)
        {
            for (int i = pos; i < cards.Length; i++)
            {
                Card card = cards[i];
                foundCards[found] = card;

                if (!match(rank, ref foundCards, found + 1))
                {
                    continue;
                }

                if (found + 1 == cardsNum[Convert.ToInt32(rank)])
                {
                    // save to result
                    List <uint[]> l;
                    uint[]        saveCards = new uint[foundCards.Length];
                    for (int j = 0; j < foundCards.Length; j++)
                    {
                        saveCards[j] = foundCards[j].CardValue();
                    }
                    if (result.TryGetValue(rank, out l))
                    {
                        l.Add(saveCards);
                    }
                    else
                    {
                        l = new List <uint[]>();
                        l.Add(saveCards);
                        result[rank] = l;
                    }
                    continue;
                }

                findRecursive(rank, ref cards, i + 1, ref foundCards, found + 1, ref result);
            }
        }