Exemplo n.º 1
0
    def test_mortgage(self):
        state = GameState(1)
        player = state.players[0]

        # Set up player to own a railroad
        state.apply(
            GroupOfChanges([
                GameStateChange.buy_property(
                    state.squares[INDEX[PENNSYLVANIA_RAILROAD]], player,
                    state.bank)
            ]))

        # Test mortgage
        str_before = str(state)
        state.apply(
            GroupOfChanges([
                GameStateChange.mortgage(
                    state.squares[INDEX[PENNSYLVANIA_RAILROAD]], state)
            ]))
        str_after = str(state)
        expected_diff = [
            # Player cash
            ('Cash: 1300', 'Cash: 1400'),

            # Bank cash
            ('Cash: 200', 'Cash: 100'),

            # Pennsylvania Railroad stats
            ('Mortgaged: False', 'Mortgaged: True')
        ]
        self.assertDiffGameStates(
            str_before,
            str_after,
            expected_diff,
            msg='Pennsylvania Railroad was not mortgaged properly')
Exemplo n.º 2
0
	def test_mortgage(self):
		state = GameState(1)
		player = state.players[0]

		# Set up player to own a railroad
		state.apply(GroupOfChanges([
			GameStateChange.buy_property(state.squares[INDEX[PENNSYLVANIA_RAILROAD]],
				player, state.bank)
		]))

		# Test mortgage
		str_before = str(state)
		state.apply(GroupOfChanges([
			GameStateChange.mortgage(state.squares[INDEX[PENNSYLVANIA_RAILROAD]], state)
		]))
		str_after = str(state)
		expected_diff = [
			# Player cash
			('Cash: 1300', 'Cash: 1400'),

			# Bank cash
			('Cash: 200', 'Cash: 100'),

			# Pennsylvania Railroad stats
			('Mortgaged: False', 'Mortgaged: True')
		]
		self.assertDiffGameStates(str_before, str_after, expected_diff,
			msg='Pennsylvania Railroad was not mortgaged properly')
    def pay(self, player_from, player_to, amount, state):
        transfer_money = GameStateChange.transfer_money(
            player_from, player_to, amount)
        changes = []

        # Try paying all cash first
        if player_from.cash >= amount:
            changes.append(transfer_money)
            return GroupOfChanges(changes=changes)

        # Mortgage properties until the difference is paid off
        difference = amount - player_from.cash
        i = 0
        while difference > 0 and i < len(player_from.props):
            prop = player_from.props[i]
            i += 1
            if not prop.mortgaged and DefaultDecisionMaker._can_mortgage_property(
                    prop, state):
                mortgage = GameStateChange.mortgage(prop, player_from,
                                                    state.bank)
                changes.append(mortgage)
                difference -= mortgage.change_in_cash[player_from]

        if difference <= 0:
            changes.append(transfer_money)
            return GroupOfChanges(changes=changes)

        # Mortgaging was not enough. Demolish until the difference is paid off
        i = 0
        while difference > 0 and i < len(player_from.props):
            prop = player_from.props[i]
            i += 1
            if prop.num_houses > 0:
                demolition = DefaultDecisionMaker._demolish_from_property_group(
                    prop, state)
                if demolition != None:
                    changes.append(demolition)
                    difference -= demolition.change_in_cash[player_from]

        if difference <= 0:
            changes.append(transfer_money)
            return GroupOfChanges(changes=changes)

        # Player cannot pay it off, so he loses
        return GroupOfChanges(
            changes=[GameStateChange.eliminate(player_from, player_to, state)])
	def pay(self, player_from, player_to, amount, state):
		transfer_money = GameStateChange.transfer_money(player_from, player_to, amount)
		changes = []

		# Try paying all cash first
		if player_from.cash >= amount:
			changes.append(transfer_money)
			return GroupOfChanges(changes=changes)

		# Mortgage properties until the difference is paid off
		difference = amount - player_from.cash
		i = 0
		while difference > 0 and i < len(player_from.props):
			prop = player_from.props[i]
			i += 1
			if not prop.mortgaged and DefaultDecisionMaker._can_mortgage_property(prop, state):
				mortgage = GameStateChange.mortgage(prop, player_from, state.bank)
				changes.append(mortgage)
				difference -= mortgage.change_in_cash[player_from]

		if difference <= 0:
			changes.append(transfer_money)
			return GroupOfChanges(changes=changes)

		# Mortgaging was not enough. Demolish until the difference is paid off
		i = 0
		while difference > 0 and i < len(player_from.props):
			prop = player_from.props[i]
			i += 1
			if prop.num_houses > 0:
				demolition = DefaultDecisionMaker._demolish_from_property_group(prop, state)
				if demolition != None:
					changes.append(demolition)
					difference -= demolition.change_in_cash[player_from]

		if difference <= 0:
			changes.append(transfer_money)
			return GroupOfChanges(changes=changes)

		# Player cannot pay it off, so he loses
		return GroupOfChanges(changes=[GameStateChange.eliminate(player_from, player_to, state)])