예제 #1
0
 public SheepCard GiveAwayPoints(IPlayer thisPlayer, ITrick trick)
 {
     return(thisPlayer.Cards
            .Where(c => trick.IsLegalAddition(c, thisPlayer))
            .OrderByDescending(c => CardUtil.GetPoints(c))
            .First());
 }
예제 #2
0
        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))
            });
        }
예제 #3
0
 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());
 }
예제 #4
0
        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);
        }
예제 #5
0
        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);
            }
        }