/// <summary> /// Use this method to bury cards in a Called-Ace game. /// </summary> public void BuryCards(IHand hand, IHumanPlayer picker, List <SheepCard> cardsToBury, bool goItAlone, SheepCard partnerCard) { if (picker.Cards.Contains(partnerCard)) { throw new ArgumentException("Picker has the parner card"); } if (!picker.Cards.Any(c => CardUtil.GetSuit(c) == CardUtil.GetSuit(partnerCard))) { throw new ArgumentException($"Picker does not have a card in the {CardUtil.GetSuit(partnerCard).ToString()} suit"); } if (!_validCalledAceCards.Contains(partnerCard)) { throw new ArgumentException($"{CardUtil.GetAbbreviation(partnerCard)} is not a valid partner card."); } hand.SetPartnerCard(partnerCard); BuryCards(hand, picker, cardsToBury, goItAlone); }
public static TrickResults GetTrickWinners(IHand hand) { var tricks = hand.ITricks ?? new List <ITrick>(); var winners = tricks.Where(t => t.PlayersWithoutTurn.Count == 0).Select(t => t?.Winner()?.Player?.Name).ToList(); return(new TrickResults() { Picker = hand.Picker?.Name, Partner = hand.Partner?.Name, PartnerCard = hand.PartnerCardEnum == null ? null : CardUtil.GetAbbreviation(hand.PartnerCardEnum.Value), TrickWinners = winners, LeastersHand = hand?.Leasters ?? false, Tricks = hand ?.ITricks ?.Where(t => t.IsComplete()) ?.Select(trick => trick.OrderedMoves .Select(move => new KeyValuePair <string, CardSummary>(move.Key.Name, CardUtil.GetCardSummary(move.Value))) .ToList() ) ?.ToList() }); }