Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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')
Exemplo n.º 3
0
    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])
Exemplo n.º 4
0
	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)
Exemplo n.º 5
0
	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')
Exemplo n.º 6
0
    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))
Exemplo n.º 7
0
	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))