Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
 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;
 }