Exemplo n.º 1
0
    /// <summary>
    /// Check Straight Flush
    /// </summary>
    /// <param name="cards"></param>
    /// <returns></returns>
    public bool IsStraightFlush(_CardActor[] cards)
    {
        int count = 0;

        Dictionary <Suite, int> suit = new Dictionary <Suite, int>(); // in Hand h,s,c,h,c,s,h >> that will be {(h,3), (s,2), (c,2)}

        cards = cards.OrderByDescending(x => x._numberCard).ToArray();

        foreach (_CardActor card in cards)
        {
            if (suit.ContainsKey(card._suite))
            {
                suit[card._suite] += 1; // Increase value of the same suit
            }
            else
            {
                suit.Add(card._suite, 1); // Add new unique suit in dictionary
            }
        }
        suit = suit.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value); //{(h,3), (s,2), (c,2)}

        if (suit.First().Value >= 5)
        {
            Suite             flushSuite        = suit.First().Key;
            List <_CardActor> packStraightFlush = new List <_CardActor>();

            for (int i = 0; i < cards.Length; i++)
            {
                if (cards[i]._suite == flushSuite)
                {
                    packStraightFlush.Add(cards[i]);
                }
            }

            List <CardNumber> listNumber = new List <CardNumber>();
            for (int i = 0; i < cards.Length; i++)
            {
                listNumber.Add(cards[i]._numberCard);
            }

            if (listNumber.Contains(CardNumber.Two))
            {
                count++;
            }
            if (listNumber.Contains(CardNumber.Three))
            {
                count++;
            }
            if (listNumber.Contains(CardNumber.Four))
            {
                count++;
            }
            if (listNumber.Contains(CardNumber.Five))
            {
                count++;
            }
            if (listNumber.Contains(CardNumber.Ace))
            {
                count++;
            }

            if (count == 5)
            {
                tieBrakerValue = 3;
                return(true);
            }

            _CardActor[] cardsSort = packStraightFlush.OrderBy(x => x._numberCard).ToArray();

            count = 0;
            _CardActor lastRow = cardsSort[0];
            for (int i = 0; i < cardsSort.Length; i++)
            {
                if ((int)cardsSort[i]._numberCard - (int)lastRow._numberCard == 0)
                {
                    continue;
                }

                if ((int)cardsSort[i]._numberCard - (int)lastRow._numberCard == 1)
                {
                    if (count == 0)
                    {
                        packStraightFlush.Add(lastRow);
                    }

                    count++;
                    packStraightFlush.Add(lastRow);

                    if (count >= 4)
                    {
                        break;
                    }
                }
                else
                {
                    count = 0;
                    packStraightFlush.Clear();
                }

                lastRow = cardsSort[i];
            }

            if (count >= 4)
            {
                _cardHighlight = packStraightFlush.ToArray();
                SetTieBreaker(packStraightFlush);
                return(true);
            }
            else
            {
                return(false);
            }
        }
        else
        {
            return(false);
        }
    }
Exemplo n.º 2
0
    /// <summary>
    /// Check Straight
    /// </summary>
    /// <param name="cards"></param>
    /// <returns></returns>
    public bool IsStraight(_CardActor[] cards)
    {
        int count = 0;

        List <CardNumber> listNumber = new List <CardNumber>();

        for (int i = 0; i < cards.Length; i++)
        {
            listNumber.Add(cards[i]._numberCard);
        }

        cards = cards.OrderBy(x => x._numberCard).ToArray();
        List <_CardActor> packStraight = new List <_CardActor>();

        if (listNumber.Contains(CardNumber.Two))
        {
            count++;
        }
        if (listNumber.Contains(CardNumber.Three))
        {
            count++;
        }
        if (listNumber.Contains(CardNumber.Four))
        {
            count++;
        }
        if (listNumber.Contains(CardNumber.Five))
        {
            count++;
        }
        if (listNumber.Contains(CardNumber.Ace))
        {
            count++;
        }

        if (count == 5)
        {
            tieBrakerValue = 3;
            return(true);
        }

        count = 0;
        _CardActor lastRow = cards[0];

        for (int i = 0; i < cards.Length; i++)
        {
            if ((int)cards[i]._numberCard - (int)lastRow._numberCard == 0)
            {
                continue;
            }

            if ((int)cards[i]._numberCard - (int)lastRow._numberCard == 1)
            {
                if (count == 0)
                {
                    packStraight.Add(lastRow);
                }

                count++;
                packStraight.Add(lastRow);

                if (count >= 4)
                {
                    break;
                }
            }
            else
            {
                count = 0;
                packStraight.Clear();
            }

            lastRow = cards[i];
        }

        if (count >= 4)
        {
            _cardHighlight = packStraight.ToArray();
            SetTieBreaker(packStraight);
            return(true);
        }
        else
        {
            return(false);
        }
    }