Пример #1
0
 def setUp(self):
     self.cards = CardCollection([
         Copper(),
         Silver(),
         Gold(),
         Gold(),
         Duchy(),
         Estate(),
         Estate(),
         Copper(),
         Duchy()
     ])
Пример #2
0
    def test_victory_point_value(self):
        deck = CardCollection([Gardens()] + [Copper()
                                             for i in xrange(8)])  # 9 cards
        self.assertEqual(deck[0].total_victory_point_value(deck), 0)

        deck = CardCollection([Gardens()] + [Copper()
                                             for i in xrange(9)])  # 10 cards
        self.assertEqual(deck[0].total_victory_point_value(deck), 1)
        deck = CardCollection([Gardens()] + [Copper()
                                             for i in xrange(10)])  # 11 cards
        self.assertEqual(deck[0].total_victory_point_value(deck), 1)

        deck = CardCollection([Gardens()] + [Copper()
                                             for i in xrange(18)])  # 19 cards
        self.assertEqual(deck[0].total_victory_point_value(deck), 1)

        deck = CardCollection([Gardens()] + [Copper()
                                             for i in xrange(34)])  # 35 cards
        self.assertEqual(deck[0].total_victory_point_value(deck), 3)
Пример #3
0
class TestCardCollection(unittest.TestCase):
    def setUp(self):
        self.cards = CardCollection([
            Copper(),
            Silver(),
            Gold(),
            Gold(),
            Duchy(),
            Estate(),
            Estate(),
            Copper(),
            Duchy()
        ])

    def test_total_treasure_value(self):
        self.assertEqual(self.cards.total_treasure_value(), 10)

    def test_add_cards(self):
        self.assertEqual(len(self.cards), 9)

        self.cards.add_cards(Province())
        self.assertEqual(len(self.cards), 10)
        self.assertEqual(Province(), self.cards[9])

        self.cards.add_cards(Duchy(), Duchy())
        self.assertEqual(len(self.cards), 12)

    def test_draw_card(self):
        self.assertEqual(self.cards.draw_card(), Duchy())
        self.assertEqual(self.cards.draw_card(), Copper())
        self.assertEqual(self.cards.draw_card(), Estate())

    def test_pop_card(self):
        self.assertEqual(self.cards.pop_card(7), Copper())
        self.assertEqual(self.cards.pop_card(2), Gold())
        self.assertEqual(self.cards.pop_card(2), Gold())

    def test_in(self):
        self.assertTrue(Copper() in self.cards)
        self.assertFalse(Copper() in CardCollection(
            [Estate(), Estate(), Gold()]))

    def test_pop_function(self):
        duchies = pop_matching_cards(lambda c: c == Duchy(), self.cards)
        self.assertEqual(len(duchies), 2)
        self.assertTrue(all([c == Duchy() for c in duchies]))
        self.assertEqual(len(self.cards), 7)
        self.assertFalse(any([c == Duchy() for c in self.cards]))
Пример #4
0
class TestCardCollection(unittest.TestCase):
    def setUp(self):
        self.cards = CardCollection([Copper(), Silver(), Gold(), Gold(), Duchy(), Estate(), Estate(), Copper(), Duchy()])

    def test_total_treasure_value(self):
        self.assertEqual(self.cards.total_treasure_value(), 10)

    def test_add_cards(self):
        self.assertEqual(len(self.cards), 9)

        self.cards.add_cards(Province())
        self.assertEqual(len(self.cards), 10)
        self.assertEqual(Province(), self.cards[9])

        self.cards.add_cards(Duchy(), Duchy())
        self.assertEqual(len(self.cards), 12)

    def test_draw_card(self):
        self.assertEqual(self.cards.draw_card(), Duchy())
        self.assertEqual(self.cards.draw_card(), Copper())
        self.assertEqual(self.cards.draw_card(), Estate())

    def test_pop_card(self):
        self.assertEqual(self.cards.pop_card(7), Copper())
        self.assertEqual(self.cards.pop_card(2), Gold())
        self.assertEqual(self.cards.pop_card(2), Gold())

    def test_in(self):
        self.assertTrue(Copper() in self.cards)
        self.assertFalse(Copper() in CardCollection([Estate(), Estate(), Gold()]))

    def test_pop_function(self):
        duchies = pop_matching_cards(lambda c: c == Duchy(), self.cards)
        self.assertEqual(len(duchies), 2)
        self.assertTrue(all([c == Duchy() for c in duchies]))
        self.assertEqual(len(self.cards), 7)
        self.assertFalse(any([c == Duchy() for c in self.cards]))
Пример #5
0
 def __init__(self, game, deck):
     self.game = game
     self.deck = deck
     self.discard = CardCollection()
