public void WinWith_ThreeOfAKing_Two() { List <Card> cards = new List <Card> { new Card { CardType = CardType.Hearts, Value = CardValue.Two }, new Card { CardType = CardType.Diamonds, Value = CardValue.Two }, new Card { CardType = CardType.Spades, Value = CardValue.Two }, new Card { CardType = CardType.Clubs, Value = CardValue.Nine }, new Card { CardType = CardType.Diamonds, Value = CardValue.King }, }; PokerHand PokerHand = new PokerHand(cards, null); var result = PokerHand.ResolveCards(cards); var excepted = new PokerHandResult { Card = new Card { Value = CardValue.Two }, Type = PokerType.ThreeOfAKind }; Assert.AreEqual(excepted.Type, result.Type); Assert.AreEqual(excepted.Card.Value, result.Card.Value); }
public PokerHandResult Resolve() { PokerHandResult pokerResult = new PokerHandResult(); pokerResult = ResolveCards(CardsOne); //ResolveCards(CardsTwo); return(pokerResult); }
private static PokerHandResult getHighCardResult(List <Card> cards, PokerHandResult pokerResult) { int maxValue = cards.Max(x => (int)x.Value); Card card = cards.First(x => (int)x.Value == maxValue); pokerResult = new PokerHandResult { Card = card, Type = PokerType.HighCard }; return(pokerResult); }
private static PokerHandResult getThreeOfAKingCardResult(List <Card> cards, PokerHandResult pokerResult) { var cardPair = cards.GroupBy(x => x.Value).Select(x => x.First()).First(); Card card = new Card { Value = cardPair.Value }; pokerResult = new PokerHandResult { Card = card, Type = PokerType.ThreeOfAKind }; return(pokerResult); }
public void PlayersOneWinWithHighCardAce() { List <Card> cardsOne = new List <Card> { new Card { CardType = CardType.Hearts, Value = CardValue.Two }, new Card { CardType = CardType.Diamonds, Value = CardValue.Three }, new Card { CardType = CardType.Spades, Value = CardValue.Five }, new Card { CardType = CardType.Clubs, Value = CardValue.Nine }, new Card { CardType = CardType.Diamonds, Value = CardValue.King }, }; List <Card> cardsTwo = new List <Card> { new Card { CardType = CardType.Clubs, Value = CardValue.Two }, new Card { CardType = CardType.Hearts, Value = CardValue.Three }, new Card { CardType = CardType.Spades, Value = CardValue.Four }, new Card { CardType = CardType.Clubs, Value = CardValue.Height }, new Card { CardType = CardType.Hearts, Value = CardValue.Ace }, }; PokerHand PokerHand = new PokerHand(cardsOne, cardsTwo); var result = PokerHand.Resolve(); var excepted = new PokerHandResult { Winner = "Two", Card = new Card { Value = CardValue.Ace, CardType = CardType.Hearts } }; Assert.AreEqual(excepted, result); }
public PokerHandResult ResolveCards(List <Card> cards) { PokerHandResult pokerResult = new PokerHandResult(); bool isHighCardResult = cards.Where(x => (int)x.Value <= 10).Count() == 5 ? true : false; bool isPairCardResult = cards.GroupBy(x => x.Value).Select(x => x.First()).Count() == 4 ? true : false; bool isThreeofAKingResult = cards.GroupBy(x => x.Value).Select(x => x.First()).Count() == 3 ? true : false; if (isHighCardResult && !isPairCardResult && !isThreeofAKingResult) { return(getHighCardResult(cards, pokerResult)); } if (isPairCardResult) { return(getPairCardResult(cards, pokerResult)); } if (isThreeofAKingResult) { return(getThreeOfAKingCardResult(cards, pokerResult)); } return(pokerResult); }