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