public void GetRankTypeShouldWorkCorrectly(ICollection<Card> playerCards, HandRankType expectedHandRankType, ICollection<CardType> expectedBestHandCards) { IHandEvaluator handEvaluator = new HandEvaluator(); var bestHand = handEvaluator.GetBestHand(playerCards.Shuffle().ToList()); Assert.AreEqual(expectedHandRankType, bestHand.RankType); CollectionAssert.AreEquivalent(expectedBestHandCards, bestHand.Cards); }
private BestHand GetHandRank(Card firstCard, Card secondCard, IReadOnlyCollection<Card> communityCards, HandEvaluator currentBestHandEvaluator, Card[] cardsInEvaluatedHand) { cardsInEvaluatedHand[0] = firstCard; cardsInEvaluatedHand[1] = secondCard; var listOfCommunityCards = new List<Card>(); byte fiveCardsIndex = 2; foreach (var card in communityCards) { listOfCommunityCards.Add(card); if (fiveCardsIndex < 5) { cardsInEvaluatedHand[fiveCardsIndex] = card; } fiveCardsIndex++; } // initial value of best hand var bestHandEver = currentBestHandEvaluator.GetBestHand(cardsInEvaluatedHand); /// "Flop" round if (listOfCommunityCards.Count == 3) { fiveCardsIndex = 2; foreach (var card in listOfCommunityCards) { cardsInEvaluatedHand[fiveCardsIndex] = card; fiveCardsIndex++; } return currentBestHandEvaluator.GetBestHand(cardsInEvaluatedHand); } /// "Turn" or "River" round else if (listOfCommunityCards.Count > 3) { BestHand currentBestHand; //BestHand bestHandEver; int maxRank = 0; fiveCardsIndex = 2; /// check if players hand have combination with 3 cards out of 4 on the table for (int j = 0; j < listOfCommunityCards.Count; j++) { fiveCardsIndex = 2; for (int i = 0; i < listOfCommunityCards.Count; i++) { if ((j != i) && (fiveCardsIndex < 5)) { cardsInEvaluatedHand[fiveCardsIndex] = listOfCommunityCards[i]; } fiveCardsIndex++; } currentBestHand = currentBestHandEvaluator.GetBestHand(cardsInEvaluatedHand); CheckIfCurrentBestHandIsBestHand(currentBestHand, ref bestHandEver, ref maxRank); } /// check only with the first card of the players hand cardsInEvaluatedHand[0] = firstCard; fiveCardsIndex = 1; foreach (var card in listOfCommunityCards) { if (fiveCardsIndex < 5) { cardsInEvaluatedHand[fiveCardsIndex] = card; } fiveCardsIndex++; } currentBestHand = currentBestHandEvaluator.GetBestHand(cardsInEvaluatedHand); // check if better combination was found CheckIfCurrentBestHandIsBestHand(currentBestHand, ref bestHandEver, ref maxRank); /// check only with the second card of the players hand cardsInEvaluatedHand[0] = secondCard; fiveCardsIndex = 1; foreach (var card in listOfCommunityCards) { if (fiveCardsIndex < 5) { cardsInEvaluatedHand[fiveCardsIndex] = card; } fiveCardsIndex++; } currentBestHand = currentBestHandEvaluator.GetBestHand(cardsInEvaluatedHand); // check if better combination was found CheckIfCurrentBestHandIsBestHand(currentBestHand, ref bestHandEver, ref maxRank); return bestHandEver; } else { return currentBestHandEvaluator.GetBestHand(cardsInEvaluatedHand); } }
public void GetRankTypeShouldWorkCorrectly(HandRankType expectedHandRankType, ICollection<Card> cards) { var handEvaluator = new HandEvaluator(); var actualHandRankType = handEvaluator.GetRankType(cards.Shuffle().ToList()); Assert.AreEqual(expectedHandRankType, actualHandRankType); }
public BestHandEvaluator() { this.currentBestHandEvaluator = new HandEvaluator(); this.cardsInEvaluatedHand = new Card[5]; }