Пример #1
0
        private bool isOnePair(ref HAND hand)
        {
            Rank mOnePairRank = 0;
            bool returnStatus = false;

            for (int i = 0; i < _cards.Count - 1; i++)
            {
                Rank mRank     = _cards[i].Rank;
                int  rankCount = 1;
                for (int j = i + 1; j < _cards.Count; j++)
                {
                    if (mRank == _cards[j].Rank)
                    {
                        rankCount++;
                    }
                    if (rankCount == 2)
                    {
                        break;
                    }
                }

                if (rankCount == 2)
                {
                    hand.OnePair3cards = new Card[3];

                    mOnePairRank     = mRank;
                    hand.pokerHand   = PokerHand.OnePair;
                    hand.onePairRank = mRank;
                    int z = 0;
                    foreach (var card in _cards)
                    {
                        if (card.Rank != mRank && (z < 3))
                        {
                            hand.OnePair3cards[z] = card;
                            z++;
                        }
                    }

                    Array.Sort(hand.OnePair3cards);

                    returnStatus = true;
                }
            }
            return(returnStatus);
        }
Пример #2
0
        //determine poker hand
        public HAND determinePokerHand()
        {
            HAND ahand = new HAND();

            if (isFlush())
            {
                ahand.pokerHand = PokerHand.Flush;
            }
            else if (isThreeOfAKind(ref ahand))
            {
            }
            else if (isOnePair(ref ahand))
            {
            }
            else
            {
                ahand.pokerHand = PokerHand.HighCard;
            }

            return(ahand);
        }
Пример #3
0
        private bool isThreeOfAKind(ref HAND hand)
        {
            for (int i = 0; i < _cards.Count - 2; i++)
            {
                Rank mRank     = _cards[i].Rank;
                int  rankCount = 1;
                for (int j = i + 1; j < _cards.Count; j++)
                {
                    if (mRank == _cards[j].Rank)
                    {
                        rankCount++;
                    }
                    if (rankCount == 3)
                    {
                        break;
                    }
                }

                if (rankCount == 3)
                {
                    hand.threeOfAKind2cards = new Card[2];

                    hand.pokerHand        = PokerHand.ThreeOfAKind;
                    hand.threeOfAKindRank = mRank;
                    int z = 0;
                    foreach (var card in _cards)
                    {
                        if (card.Rank != mRank && (z < 2))
                        {
                            hand.threeOfAKind2cards[z] = card;
                            z++;
                        }
                    }
                    Array.Sort(hand.threeOfAKind2cards);

                    return(true);
                }
            }
            return(false);
        }
