/// <summary> /// Compute outs to reach the combination. /// </summary> /// <returns>Outs to reach the combination.</returns> protected override int ComputeOuts() { int result = 0; DoublePairsCombination doublePairs = new DoublePairsCombination(); doublePairs.Compute(SeenCards, true); if (doublePairs.Reached) { // Two pairs result = 4; List <Card> seenCardsClone = new List <Card>(SeenCards); foreach (Card card in doublePairs.CombinationCards) { seenCardsClone.Remove(card); } PairCombination pair = new PairCombination(); pair.Compute(seenCardsClone); if (pair.Reached) { // Three pairs result += 2; } } else { PairCombination pair = new PairCombination(); pair.Compute(SeenCards, true); if (pair.Reached) { // Already a pair, missing one card result = 2; } } return(result); }
/// <summary> /// Check if the combination is reached. /// </summary> /// <returns><c>true</c> if combination is reached, <c>false</c> otherwise.</returns> protected override bool ComputeReached() { bool result = false; if (SeenCards != null && SeenCards.Count >= 4) { List <Card> seenCardsClone = new List <Card>(SeenCards); DoublePairsCombination doublePairs = new DoublePairsCombination(); doublePairs.Compute(seenCardsClone, true); if (doublePairs.Reached) { // Double pair found, check if it is a quads if (doublePairs.CombinationCards[0].Weight == doublePairs.CombinationCards[2].Weight) { // Quads reached CombinationCards.AddRange(doublePairs.CombinationCards); result = true; } else { // Look for a possible third pair foreach (Card card in doublePairs.CombinationCards) { seenCardsClone.Remove(card); } PairCombination pair = new PairCombination(); pair.Compute(seenCardsClone, true); if (pair.Reached) { if (pair.CombinationCards[0].Weight == doublePairs.CombinationCards[0].Weight) { // Quads reached CombinationCards.Add(doublePairs.CombinationCards[0]); CombinationCards.Add(doublePairs.CombinationCards[1]); CombinationCards.AddRange(pair.CombinationCards); result = true; } else if (pair.CombinationCards[0].Weight == doublePairs.CombinationCards[2].Weight) { // Quads reached CombinationCards.Add(doublePairs.CombinationCards[2]); CombinationCards.Add(doublePairs.CombinationCards[3]); CombinationCards.AddRange(pair.CombinationCards); result = true; } } } } } return(result); }
/// <summary> /// Compute outs to reach the combination. /// </summary> /// <returns>Outs to reach the combination.</returns> protected override int ComputeOuts() { int result = 0; TripletsCombination triplets = new TripletsCombination(); triplets.Compute(SeenCards, true); if (triplets.Reached) { // Already a triples, need a pair result = 3 * (SeenCards.Count - 3); } else { DoublePairsCombination doublePairs = new DoublePairsCombination(); doublePairs.Compute(SeenCards, true); if (doublePairs.Reached) { // Two pairs, need a triplet result = 4; } } return(result); }