public SheepCard GiveAwayPoints(IPlayer thisPlayer, ITrick trick) { return(thisPlayer.Cards .Where(c => trick.IsLegalAddition(c, thisPlayer)) .OrderByDescending(c => CardUtil.GetPoints(c)) .First()); }
public TrickWinner Winner() { var moves = OrderedMoves; if (!moves.Any()) { return(null); } var firstSuite = CardUtil.GetSuit(moves.First().Value); var validCards = new List <KeyValuePair <IPlayer, SheepCard> >(); foreach (var keyValuePair in moves) { var suite = CardUtil.GetSuit(keyValuePair.Value); if (suite == firstSuite || suite == Suit.TRUMP) { validCards.Add(keyValuePair); } } return(new TrickWinner() { Player = validCards.OrderBy(kvp => CardUtil.GetRank(kvp.Value)).First().Key, Points = moves.Sum(c => CardUtil.GetPoints(c.Value)) }); }
protected override List <SheepCard> DropCardsForPickInternal(IHand hand) { return(Cards .OrderBy(c => CardUtil.GetSuit(c) != Suit.TRUMP ? 1 : 2) .ThenByDescending(c => CardUtil.GetPoints(c)) .Take(2) .ToList()); }
public bool HaveHighPointsBeenPlayed(ITrick trick) { var totalPoints = trick.CardsByPlayer.Sum(cp => CardUtil.GetPoints(cp.Value)); return(trick.IHand.IGame.PlayerCount == 3 ? totalPoints >= 10 : totalPoints >= 12); }
public override bool WillPick(IHand hand) { var highPointCards = Cards.Count(c => CardUtil.GetPoints(c) >= 10); var avgRank = Cards.Average(c => CardUtil.GetRank(c)); var playerQueueRankInTrick = QueueRankInHand(hand); var middleQueueRankInTrick = (hand.PlayerCount + 1) / 2; if (hand.PlayerCount == 5) { var willPick = avgRank <= 6 || avgRank <= 13 && highPointCards > 2 || avgRank <= 13 && playerQueueRankInTrick > middleQueueRankInTrick; return(willPick); } else { var willPick = avgRank <= 8 || avgRank <= 16 && highPointCards > 2 || avgRank <= 16 && playerQueueRankInTrick > middleQueueRankInTrick; return(willPick); } }