Пример #4
0
        // Determine winner players
        public List <Player> evaluate()
        {
            List <HAND>   winnersHand = new List <HAND>();
            List <Player> winners     = new List <Player>();

            //determine winners by only checking PokerHand
            foreach (var player in _players)
            {
                HAND tempHand = player.determinePokerHand();

                if (winners.Count == 0 || (winnersHand[0].pokerHand == tempHand.pokerHand))
                {
                    winnersHand.Insert(0, tempHand);
                    winners.Insert(0, player);
                }
                else if (winnersHand[0].pokerHand < tempHand.pokerHand)
                {
                    winners.Clear();
                    winnersHand.Clear();
                    winnersHand.Add(tempHand);
                    winners.Add(player);
                }
            }

            //Tie breaker
            switch (winnersHand[0].pokerHand)
            {
            case PokerHand.Flush:
            case PokerHand.HighCard:
            {
                // going from highest rank card, remove players that have
                // lower rank in each level until remaining winner is left
                for (int i = _numCard - 1; i >= 0; i--)
                {
                    if (winners.Count == 1)
                    {
                        break;
                    }

                    Player        winnerInitial      = winners[0];
                    List <Player> playersToBeRemoved = new List <Player>();
                    foreach (var awinner in winners)
                    {
                        if (awinner.Cards[i].Rank <
                            winnerInitial.Cards[i].Rank)
                        {
                            playersToBeRemoved.Add(awinner);
                        }

                        if (awinner.Cards[i].Rank >
                            winnerInitial.Cards[i].Rank)
                        {
                            playersToBeRemoved.Add(winnerInitial);
                            winnerInitial = awinner;
                        }
                    }

                    foreach (var awinner in playersToBeRemoved)
                    {
                        winners.Remove(awinner);
                    }
                }
            }
            break;

            case PokerHand.ThreeOfAKind:
            {
                Player        winner = winners[0];
                List <Player> playersToBeRemoved2 = new List <Player>();

                // Remove players that have less rank of the three of a kind card
                foreach (var awinner in winners)
                {
                    if (awinner.determinePokerHand().threeOfAKindRank <
                        winner.determinePokerHand().threeOfAKindRank)
                    {
                        playersToBeRemoved2.Add(awinner);
                    }

                    if (winner.determinePokerHand().threeOfAKindRank <
                        awinner.determinePokerHand().threeOfAKindRank)
                    {
                        playersToBeRemoved2.Add(winner);
                        winner = awinner;
                    }
                }

                foreach (var awinner in playersToBeRemoved2)
                {
                    winners.Remove(awinner);
                }

                // going from highest rank in the two kicker cards,
                // remove players that have lower rank in each level
                // until remaining winner is left
                for (int i = 1; i >= 0; i--)
                {
                    if (winners.Count == 1)
                    {
                        break;
                    }

                    Player        winnerInitial      = winners[0];
                    List <Player> playersToBeRemoved = new List <Player>();
                    foreach (var awinner in winners)
                    {
                        if (awinner.determinePokerHand().threeOfAKind2cards.Length != 2 ||
                            winnerInitial.determinePokerHand().threeOfAKind2cards.Length != 2)
                        {
                            throw new Exception();
                        }

                        if (awinner.determinePokerHand().threeOfAKind2cards[i].Rank <
                            winnerInitial.determinePokerHand().threeOfAKind2cards[i].Rank)
                        {
                            playersToBeRemoved.Add(awinner);
                        }

                        if (awinner.determinePokerHand().threeOfAKind2cards[i].Rank >
                            winnerInitial.determinePokerHand().threeOfAKind2cards[i].Rank)
                        {
                            playersToBeRemoved.Add(winnerInitial);
                            winnerInitial = awinner;
                        }
                    }

                    foreach (var awinner in playersToBeRemoved)
                    {
                        winners.Remove(awinner);
                    }
                }
            }
            break;

            case PokerHand.OnePair:
            {
                Player        winner             = winners[0];
                List <Player> playersToBeRemoved = new List <Player>();
                foreach (var awinner in winners)
                {
                    if (awinner.determinePokerHand().onePairRank <
                        winner.determinePokerHand().onePairRank)
                    {
                        playersToBeRemoved.Add(awinner);
                    }

                    if (winner.determinePokerHand().onePairRank <
                        awinner.determinePokerHand().onePairRank)
                    {
                        playersToBeRemoved.Add(winner);
                        winner = awinner;
                    }
                }

                foreach (var awinner in playersToBeRemoved)
                {
                    winners.Remove(awinner);
                }

                // going from highest rank in the three kicker cards,
                // remove players that have lower rank in each level
                // until remaining winner is left
                for (int i = 2; i >= 0; i--)
                {
                    if (winners.Count == 1)
                    {
                        break;
                    }

                    Player        winnerInitial       = winners[0];
                    List <Player> playersToBeRemoved2 = new List <Player>();
                    foreach (var awinner in winners)
                    {
                        if (awinner.determinePokerHand().OnePair3cards.Length != 3 ||
                            winnerInitial.determinePokerHand().OnePair3cards.Length != 3)
                        {
                            throw new Exception();
                        }
                        if (awinner.determinePokerHand().OnePair3cards[i].Rank <
                            winnerInitial.determinePokerHand().OnePair3cards[i].Rank)
                        {
                            playersToBeRemoved2.Add(awinner);
                        }

                        if (awinner.determinePokerHand().OnePair3cards[i].Rank >
                            winnerInitial.determinePokerHand().OnePair3cards[i].Rank)
                        {
                            playersToBeRemoved2.Add(winnerInitial);
                            winnerInitial = awinner;
                        }
                    }

                    foreach (var awinner in playersToBeRemoved2)
                    {
                        winners.Remove(awinner);
                    }
                }
            }
            break;

            default:
                break;
            }

            return(winners);
        }