示例#1
0
	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')
示例#3
0
    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')
示例#4
0
    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)
示例#5
0
    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')
示例#7
0
    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')
示例#9
0
	def landed(self, player, roll, state):
		return GroupOfChanges(changes=[GameStateChange.send_to_jail(player)])