class TestDeck(unittest.TestCase): def setUp(self): self.deck = Deck() def test_is_constructed(self): self.assertIsInstance(self.deck, Deck) self.assertTrue(len(self.deck.cards), 52) def test_card_draw(self): self.assertIsInstance(self.deck.draw(), Card) def test_discard(self): card = self.deck.draw() self.deck.discard(card) self.assertTrue(len(self.deck.discard_pile), 1) def test_deck_reshuffled_if_all_cards_drawn(self): # draw and discard all cards for i in range(52): card = self.deck.draw() self.deck.discard(card) # draw initiates reshuffle card = self.deck.draw() self.deck.discard(card) self.assertEqual(len(self.deck.cards), 51) self.assertEqual(len(self.deck.discard_pile), 1)
class BlackJack: def __init__(self): self.deck = Deck() self.players = [Dealer(), Player()] self.max_players = max_players def add_player(self, player): if len(self.players) <= 8: raise TooManyPlayers self.players.append(player) def initial_deal(self): self.deck.shuffle() self.deck.cut() def deal(self): for player in players: player.hand.add_card(self.deck.draw())
class Game(): def __init__(self, gameid, draw_pile=None, players=[], game_board=[], prev_turn=[]): if not draw_pile: self.draw_pile = Deck() self.draw_pile.shuffle() else: self.draw_pile = draw_pile self.players = players self.game_board = game_board self.id = gameid self.prev_turn = prev_turn def deal_start(self): """ deals the cards for the start of the game @return: tuple( hand:3Card deck table: 4 card Deck) """ hand = Deck([]) table = Deck([]) for i in range(0, 3): hand.cards.append(self.draw_pile.draw()) for i in range(0, 4): table.cards.append(self.draw_pile.draw()) return (hand, table) def deal(self): """ deals a card if permitted @return: None if there are no Cards, a Card off the top of the deck otherwise """ if self.draw_pile.deck_length == 0: return None return self.draw_pile.draw() def join(self, player_user): """ adds a player to the game @param: players username @return: False if player exists, True otherwise """ if player_user in self.players: return False self.players.append(player_user) return True def burn_deck(self): """ gets rid of the current game stack """ self.game_board = [] def process_turn(self, turn): """ process turn for player @param: player_user: the username for the player @param: turn: the list of Cards submitted for a players turn @return: False if the turn couln't be processed, True otherwise """ if len(turn) == 0: return False for card in turn: self.game_board.append(card) player = self.players.pop() self.players = [player] + self.players if len(self.game_board) > 3: if self.game_board[-1].rank == self.game_board[ -2].rank == self.game_board[-3].rank == self.game_board[ -4].rank: self.burn_deck() return True
from card import Deck, Player deck = Deck() cardInPlay = None players = [] currentPlayerIndex = 0 direction = 1 skipMod = 1 for n in range(4): players.append(Player(n)) for m in range(7): players[0].addToHand(deck.draw()) players[1].addToHand(deck.draw()) players[2].addToHand(deck.draw()) players[3].addToHand(deck.draw()) cardInPlay = deck.draw() winner = False def nextPlayerHandler(): global currentPlayerIndex, skipMod, direction num = currentPlayerIndex + direction * skipMod if num > 3: return num - 4 elif num < 0: return num + 4