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
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)
def setUp(self): self.deck = Deck() self.joker_deck = Deck(True)