//Count outs for player ONLY at the moment
        private int countOuts(Table t, Hand h)
        {
            // List of outs
            List <Card>          out_list     = new List <Card>();
            List <Hand.strength> out_strength = new List <Hand.strength>();
            // Deck of cards
            List <Card> cards = t.getDeck().getCards();
            // Hands in play
            List <Hand> hands = t.getHands();

            Hand[] temp = new Hand[t.getHands().Count];
            Array.Copy(t.getHands().ToArray(), temp, t.getHands().Count);
            hands = temp.ToList();

            Hand opposing = hands.First() == h ? hands[1] : hands[0];

            // Community cards
            Card[] commu_cards = new Card[5];// = t.getCommunityCards();
            Array.Copy(t.getCommunityCards(), commu_cards, t.getCommunityCards().Count());

            Hand.strength current = h.evaluateHand(commu_cards);
            //Hand.strength opponent_current = hands[1].evaluateHand(commu_cards);
            int outs = 0;

            bool turn = commu_cards[3] == null ? true:false;

            for (int i = 0; i < cards.Count; i++)
            {
                if (turn)
                {
                    commu_cards[3] = cards[i];
                }
                else
                {
                    commu_cards[4] = cards[i];
                }

                Hand.strength newStrength         = h.evaluateHand(commu_cards);
                Hand.strength opponentNewStrength = opposing.evaluateHand(commu_cards);

                //TEST
                hands[0].setHandStrenght(hands[0].evaluateHand(commu_cards));
                hands[1].setHandStrenght(hands[1].evaluateHand(commu_cards));

                /*
                 * if (newStrength == Hand.strength.Flush)
                 * {
                 *  bool opp = newStrength>opponentNewStrength?true:false;
                 *  Console.WriteLine("Considering flush with "+cards[i].ToString()+" Opponent hand has: "+opponentNewStrength.ToString()+ " and "+ opp);
                 * }
                 */
                //if (newStrength > current && newStrength > opponentNewStrength)
                if (newStrength > current && h.compareHand(opposing) == 1)
                {
                    outs++;
                    out_list.Add(cards[i]);
                    out_strength.Add(newStrength);
                }
            }
            Console.WriteLine("List OF OUTS!!!");

            for (int i = 0; i < out_list.Count; i++)
            {
                Console.WriteLine(out_list[i].ToString() + " (" + out_strength[i].ToString() + ")");
            }

            outs_list          = out_list;
            outs_strength_list = out_strength;

            /*
             * foreach (Card c in out_list)
             * {
             *  Console.WriteLine(c.ToString()+" ("+out);
             * }
             */
            return(outs);
        }
Beispiel #2
0
        private List <Card> getOutList(Hand h)
        {
            // List of outs
            List <Card>          out_list     = new List <Card>();
            List <Hand.strength> out_strength = new List <Hand.strength>();
            // Deck of cards
            List <Card> cards = deck.getCards();
            // Hands in play
            List <Hand> hands = getHands();

            Hand[] temp = new Hand[hands.Count];
            Array.Copy(hands.ToArray(), temp, hands.Count);
            hands = temp.ToList();

            // Community cards
            Card[] commu_cards = new Card[5];// = t.getCommunityCards();
            Array.Copy(getCommunityCards(), commu_cards, getCommunityCards().Count());

            // TEST THIS
            Hand opposing = hands.First() == h ? hands[1] : hands[0];

            Hand.strength current = h.evaluateHand(commu_cards);

            int outs = 0;

            bool turn = commu_cards[3] == null ? true : false;

            for (int i = 0; i < cards.Count; i++)
            {
                if (turn)
                {
                    commu_cards[3] = cards[i];
                }
                else
                {
                    commu_cards[4] = cards[i];
                }

                Hand.strength newStrength = h.evaluateHand(commu_cards);
                //Hand.strength opponentNewStrength = hands[1].evaluateHand(commu_cards);

                //TEST
                hands[0].setHandStrenght(hands[0].evaluateHand(commu_cards));
                hands[1].setHandStrenght(hands[1].evaluateHand(commu_cards));

                if (newStrength > current && h.compareHand(opposing) == 1)
                {
                    outs++;
                    out_list.Add(cards[i]);
                    out_strength.Add(newStrength);
                }
            }
            return(out_list);

            /*
             * Console.WriteLine("List OF OUTS!!!");
             *
             * for (int i = 0; i < out_list.Count; i++)
             * {
             *  Console.WriteLine(out_list[i].ToString() + " (" + out_strength[i].ToString() + ")");
             * }
             * /*
             * foreach (Card c in out_list)
             * {
             *  Console.WriteLine(c.ToString()+" ("+out);
             * }
             *
             * return outs;
             *              */
        }