Пример #6
0
 def select_to_return_to_deck(self, cards, num_cards, is_attack, is_own_cards):
     selected = CardCollection()
     for i in xrange(num_cards):
         selected.add_cards(cards.draw_card())
     return selected
Пример #7
0
class BaseBot(object):
    def __init__(self, game, deck):
        self.game = game
        self.deck = deck
        self.discard = CardCollection()

    def victory_point_count(self):
        full_deck = self.turn.hand + self.deck + self.discard
        return sum(card.total_victory_point_value(full_deck) for card in full_deck)

    def log(self, level, message):
        self.game.log(level, message)

    def draw_cards(self, count=1):
        """
        This is the `safe` way to draw up to `count` cards.  If the deck is
        truly out of cards and there are no discards to reshuffle, this will
        just return less cards than asked for.
        """
        if not self.deck:
            self.log(logging.DEBUG, "Player {0} Reshuffling".format(self.game.get_turn()))
            self.discard.shuffle()
            self.deck, self.discard = self.discard, self.deck
        cards = []
        for i in xrange(count):
            try:
                cards.append(self.deck.draw_card())
            except IndexError:
                break
        return cards

    def discard_cards(self, *cards):
        assert all(cards)
        self.discard.add_cards(*cards)

    def set_turn(self, turn):
        self.turn = turn

    def do_turn(self):
        pass

    def cleanup_turn(self):
        self.discard_cards(*[c for c in self.turn.hand])
        self.discard_cards(*[c for c in self.turn.discard])

    def select_for_discard(self, cards, num_cards, is_attack, is_own_cards):
        selected = CardCollection()
        for i in xrange(num_cards):
            selected.add_cards(cards.draw_card())
        return selected

    def select_to_add_to_deck(self, cards, num_cards):
        """
        cards in this method is a list of card classes, not a collection of cards.
        """
        selected = []
        for i in xrange(num_cards):
            selected.append(cards.pop())
        return selected

    def select_to_return_to_deck(self, cards, num_cards, is_attack, is_own_cards):
        selected = CardCollection()
        for i in xrange(num_cards):
            selected.add_cards(cards.draw_card())
        return selected
Пример #8
0
 def setUp(self):
     self.cards = CardCollection([Copper(), Silver(), Gold(), Gold(), Duchy(), Estate(), Estate(), Copper(), Duchy()])
Пример #9
0
 def __init__(self, game, deck):
     self.game = game
     self.deck = deck
     self.discard = CardCollection()
Пример #10
0
 def select_to_return_to_deck(self, cards, num_cards, is_attack,
                              is_own_cards):
     selected = CardCollection()
     for i in xrange(num_cards):
         selected.add_cards(cards.draw_card())
     return selected
Пример #11
0
class BaseBot(object):
    def __init__(self, game, deck):
        self.game = game
        self.deck = deck
        self.discard = CardCollection()

    def victory_point_count(self):
        full_deck = self.turn.hand + self.deck + self.discard
        return sum(
            card.total_victory_point_value(full_deck) for card in full_deck)

    def log(self, level, message):
        self.game.log(level, message)

    def draw_cards(self, count=1):
        """
        This is the `safe` way to draw up to `count` cards.  If the deck is
        truly out of cards and there are no discards to reshuffle, this will
        just return less cards than asked for.
        """
        if not self.deck:
            self.log(logging.DEBUG,
                     'Player {0} Reshuffling'.format(self.game.get_turn()))
            self.discard.shuffle()
            self.deck, self.discard = self.discard, self.deck
        cards = []
        for i in xrange(count):
            try:
                cards.append(self.deck.draw_card())
            except IndexError:
                break
        return cards

    def discard_cards(self, *cards):
        assert all(cards)
        self.discard.add_cards(*cards)

    def set_turn(self, turn):
        self.turn = turn

    def do_turn(self):
        pass

    def cleanup_turn(self):
        self.discard_cards(*[c for c in self.turn.hand])
        self.discard_cards(*[c for c in self.turn.discard])

    def select_for_discard(self, cards, num_cards, is_attack, is_own_cards):
        selected = CardCollection()
        for i in xrange(num_cards):
            selected.add_cards(cards.draw_card())
        return selected

    def select_to_add_to_deck(self, cards, num_cards):
        """
        cards in this method is a list of card classes, not a collection of cards.
        """
        selected = []
        for i in xrange(num_cards):
            selected.append(cards.pop())
        return selected

    def select_to_return_to_deck(self, cards, num_cards, is_attack,
                                 is_own_cards):
        selected = CardCollection()
        for i in xrange(num_cards):
            selected.add_cards(cards.draw_card())
        return selected
Пример #12
0
 def test_in(self):
     self.assertTrue(Copper() in self.cards)
     self.assertFalse(Copper() in CardCollection(
         [Estate(), Estate(), Gold()]))