コード例 #1
0
ファイル: main.py プロジェクト: aviaowl/snap_game
def game(players: List[Player]):
    """Start the game with determined players.
    Steps:
        1. As long as the players have cards, each player takes turns placing the card on the table.
        2. After that, the snap is checked.
        3. When there are no cards left in our hands, find the winner of the game
            with the maximum number of cards in his pile.
    """
    desk_pile = Deck()
    turn_number = 0

    while players[0].has_cards:
        turn_number += 1
        print(f"Turn {turn_number}")
        for player in players:
            played_card = player.turn()
            desk_pile.add_card(played_card)
            check_snap(desk_pile, players)
        sleep(DEFAULT_TURN_TIME_SECONDS)

    pile_sizes = [(player, player.pile_size) for player in players]
    # sort from maximum player pile size to minimum, first player in the list wins the round
    pile_sizes.sort(key=lambda x: x[1], reverse=True)
    game_winner: Player = pile_sizes[0][0]

    # print game results
    print("############################")
    print(f"Player {game_winner.name} WON!")
    print("############################")
    print(f"Game results:\n" +
          "\n".join(f"{player.name}: {player.pile_size} cards"
                    for player in list(players)))
コード例 #2
0
class DeckTestCase(TestCase):
    def setUp(self):
        self.deck = Deck()
        self.test_cards = [
            Card('London', 'Blue'),
            Card('Washington', 'Yellow'),
            Card('Bejing', 'Red'),
            Card('Moscow', 'Black'),
            Card('New York', 'Yellow'),
        ]
        self.deck.cards = self.test_cards.copy()

    def test_prepare(self):
        self.deck.prepare('fake settings')
        self.assertEqual([], self.deck.cards)
        self.assertEqual([], self.deck.discard)

    def test_take_top_card(self):
        card = self.deck.take_top_card()
        self.assertEqual('London', card.name)

        next_card = self.deck.take_top_card()
        self.assertEqual('Yellow', next_card.colour)

    def test_take_bottom_card(self):
        card = self.deck.take_bottom_card()
        self.assertEqual('Yellow', card.colour)

        next_card = self.deck.take_bottom_card()
        self.assertEqual('Moscow', next_card.name)

    def test_add_card(self):
        new_card = Card('Cherepovets', 'Black')
        self.deck.add_card(new_card)

        self.assertEqual('Cherepovets', self.deck.cards[-1].name)

    def test_add_discard(self):
        discarded_card = Card('Cherepovets', 'Black')
        self.deck.add_discard(discarded_card)

        self.assertEqual('Cherepovets', self.deck.discard[-1].name)

    def test_shuffle(self):
        random.seed(42)
        random.shuffle(self.test_cards)

        random.seed(42)
        self.deck.shuffle()
        self.assertEqual(self.test_cards, self.deck.cards)