public static void compareHandRankValue(HandRankValue player1Rank, HandRankValue player2Rank) { if ((int)player1Rank.rank > (int)player2Rank.rank) { //Console.WriteLine("Player 1"); WriteToFile("P1"); } else if ((int)player1Rank.rank < (int)player2Rank.rank) { //Console.WriteLine("Player 2"); WriteToFile("P2"); } else // Rank Same { int countValues = player1Rank.values.Count(); for (int i = 0; i < countValues; i++) { if (player1Rank.values[i] > player2Rank.values[i]) { Console.WriteLine("Player 1"); WriteToFile("P1"); break; } else if (player1Rank.values[i] < player2Rank.values[i]) { Console.WriteLine("Player 2"); WriteToFile("P2"); break; } } } }
static public void PokerHandMain() { fillStaraightValues(); int testCase = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < testCase; i++) { string playersHand = Console.ReadLine(); HandRankValue player1Rank = calculateRank(playersHand.Substring(0, 14)); HandRankValue player2Rank = calculateRank(playersHand.Substring(15, 14)); compareHandRankValue(player1Rank, player2Rank); } }
public static HandRankValue calculateRank(string playerHand) { int[] totalValues = new int[15]; List <int> handValue = new List <int>(); string[] cards = playerHand.Split(' '); bool isSameSuit = true; char firstSuit = cards[0][1]; int valueCount = 0; int highestCard = 0; int highestValueCount = 0; int pairCount = 0; Rank output = Rank.HighestCard; HandRankValue outputHandRankVal = new HandRankValue(); foreach (string card in cards) { if (isSameSuit && card[1] != firstSuit) { isSameSuit = false; } int value = 0; if (!int.TryParse(card[0].ToString(), out value)) { switch (card[0]) { case 'T': value = (int)Value.T; break; case 'J': value = (int)Value.J; break; case 'Q': value = (int)Value.Q; break; case 'K': value = (int)Value.K; break; case 'A': value = (int)Value.A; break; } } totalValues[value]++; if (highestValueCount < totalValues[value]) { highestValueCount = totalValues[value]; } if (totalValues[value] == 2) { pairCount++; } else if (totalValues[value] == 3) { pairCount--; } if (highestCard < value) { highestCard = value; } valueCount += value; handValue.Add(value); } if (isSameSuit) { output = Rank.Flush; if (checkStraight(handValue.ToArray())) { output = Rank.StraightFlush; } if (valueCount == 60) { output = Rank.RoyalFlush; } } else if (checkStraight(handValue.ToArray())) { output = Rank.Straight; } if (highestValueCount == 4) { output = Rank.FourOfAKind; } else if (highestValueCount == 3 && pairCount == 1) { output = Rank.FullHouse; } else if (highestValueCount == 3) { output = Rank.ThreeOfKind; } else if (pairCount == 2) { output = Rank.TwoPairs; } else if (pairCount == 1) { output = Rank.OnePair; } outputHandRankVal.rank = output; outputHandRankVal.values = (handValue.GroupBy(qry => qry).OrderByDescending(qry => qry.Key).OrderByDescending(x => x.Count()) .Select(group => new { group.Key }).Select(qry => qry.Key)).ToArray(); //handValue.ToArray(); return(outputHandRankVal); }