class ERSTable(Table):
   
    def __init__(self, player_count=2):
        self.players = []
        self.deck = Deck()
        self.pile = DiscardPile()
        self.deck.shuffle()
        for i in range(player_count):
            self.players.append(ERSPlayer())
        self.deal_all()

    def get_winner(self):
        for i in range(len(self.players)):
            return i

    def play_game(self):
        player = 0
        while not self.winner():
            value = 0
            if len(self.pile.cards) > 0:
                value = self.pile.peek().value
            if value == 1 or value > 10:
                player = self.war(player)
            else:
                if player == 0:
                    raw_input(_("Play a card!"))
                card = self.players[player].flip()
                print(_("Player {} plays the {}!").format(player, card))
                self.pile.add(card)
            self.wait_for_slap(0.25)
            player = ((player + 1) % len(self.players))
        print(_("Player {} wins!").format(self.get_winner()))

    def wait_for_slap(self, t):
        sleep(t)

    def war(self, player):
        value = self.pile.peek().value
        num = 0
        if value == 1:
            num = 4
        else:
            num = value - 10
        for i in range(num):
            card = self.players[player].flip()
            print(_("Player {} plays the {}!").format(player, card))
            self.pile.add(card)
            value = card.value
            self.wait_for_slap(0.25)
            if value == 1 or value > 10:
                return player
        self.players[player].cards = self.pile.cards + self.players[player].hand
        self.pile.cards = []
        return player - 1        

    def winner(self):
        for player in self.players:
            if len(player.hand) == 0:
                return True
        return False
class OldMaidTable(Table):

    def __init__(self, player_count=2):
        self.players = []
        self.deck = Deck()
        self.deck.cards.append(Card(0, "Joker"))
        self.deck.shuffle()
        for i in range(player_count):
            self.players.append(OldMaidPlayer())
        self.deal_all()

    def get_loser(self):
        loser = -1
        for i in range(len(self.players)):
            if len(self.players[i].hand) != 0:
                loser = i
        return loser
    
    def play_game(self):
        for i in range(len(self.players)):
            self.players[i].update_score()
        player = 0
        while not self.winner():
            if player == 0: #human
                self.players[0].print_hand()
                raw_input(_("Taking a card from the player on your left..."))
                onleft = player - 1
                while len(self.players[onleft].hand) == 0:
                    onleft -= 1
                card_taken = self.players[onleft].hand[randrange(len(self.players[onleft].hand))]
                print(_("You take the {}").format(card_taken))
                self.players[0].hand.append(card_taken)
                self.players[onleft].remove_card(card_taken)
            else: #inhuman
                while len(self.players[onleft].hand) == 0:
                    onleft -= 1
                card_taken = self.players[onleft].hand[randrange(len(self.players[onleft].hand))]
                if (onleft%len(self.players)) != 0:
                    print(_("Player {} takes a card").format(player))
                else:
                    print(_("Player {} takes your {}").format(player, card_taken))
                self.players[player].hand.append(card_taken)
                self.players[onleft].remove_card(card_taken)
            self.players[player].update_score()
            player = ((player + 1) % len(self.players))
        print(_("Player {} loses!").format(self.get_loser()))

    def winner(self):
        count = 0
        for player in self.players:
            if len(player.hand) == 0:
                count += 1
        return count == (len(self.players) - 1)
 def __init__(self, player_count=2):
     self.players = []
     self.deck = Deck()
     self.deck.cards.append(Card(0, "Joker"))
     self.deck.shuffle()
     for i in range(player_count):
         self.players.append(OldMaidPlayer())
     self.deal_all()
 def __init__(self, player_count=2):
     self.players = []
     self.deck = Deck()
     self.pile = DiscardPile()
     self.deck.shuffle()
     for i in range(player_count):
         self.players.append(ERSPlayer())
     self.deal_all()
    def __init__(self, player_count=2):
        self.players = []
        self.deck = Deck()
        self.deck.shuffle()
        self.discard = DiscardPile()
        self.trick = Trick()
        self.trick.cards = []

        for i in range(player_count):
            self.players.append(Player())
    def __init__(self, player_count=2):
        self.players = []
        self.deck = Deck()
        self.deck.shuffle()
        self.players.append(GoFishHumanPlayer("Puny Human"))
        for i in range(player_count - 1):
            self.players.append(GoFishAIPlayer(_("Computer %s") % (i + 1)))
        self.deal(7)

        # interacting with GUI
        self.current_player = 0
        self.other_player = None
class Table(object):
    def __init__(self, player_count=2):
        self.players = []
        self.deck = Deck()
        self.deck.shuffle()
        self.discard = DiscardPile()
        self.trick = Trick()
        self.trick.cards = []

        for i in range(player_count):
            self.players.append(Player())

    def deal(self, num_cards):
        if num_cards * len(self.players) > len(self.deck.cards):
            raise IndexError

        for i in range(num_cards):
            for player in self.players:
                player.draw_from(self.deck)

    def deal_all(self):
        player = 0
        while len(self.deck.cards) > 0:
            self.players[player].draw_from(self.deck)
            player = (player + 1) % len(self.players)

    def play_game(self):
        while not self.winner():
            self.trick.cards = []
            self.deal(1)
            for player in self.players:
                self.trick.cards.append(player.play_card())
        return self.winner()

    def winner(self):
        if len(self.trick.cards) > 0:
            if self.trick.cards[0] > self.trick.cards[1]:
                return self.players[0]
            elif self.trick.cards[0] < self.trick.cards[1]:
                return self.players[1]
class GoFishTable(Table):
    def __init__(self, player_count=2):
        self.players = []
        self.deck = Deck()
        self.deck.shuffle()
        self.players.append(GoFishHumanPlayer("Puny Human"))
        for i in range(player_count - 1):
            self.players.append(GoFishAIPlayer(_("Computer %s") % (i + 1)))
        self.deal(7)

        # interacting with GUI
        self.current_player = 0
        self.other_player = None

    def get_winner(self):
        max_score_player = -1
        for i in range(len(self.players)):
            if max_score_player == -1 or self.players[i].score > self.players[max_score_player].score:
                max_score_player = i
        return max_score_player

    def play_turn(self, card_value=None):
        ret = ""
        others = self.players[0 : self.current_player] + self.players[self.current_player + 1 :]
        print _("Player %s:") % self.current_player
        if self.players[self.current_player].player_type() == 1:  # is AI
            ret = self.players[self.current_player].play_round(others, self.deck)
        else:  # is Human
            ret = self.players[self.current_player].play_round(card_value, self.players, self.other_player, self.deck)
        self.players[self.current_player].update_score()
        self.current_player = (self.current_player + 1) % (len(self.players))
        return ret

    def winner(self):
        for player in self.players:
            if len(player.hand) == 0:
                return True
        return False
Esempio n. 9
0
class TestDeck(unittest.TestCase):

    def setUp(self):
        self.deck = Deck()
        self.joker_deck = Deck(True)

    def test_size(self):
        self.assertEqual(len(self.deck.cards), 52)

    def test_joker_size(self):
        self.assertEqual(len(self.joker_deck.cards), 53)

    def test_draw(self):
        initial_length = len(self.deck.cards)
        self.assertEqual(str(self.deck.draw()), "King of Spades")
        self.assertEqual(len(self.deck.cards), initial_length - 1)

    def test_draw_from_empty_deck(self):
        self.deck.cards = []
        self.assertRaises(IndexError, self.deck.draw)
Esempio n. 10
0
 def setUp(self):
     self.deck = Deck()
     self.joker_deck = Deck(True)