public override bool Equals(object obj) { try { EvaluatedHand otherObject = obj as EvaluatedHand; return(this == otherObject); } catch (InvalidCastException) { return(false); } }
private static void CalculateRiverStrength( Hand playerHand, EvaluatedHand playerEvaluatedHand, IReadOnlyList <Card> communityCardList, Card opponentfirstCard, out int betterCount, out int notBetterCount) { // For each suit, determine if flush possible or not List <CardSuit> flushSuits; List <CardSuit> nonFlushSuits; // Set initial counts betterCount = 0; notBetterCount = 0; List <Card> flushEvaluationList = new List <Card>(communityCardList); flushEvaluationList.Add(opponentfirstCard); DetermineFlushAndNonFlushSuits(flushEvaluationList, out flushSuits, out nonFlushSuits); List <Card> takenList = new List <Card>(communityCardList); takenList.Add(playerHand.Card2); takenList.Add(playerHand.Card1); takenList.Add(opponentfirstCard); // If at least one suit with no flush possibility if (nonFlushSuits.Count >= 1) { // For each card value ("None" is 13) for (int valueInt = 0; valueInt < 13; ++valueInt) { // Get the list of card of a non flush suit, of this card value, that is also not taken IReadOnlyList <Card> notTakenList = DetermineNonFlushNonTakenCards(valueInt, flushSuits, takenList); // If at least one if (notTakenList.Count > 0) { // Make opponent hand once Hand opponentHand = new Hand(notTakenList[0], opponentfirstCard); // Evaluate against CC list EvaluatedHand evaluatedOpponentHand = new EvaluatedHand(communityCardList, opponentHand); if (evaluatedOpponentHand > playerEvaluatedHand) { betterCount += notTakenList.Count; } else { notBetterCount += notTakenList.Count; } } } } // For each represented suit that a flush is possible in foreach (CardSuit suit in flushSuits) { // Get the list of card in this suit that are not taken IReadOnlyList <Card> notTakenList = DetermineFlushNonTakenCards(suit, takenList); // For each of them foreach (Card card in notTakenList) { // Make opponent hand Hand opponentHand = new Hand(notTakenList[0], opponentfirstCard); // Evaluate against CC list EvaluatedHand evaluatedOpponentHand = new EvaluatedHand(communityCardList, opponentHand); if (evaluatedOpponentHand > playerEvaluatedHand) { betterCount++; } else { notBetterCount++; } } } }
private static StrengthWave CalculateRiverStrength(Hand playerHand, IReadOnlyList <Card> communityCardList) { // For each suit, determine if flush possible or not List <CardSuit> flushSuits; List <CardSuit> nonFlushSuits; // Set initial counts int betterCountTotal = 0; int notBetterCountTotal = 0; // Separate flush and non flush sensitive suits List <Card> flushEvaluationList = new List <Card>(communityCardList); DetermineFlushAndNonFlushSuits(flushEvaluationList, out flushSuits, out nonFlushSuits); // Compile the list of taken cards List <Card> takenList = new List <Card>(communityCardList); takenList.Add(playerHand.Card2); takenList.Add(playerHand.Card1); // Evaluate the player's hand EvaluatedHand playerEvaluatedHand = new EvaluatedHand(communityCardList, playerHand); // If at least one suit with no flush possibility if (nonFlushSuits.Count >= 1) { // For each card value ("None" is 13) for (int valueInt = 0; valueInt < 13; ++valueInt) { // Get the list of card of a non flush suit, of this card value, that is also not taken IReadOnlyList <Card> notTakenList = DetermineNonFlushNonTakenCards(valueInt, flushSuits, takenList); // If at least one if (notTakenList.Count > 0) { int betterCount; int notBetterCount; // Only calculate once CalculateRiverStrength( playerHand, playerEvaluatedHand, communityCardList, notTakenList[0], out betterCount, out notBetterCount); // Add to totals betterCountTotal += (betterCount * notTakenList.Count); notBetterCountTotal += (notBetterCount * notTakenList.Count); } } } // For each represented suit that a flush is possible in foreach (CardSuit suit in flushSuits) { // Get the list of card in this suit that are not taken IReadOnlyList <Card> notTakenList = DetermineFlushNonTakenCards(suit, takenList); // For each of them foreach (Card card in notTakenList) { int betterCount; int notBetterCount; // Only calculate once CalculateRiverStrength( playerHand, playerEvaluatedHand, communityCardList, card, out betterCount, out notBetterCount); // Add to totals betterCountTotal += betterCount; notBetterCountTotal += notBetterCount; } } float strengthValue = 1.0f - ((float)betterCountTotal / (float)(betterCountTotal + notBetterCountTotal)); return(new StrengthWave(strengthValue)); }