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 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)])