예제 #1
0
        static GameState defended(GameState state, Card defenseCard, CardPair toDefeat)
        {
            var newDefender = state.defender.withCards(_ => _.Remove(defenseCard));

            var newOnTable = state.onTable.Replace(
                toDefeat,
                new CardPair(toDefeat.placed, new Option <Card>(defenseCard))
                );

            return(state.withDefender(newDefender).withOnTable(newOnTable));
        }
예제 #2
0
        public static Option <Card> pickForDefense(
            Player defender, CardPair toDefeatPair,
            Suit trumpSuit, IComparer <Card> trumpComparer
            )
        {
            var sameSuitePicks =
                defender.cards
                .Where(card => card.suit == toDefeatPair.placed.suit && card.CompareTo(toDefeatPair.placed) > 0)
                .OrderBy(_ => _, trumpComparer);

            var trumpCards =
                defender.cards
                .Where(card =>
                       card.suit == trumpSuit && (
                           toDefeatPair.placed.suit != trumpSuit ||
                           card.CompareTo(toDefeatPair.placed) > 0
                           )
                       )
                .OrderBy(_ => _, trumpComparer);

            var possiblePicks = sameSuitePicks.Concat(trumpCards);

            return(possiblePicks.head());
        }