/// <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); } }
/// <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); } }