static void Main(string[] args) { StreamReader myFile = new StreamReader("poker.txt"); int player1wins = 0; Hand player1 = new Hand(); Hand player2 = new Hand(); List<Card> twoHands = new List<Card>(); while (!myFile.EndOfStream) { player1 = new Hand(); twoHands = ParseString(myFile.ReadLine()); for (int i = 0; i < 5; i++) { player1.Add(twoHands[0]); twoHands.RemoveAt(0); } player2 = new Hand(); for (int i = 0; i < 5; i++) { player2.Add(twoHands[0]); twoHands.RemoveAt(0); } ScoringEngine.GetScore(player1); ScoringEngine.GetScore(player2); if (player1.Score > player2.Score) { player1wins++; } else if (player1.Score == player2.Score) { if (player1.TieBreakValue > player2.TieBreakValue) { player1wins++; } else if (player1.TieBreakValue == player2.TieBreakValue) { if (player1.HighCard > player2.HighCard) player1wins++; } } } myFile.Close(); Console.WriteLine("Player 1 wins: " + player1wins); }
public static double EvaluatePokerHand(Hand hand) { double points = 0; int flush = 1, straight = 1; //flushes and straights for (int i = 1; i < hand.Count; i++) { if (hand[0].Suit == hand[i].Suit) flush++; if (hand[i].FaceValue == hand[0].FaceValue + i) straight++; } if (straight == 5) { points = flush == 5 ? 450 + hand[4].TrueValue : 250 + hand[4].TrueValue; return points; } if (flush == 5) return 300 + EvaluateCards(hand); int numberOfPairs = 0, numberOfTres = 0, cardValue = 0; //check for pairs/threes/fours for (int i = 0; i < hand.Count - 1; i++) { int sameValue = 1; for (int j = i + 1; j < hand.Count; j++) { if (hand[i].FaceValue == hand[j].FaceValue) sameValue++; if (sameValue == 4) return 400 + hand[j].TrueValue; } if (sameValue == 3) { numberOfTres++; numberOfPairs--; cardValue = hand[i].TrueValue; } if (sameValue == 2) numberOfPairs++; } //two pairs if (numberOfPairs == 2) { int pairNumber = 2; int i = hand.Count - 1; while (hand.Count > 1) { if (hand[i - 1].FaceValue == hand[i].FaceValue) { if (pairNumber == 2) { points = 13 * (int)hand[i].FaceValue; pairNumber--; } else points += hand[i].TrueValue; hand.Remove(hand[i]); hand.Remove(hand[i - 1]); i -= 2; } else i--; } return points + EvaluateCards(hand); } //pair if (numberOfPairs == 1 && numberOfTres == 0) { int i = hand.Count - 1; while (hand.Count > 3) { if (hand[i - 1].FaceValue == hand[i].FaceValue) { points += hand[i].TrueValue; hand.Remove(hand[i]); hand.Remove(hand[i - 1]); return points + EvaluateCards(hand); } i--; } } //3 of a kind or house if (numberOfTres == 1) { if (numberOfPairs == 1) return 350 + cardValue; return 200 + cardValue; } //high card return EvaluateCards(hand); }
private Hand GeneratePokerHand(string[] cards) { Hand hand = new Hand("player"); foreach (string s in cards) { char[] c = s.ToCharArray(); Card card = new Card(); hand.Add(card); switch (c[0]) { case '2': card.FaceValue = 0; break; case '3': card.FaceValue = (CardTypes.CardType)1; break; case '4': card.FaceValue = (CardTypes.CardType)2; break; case '5': card.FaceValue = (CardTypes.CardType)3; break; case '6': card.FaceValue = (CardTypes.CardType)4; break; case '7': card.FaceValue = (CardTypes.CardType)5; break; case '8': card.FaceValue = (CardTypes.CardType)6; break; case '9': card.FaceValue = (CardTypes.CardType)7; break; case 'T': card.FaceValue = (CardTypes.CardType)8; break; case 'J': card.FaceValue = (CardTypes.CardType)9; break; case 'Q': card.FaceValue = (CardTypes.CardType)10; break; case 'K': card.FaceValue = (CardTypes.CardType)11; break; case 'A': card.FaceValue = (CardTypes.CardType)12; break; default: break; } switch (c[1]) { case 'C': card.Suit = 0; break; case 'D': card.Suit = (CardTypes.Suits)1; break; case 'H': card.Suit = (CardTypes.Suits)2; break; case 'S': card.Suit = (CardTypes.Suits)3; break; } } hand.Sort(); return hand; }