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