def run(self): num_players = len(self._state.players) idx = random.randint(0,num_players-1) while not self._completed(): # cash = [player.cash for player in self._state.players] # print cash player = self._state.players[idx] idx = (idx + 1) % len(self._state.players) roll = Roll() print '%s rolled a %d%s' % (player.name, roll.value, ' (doubles)' if roll.is_doubles else '') if player.jail_moves > 0 and roll.is_doubles: self._state.apply(GroupOfChanges(changes=[GameStateChange.leave_jail(player)])) elif player.jail_moves >= 2: self._state.apply(GroupOfChanges(changes=[GameStateChange.decrement_jail_moves(player)])) self._wait() continue elif player.jail_moves == 1: # TODO: Allow player to choose to use a "Get out of jail free" card pay_changes = player.pay(self._state.bank, 50, self._state) leave_changes = GroupOfChanges(changes=[GameStateChange.leave_jail(player)]) self._state.apply(GroupOfChanges.combine([pay_changes, leave_changes])) self._take_turn(player, roll.value) num_rolls = 0 max_rolls = 2 while roll.is_doubles: roll = Roll() print '%s rolled a %d%s' % (player.name, roll.value, ' (doubles)' if roll.is_doubles else '') num_rolls += 1 if num_rolls > max_rolls: self._state.apply(GroupOfChanges(changes=[GameStateChange.send_to_jail(player)])) break self._take_turn(player, roll.value)
def test_leave_jail(self): state = GameState(1) player = state.players[0] # Test that leaving jail works no matter how many jail moves are left for num_turns in range(0, 3): # Set up player in jail state.apply(GroupOfChanges([ GameStateChange.send_to_jail(player)])) # Decrement player's jail moves num_turns (0, 1, or 2) times for i in range(0, num_turns): state.apply(GroupOfChanges([ GameStateChange.decrement_jail_moves(player)])) # Test leaving jail, and ensure that player's jail moves are changed # correctly and that no other changes were made to the state. str_before = str(state) state.apply(GroupOfChanges([ GameStateChange.leave_jail(player)])) str_after = str(state) expected_diff = [ ('Jail moves: %d' % (3-num_turns), 'Jail moves: 0') ] self.assertDiffGameStates(str_before, str_after, expected_diff, msg='Player did not leave jail properly')
def test_leave_jail(self): state = GameState(1) player = state.players[0] # Test that leaving jail works no matter how many jail moves are left for num_turns in range(0, 3): # Set up player in jail state.apply(GroupOfChanges([GameStateChange.send_to_jail(player)])) # Decrement player's jail moves num_turns (0, 1, or 2) times for i in range(0, num_turns): state.apply( GroupOfChanges( [GameStateChange.decrement_jail_moves(player)])) # Test leaving jail, and ensure that player's jail moves are changed # correctly and that no other changes were made to the state. str_before = str(state) state.apply(GroupOfChanges([GameStateChange.leave_jail(player)])) str_after = str(state) expected_diff = [('Jail moves: %d' % (3 - num_turns), 'Jail moves: 0')] self.assertDiffGameStates(str_before, str_after, expected_diff, msg='Player did not leave jail properly')
def run(self): num_players = len(self._state.players) idx = random.randint(0, num_players - 1) while not self._completed(): # cash = [player.cash for player in self._state.players] # print cash player = self._state.players[idx] idx = (idx + 1) % len(self._state.players) roll = Roll() print '%s rolled a %d%s' % (player.name, roll.value, ' (doubles)' if roll.is_doubles else '') if player.jail_moves > 0 and roll.is_doubles: self._state.apply( GroupOfChanges( changes=[GameStateChange.leave_jail(player)])) elif player.jail_moves >= 2: self._state.apply( GroupOfChanges( changes=[GameStateChange.decrement_jail_moves(player) ])) self._wait() continue elif player.jail_moves == 1: # TODO: Allow player to choose to use a "Get out of jail free" card pay_changes = player.pay(self._state.bank, 50, self._state) leave_changes = GroupOfChanges( changes=[GameStateChange.leave_jail(player)]) self._state.apply( GroupOfChanges.combine([pay_changes, leave_changes])) self._take_turn(player, roll.value) num_rolls = 0 max_rolls = 2 while roll.is_doubles: roll = Roll() print '%s rolled a %d%s' % (player.name, roll.value, ' (doubles)' if roll.is_doubles else '') num_rolls += 1 if num_rolls > max_rolls: self._state.apply( GroupOfChanges( changes=[GameStateChange.send_to_jail(player)])) break self._take_turn(player, roll.value)
def test_send_to_jail(self): state = GameState(1) player = state.players[0] # Send the player to jail, and compare GameState's string encodings to # ensure that only the player's position was changed position_before = player.position position_jail = INDEX[JAIL] str_before = str(state) state.apply(GroupOfChanges([GameStateChange.send_to_jail(player)])) str_after = str(state) expected_diff = [('Position: %d' % position_before, 'Position: %d' % position_jail), ('Jail moves: 0', 'Jail moves: 3')] self.assertDiffGameStates(str_before, str_after, expected_diff, msg='Player was not sent to jail properly')
def test_send_to_jail(self): state = GameState(1) player = state.players[0] # Send the player to jail, and compare GameState's string encodings to # ensure that only the player's position was changed position_before = player.position position_jail = INDEX[JAIL] str_before = str(state) state.apply(GroupOfChanges([ GameStateChange.send_to_jail(player)])) str_after = str(state) expected_diff = [ ('Position: %d' % position_before, 'Position: %d' % position_jail), ('Jail moves: 0', 'Jail moves: 3') ] self.assertDiffGameStates(str_before, str_after, expected_diff, msg='Player was not sent to jail properly')
def test_decrement_jail_moves(self): state = GameState(1) player = state.players[0] # Set up player in jail state.apply(GroupOfChanges([GameStateChange.send_to_jail(player)])) # Decrement jail moves, and test that the player's jail moves were changed # correctly and that no other changes were made to the state. str_before = str(state) state.apply( GroupOfChanges([GameStateChange.decrement_jail_moves(player)])) str_after = str(state) expected_diff = [('Jail moves: 3', 'Jail moves: 2')] self.assertDiffGameStates( str_before, str_after, expected_diff, msg='Player jail moves were not decremented properly')
def test_decrement_jail_moves(self): state = GameState(1) player = state.players[0] # Set up player in jail state.apply(GroupOfChanges([ GameStateChange.send_to_jail(player)])) # Decrement jail moves, and test that the player's jail moves were changed # correctly and that no other changes were made to the state. str_before = str(state) state.apply(GroupOfChanges([ GameStateChange.decrement_jail_moves(player)])) str_after = str(state) expected_diff = [ ('Jail moves: 3', 'Jail moves: 2') ] self.assertDiffGameStates(str_before, str_after, expected_diff, msg='Player jail moves were not decremented properly')
def landed(self, player, roll, state): return GroupOfChanges(changes=[GameStateChange.send_to_jail(player)])