def test_decrement_jail_card_count(self): state = GameState(1) player = state.players[0] # Test both decks dict_card_types = { CHANCE_CARD: 'Chance', COMMUNITY_CHEST_CARD: 'Community Chest' } for card_type, card_str in dict_card_types.iteritems(): deck = state.decks[card_type] # Set up a player to have a 'Get out of jail free' card while deck.peek() != LMBDA_GET_OUT_OF_JAIL_FREE: state.apply( GroupOfChanges([GameStateChange.draw_card(deck, player)])) state.apply( GroupOfChanges([GameStateChange.draw_card(deck, player) ])) # draw Jail Free card # Test difference in jail card count by looking at the difference in # GameStates' string encodings. Ensure that only the jail card count was # changed. str_before = str(state) state.apply( GroupOfChanges( [GameStateChange.decrement_jail_card_count(player, deck)])) str_after = str(state) expected_diff = [('Jail free count: 1', 'Jail free count: 0')] self.assertDiffGameStates( str_before, str_after, expected_diff, msg='Jail free count was not decremented correctly') # Test that the Jail Free card was placed back on the bottom of the deck, # and that no additional copies of the Jail Free card are in the deck count = 0 for i in range(0, deck.size() - 1): card = deck.draw() # draw all cards except last one if card == LMBDA_GET_OUT_OF_JAIL_FREE: count += 1 self.assertEqual( count, 0, msg= 'Another Get out of jail free card is in the middle of the %s deck' % card_str) self.assertEqual( deck.peek(), LMBDA_GET_OUT_OF_JAIL_FREE, msg='Get out of jail free card was not replaced into %s deck' % card_str)
def test_draw_card(self): state = GameState(1) player = state.players[0] # Test every card in both decks dict_card_types = { CHANCE_CARD: 'Chance', COMMUNITY_CHEST_CARD: 'Community Chest' } for card_type, card_str in dict_card_types.iteritems(): deck = state.decks[card_type] # Draw every card in the deck, check that cards are handled correctly # and that nothing else in the state is changed card = None for i in range(0, deck.size()): card = deck.peek() jail_free_count_before = player.jail_free_count str_before = str(state) expected_diff = None # initialized in the following if-block state.apply( GroupOfChanges([GameStateChange.draw_card(deck, player)])) if card == LMBDA_GET_OUT_OF_JAIL_FREE: # Check that the card is not replaced on the deck, and that the # player's Jail Free card count is incremented. self.assertEqual(player.jail_free_count, jail_free_count_before + 1) for j in range(0, deck.size()): self.assertNotEqual(deck.draw(), LMBDA_GET_OUT_OF_JAIL_FREE) # Initialize. Used after this if-block to ensure that nothing else # in the state was changed. expected_diff = [ ('Jail free count: %d' % jail_free_count_before, 'Jail free count: %d' % player.jail_free_count) ] else: # Check that the card is replaced on the bottom if it is not the # Jail Free card. for j in range(0, deck.size() - 1): deck.draw() self.assertEqual(deck.draw(), card) # compare with last card # Initialize expected_diff = [] # Check that the rest of the state is unchanged by comparing the # string encodings of the GameStates str_after = str(state) self.assertDiffGameStates( str_before, str_after, expected_diff, msg='The GameState was not modified correctly')
def landed(self, player, roll, state): deck = state.decks[self._card_type] draw_card = GameStateChange.draw_card(deck, player) card_lmbda = draw_card.card_drawn[deck] result_of_card = None if card_lmbda == LMBDA_GET_OUT_OF_JAIL_FREE: result_of_card = GroupOfChanges() else: result_of_card = card_lmbda(player, state) return GroupOfChanges.combine( [GroupOfChanges([draw_card]), result_of_card])
def test_decrement_jail_card_count(self): state = GameState(1) player = state.players[0] # Test both decks dict_card_types = { CHANCE_CARD: 'Chance', COMMUNITY_CHEST_CARD: 'Community Chest' } for card_type, card_str in dict_card_types.iteritems(): deck = state.decks[card_type] # Set up a player to have a 'Get out of jail free' card while deck.peek() != LMBDA_GET_OUT_OF_JAIL_FREE: state.apply(GroupOfChanges([ GameStateChange.draw_card(deck, player)])) state.apply(GroupOfChanges([ GameStateChange.draw_card(deck, player)])) # draw Jail Free card # Test difference in jail card count by looking at the difference in # GameStates' string encodings. Ensure that only the jail card count was # changed. str_before = str(state) state.apply(GroupOfChanges([ GameStateChange.decrement_jail_card_count(player, deck)])) str_after = str(state) expected_diff = [ ('Jail free count: 1', 'Jail free count: 0') ] self.assertDiffGameStates(str_before, str_after, expected_diff, msg='Jail free count was not decremented correctly') # Test that the Jail Free card was placed back on the bottom of the deck, # and that no additional copies of the Jail Free card are in the deck count = 0 for i in range(0, deck.size() - 1): card = deck.draw() # draw all cards except last one if card == LMBDA_GET_OUT_OF_JAIL_FREE: count += 1 self.assertEqual(count, 0, msg='Another Get out of jail free card is in the middle of the %s deck' % card_str) self.assertEqual(deck.peek(), LMBDA_GET_OUT_OF_JAIL_FREE, msg='Get out of jail free card was not replaced into %s deck' % card_str)
def test_draw_card(self): state = GameState(1) player = state.players[0] # Test every card in both decks dict_card_types = { CHANCE_CARD: 'Chance', COMMUNITY_CHEST_CARD: 'Community Chest' } for card_type, card_str in dict_card_types.iteritems(): deck = state.decks[card_type] # Draw every card in the deck, check that cards are handled correctly # and that nothing else in the state is changed card = None for i in range(0, deck.size()): card = deck.peek() jail_free_count_before = player.jail_free_count str_before = str(state) expected_diff = None # initialized in the following if-block state.apply(GroupOfChanges([ GameStateChange.draw_card(deck, player)])) if card == LMBDA_GET_OUT_OF_JAIL_FREE: # Check that the card is not replaced on the deck, and that the # player's Jail Free card count is incremented. self.assertEqual(player.jail_free_count, jail_free_count_before + 1) for j in range(0, deck.size()): self.assertNotEqual(deck.draw(), LMBDA_GET_OUT_OF_JAIL_FREE) # Initialize. Used after this if-block to ensure that nothing else # in the state was changed. expected_diff = [ ('Jail free count: %d' % jail_free_count_before, 'Jail free count: %d' % player.jail_free_count) ] else: # Check that the card is replaced on the bottom if it is not the # Jail Free card. for j in range(0, deck.size() - 1): deck.draw() self.assertEqual(deck.draw(), card) # compare with last card # Initialize expected_diff = [] # Check that the rest of the state is unchanged by comparing the # string encodings of the GameStates str_after = str(state) self.assertDiffGameStates(str_before, str_after, expected_diff, msg='The GameState was not modified correctly')
def setup_eliminated_player(self, state): player = state.players[0] light_blues = [ORIENTAL_AVENUE, VERMONT_AVENUE, CONNECTICUT_AVENUE] # Give player properties changes = [] for prop_name in light_blues: changes.append( GameStateChange.buy_property(state.squares[INDEX[prop_name]], player, state.bank)) state.apply(GroupOfChanges(changes)) # Build to 3 house level on light blues for count in range(0, 3): for prop_name in light_blues: state.apply( GroupOfChanges([ GameStateChange.build(state.squares[INDEX[prop_name]], state) ])) # Give player some other properties mortgaged changes = [] other_props = [STATES_AVENUE, SHORT_LINE_RAILROAD] for prop_name in other_props: changes.append( GameStateChange.buy_property(state.squares[INDEX[prop_name]], player, state.bank, mortgaged=True)) state.apply(GroupOfChanges(changes)) # Give player a Jail Free card changes = [] deck = state.decks[CHANCE_CARD] while deck.peek() != LMBDA_GET_OUT_OF_JAIL_FREE: deck.draw() changes.append(GameStateChange.draw_card( deck, player)) # draw Jail Free card state.apply(GroupOfChanges(changes))
def setup_eliminated_player(self, state): player = state.players[0] light_blues = [ORIENTAL_AVENUE, VERMONT_AVENUE, CONNECTICUT_AVENUE] # Give player properties changes = [] for prop_name in light_blues: changes.append(GameStateChange.buy_property(state.squares[INDEX[prop_name]], player, state.bank)) state.apply(GroupOfChanges(changes)) # Build to 3 house level on light blues for count in range(0, 3): for prop_name in light_blues: state.apply(GroupOfChanges([ GameStateChange.build(state.squares[INDEX[prop_name]], state) ])) # Give player some other properties mortgaged changes = [] other_props = [STATES_AVENUE, SHORT_LINE_RAILROAD] for prop_name in other_props: changes.append(GameStateChange.buy_property(state.squares[INDEX[prop_name]], player, state.bank, mortgaged=True)) state.apply(GroupOfChanges(changes)) # Give player a Jail Free card changes = [] deck = state.decks[CHANCE_CARD] while deck.peek() != LMBDA_GET_OUT_OF_JAIL_FREE: deck.draw() changes.append(GameStateChange.draw_card(deck, player)) # draw Jail Free card state.apply(GroupOfChanges(changes))