示例#1
0
        private Player[] determine_winners()
        {
            // guard conditions
            if (player_queue.Count < 1)
            {
                return(new Player[0]);
            }

            Player[] winners = new Player[player_queue.Count];
            int      index   = 0;

            Hand_Values best_hand_value = (Hand_Values)0;
            Card_Value  best_card_value = (Card_Value)0;

            // get best hand/card combo
            foreach (Player player in player_queue)
            {
                if (player != null &&
                    player.hand != null &&
                    !player.folded &&
                    !player.is_out)
                {
                    if (player.hand.best_hand_value > best_hand_value)
                    {
                        best_hand_value = player.hand.best_hand_value;
                        if (player.hand.cards[0] != null)
                        {
                            best_card_value = player.hand.cards[0].value;
                        }
                        else
                        {
                            Console.WriteLine("ERROR: Null card existing in hand when determining round winner.");
                        }
                    }
                    else if (player.hand.best_hand_value == best_hand_value)
                    {
                        if (player.hand.cards[0] != null &&
                            player.hand.cards[0].value > best_card_value)
                        {
                            best_card_value = player.hand.cards[0].value;
                        }
                    }
                }
                else if (player == null ||
                         player.hand == null)
                {
                    Console.WriteLine("ERROR: Null player or hand possessed by player when determining round winner.");
                }
            }

            foreach (Player player in player_queue)
            {
                if (player == null ||
                    player.hand == null ||
                    player.hand.cards[0] == null)
                {
                    Console.WriteLine("ERROR: Null exception when determining round winner.");
                }
                else if (!player.folded &&
                         !player.is_out &&
                         player.hand.best_hand_value == best_hand_value &&
                         player.hand.cards[0].value == best_card_value)
                {
                    winners[index++] = player;
                }
            }

            // use tiebreaker to determine the best of the winners
            Hand[] hands = new Hand[index];
            for (int i = 0; i < index; i++)
            {
                hands[i] = winners[i].hand;
            }
            Card_Value tie_breaking_card = Hand.tie_breaker(hands);

            // use tie breaking card to figure out who the winner of winners is
            Player[]   winners_of_winners  = new Player[winners.Length];
            Card_Value best_tie_card_value = Hand.get_best_tie_card(winners[0].hand).value;

            // find the best tie card value
            for (int i = 0; i < winners.Length; i++)
            {
                if (winners[i] == null)
                {
                    break;
                }
                else
                {
                    Card best_tie_card = Hand.get_best_tie_card(winners[i].hand);
                    if (best_tie_card.value > best_tie_card_value)
                    {
                        best_tie_card_value = best_tie_card.value;
                    }
                }
            }
            // select the winners of the winners using the tie breaking card value
            index = 0;
            for (int i = 0; i < winners.Length; i++)
            {
                if (winners[i] == null)
                {
                    break;
                }
                else if (Hand.get_best_tie_card(winners[i].hand).value == best_tie_card_value)
                {
                    winners_of_winners[index++] = winners[i];
                }
            }

            // condense
            Player[] winners_no_nulls = new Player[index];
            for (int i = 0; i < index; i++)
            {
                winners_no_nulls[i] = winners_of_winners[i];
            }

            return(winners_no_nulls);
        }