def test_discard_card(): deck = Deck() original_size = len(deck) card1 = deck.deal() card2 = deck.deal() card3 = deck.deal() deck.discard(card2) assert len(deck) == original_size - 3 assert len(deck.burned) == 1 assert len(deck.dealed) == 2 assert deck.dealed[0] == card1 assert deck.dealed[1] == card3
def test_doubledeck(self): ''' Ensures that both players have 52 cards in their hand after dealing 2 decks. ''' deck = Deck(2) player_1 = Player(0) player_2 = Player(1) players = [player_1, player_2] deck.shuffle() deck.deal(players) self.assertEqual(len(player_1.hand), 52)
def test_player(self): ''' Ensures that both players have 26 cards in their hand after dealing 1 deck. ''' deck = Deck(1) player_1 = Player(0) player_2 = Player(1) players = [player_1, player_2] deck.shuffle() deck.deal(players) self.assertEqual(len(player_1.hand), 26)
def test_hand_storing(): deck = Deck() hand = Hand() for i in range(4): hand.receive(deck.deal()) sorted_hand = hand.sorted() for i in range(1, len(hand)): assert sorted_hand[i] >= sorted_hand[i - 1]
class BlackJack: def __init__(self, players): self.deck = Deck() self.numPlayers = players self.cards = [] for i in range(players): self.cards.append(self.deck.deal(1)[0]) for i in range(players): self.cards[i].append(self.deck.deal(1)[0]) print(self.cards) def step(self): pass
def test_deck_burned_dealed_are_correct_size(): deck = Deck() original_size = len(deck) card1 = deck.deal() card2 = deck.deal() deck.replace(card1) deck.replace(card2) assert len(deck) == 48 assert len(deck) + deck.burned_size() + deck.dealed_size() == original_size
def test_hand_picking(): deck = Deck() original_size = len(deck) hand = Hand() card = deck.deal() hand.receive(card) assert deck.dealed[0] == hand[0] assert len(hand) == 1 assert len(deck) == original_size - 1
def test_replaced_card(): deck = Deck() original_size = len(deck) card = deck.deal() new_card = deck.replace(card) assert len(deck) == original_size - 2 assert len(deck.dealed) == 1 assert len(deck.burned) == 1 assert card != new_card assert deck.dealed[0] == new_card assert deck.burned[0] == card
def test_deal_card(): deck = Deck() original_size = len(deck) card = deck.deal() assert len(deck) == original_size - 1 assert deck.dealed[0] == card
def test_hand_cannot_be_greater_than_5(): deck = Deck() hand = Hand() with pytest.raises(HandFullException): for i in range(10): hand.receive(deck.deal())
class GameState(): ''' The Game State object contains all variables needed to represent a game. ''' def __init__(self, user_input): '''Creates GameState according to user_input''' # Set starting values for class members self.layouts = [] self.round_number = 1 self.dealer_id = 0 self.current_player = 0 self.current_command = None self.game_deck = None # Set class members based on user input self.total_rounds = user_input["rounds"] self.deck_num = user_input["decks"] self.players = Players( user_input["players"], user_input["human players"], user_input["comp_levels"] ) def start_new_round(self): '''Updates class variable to start a new round.''' # Notify user of new round print("\nRound number '{}' starting ...".format(self.round_number)) # Clear players cards self.players.clear_hands() # Create deck self.game_deck = Deck(self.deck_num) # Shuffle deck self.game_deck.shuffle() # Deal deck to players self.game_deck.deal(self.players) # Create layouts self.layouts = Layouts(self.deck_num) def process_command(self): ''' Requests command from current player and updates the class variables. ''' # Get player instance from the id in the GameState current_player_obj = self.players.get_player_by_id(self.current_player) print( "Player {}'s Turn ({})\n".format( self.current_player, current_player_obj.__class__.__name__ ) ) # Request and validate command from the current player self.current_command = current_player_obj.request_command(self.layouts) print( "Command: {} given by Player: {}_{}".format( self.current_command, current_player_obj.__class__.__name__, self.current_player ) ) # Skip update if command is a pass if not self.current_command.pass_cmd: # Update game state with validated command self.update() def update(self): '''Updates the players cards and layouts''' # Remove card from current players hand self.current_command.card.remove_from_list( self.players.get_player_by_id(self.current_player).hand ) # Add card to Layout layout = self.layouts.get_layout_by_id( self.current_command.layout.layout_id ) layout.cards.append(self.current_command.card) # Update layout valid_cards layout.calculate_valid_cards() def end_turn(self): '''Sets current player to next player_id.''' # Change current player if self.current_player != len(self.players) - 1: self.current_player += 1 else: self.current_player = 0 def end_round(self): '''Increments round_number''' # Increment round number self.round_number += 1 # Increment dealer_id if self.dealer_id != len(self.players) - 1: self.dealer_id += 1 else: self.dealer_id = 0 def check_game_end(self): '''Checks if specified number of game rounds have been exceeded.''' # Check if current round > the number of total desired rounds return self.round_number > self.total_rounds def check_round_winner(self): '''Check if current player has played their last card.''' # Get player instance from the id in the GameState current_player_obj = self.players.get_player_by_id(self.current_player) # Check whether player just played winning move winner = current_player_obj.check_if_winner() if winner: print("Round has been won!") self.end_round() return winner def print_round_state_to_cli(self): ''' Prints current layout state and human player's hand if current player. ''' # Print layouts table print(self.layouts) print("") # Get current Player from current_player_id current_player_obj = self.players.get_player_by_id(self.current_player) # Print Player cards if human if isinstance(current_player_obj, Human): print( "Printing Human Player {} cards:".format( current_player_obj.player_id ) ) print(current_player_obj.get_hand_table()) print("")