Exemplo n.º 1
0
    def incrementTimer(state):
        freezeTimer = state.freezeTimer
        if freezeTimer == 1:
            state.configuration.pos = nearestPoint(state.configuration.pos)
        state.freezeTimer = min(FREEZE_TIME, freezeTimer + 1)

        jumpTimer = state.jumpTimer
        if jumpTimer == 1:
            state.configuration.pos = nearestPoint(state.configuration.pos)
        state.jumpTimer = min(JUMP_TIME, jumpTimer + 1)
Exemplo n.º 2
0
 def decrementTimer(state):
     scaredTimer = state.scaredTimer
     frozenTimer = state.frozenTimer
     if scaredTimer == 1 or frozenTimer == 1:
         state.configuration.pos = nearestPoint(state.configuration.pos)
     state.scaredTimer = max(0, scaredTimer - 1)
     state.frozenTimer = max(0, frozenTimer - 1)
    def getAction(self, gameState):
        """
        Calls chooseAction on a grid position, but continues on half positions.
        If you subclass CaptureAgent, you shouldn't need to override this method.  It
        takes care of appending the current gameState on to your observation history
        (so you have a record of the game states of the game) and will call your
        choose action method if you're in a state (rather than halfway through your last
        move - this occurs because Pacman agents move half as quickly as ghost agents).

        """
        self.observationHistory.append(gameState)

        myState = gameState.getAgentState(self.index)
        myPos = myState.getPosition()
        if myPos != nearestPoint(myPos):
            # We're halfway from one position to the next
            return gameState.getLegalActions(self.index)[0]
        else:
            return self.chooseAction(gameState)
Exemplo n.º 4
0
    def applyAction(state, action):
        """
        Edits the state to reflect the results of the action.
        """
        legal = PacmanRules.getLegalActions(state)
        if action not in legal:
            raise Exception("Illegal action " + str(action))

        pacmanState = state.data.agentStates[0]

        # Update Configuration
        vector = Actions.directionToVector(action, PacmanRules.PACMAN_SPEED)
        pacmanState.configuration = pacmanState.configuration.generateSuccessor(vector)

        # Eat
        next = pacmanState.configuration.getPosition()
        nearest = nearestPoint(next)
        if manhattanDistance(nearest, next) <= 0.5:
            # Remove food
            PacmanRules.consume(nearest, state)
Exemplo n.º 5
0
    def applyAction(state, action, agentIndex):
        """
    Edits the state to reflect the results of the action.
    """
        legal = AgentRules.getLegalActions(state, agentIndex)
        if action not in legal:
            action = 'STOP'
        cost = Costs[action]
        state.data.scoreChange += -cost if state.isOnRedTeam(
            agentIndex) else cost

        if action == 'FROZEN' or action == 'STOP':
            return
        if action == 'FREEZE':
            agentState = state.data.agentStates[agentIndex]
            agentState.freezeTimer = 0
            position = agentState.configuration.getPosition()
            for index in range(state.getNumAgents()):
                if index == agentIndex:
                    continue
                otherAgentState = state.data.agentStates[index]
                otherPosition = otherAgentState.getPosition()
                if otherPosition != None and manhattanDistance(
                        otherPosition, position) <= 3:
                    otherAgentState.frozenTimer = FROZEN_TIME
        else:
            # Update Configuration
            agentState = state.data.agentStates[agentIndex]

            # Jump Cooldown
            if "Jump_" in action:
                agentState.jumpTimer = 0

            speed = 1.0
            # if agentState.isPacman: speed = 0.5
            vector = Actions.directionToVector(action, speed)
            oldConfig = agentState.configuration
            agentState.configuration = oldConfig.generateSuccessor(vector)

            # Eat
            next = agentState.configuration.getPosition()
            nearest = nearestPoint(next)

            if next == nearest:
                isRed = state.isOnRedTeam(agentIndex)
                # Change agent type
                agentState.isPacman = [
                    isRed, state.isRed(agentState.configuration)
                ].count(True) == 1
                # if he's no longer pacman, he's on his own side, so reset the num carrying timer
                #agentState.numCarrying *= int(agentState.isPacman)
                if agentState.numCarrying > 0 and not agentState.isPacman:
                    score = agentState.numCarrying if isRed else -1 * agentState.numCarrying
                    state.data.scoreChange += score

                    agentState.numReturned += agentState.numCarrying
                    agentState.numCarrying = 0

                    redCount = 0
                    blueCount = 0
                    for index in range(state.getNumAgents()):
                        agentState = state.data.agentStates[index]
                        if index in state.getRedTeamIndices():
                            redCount += agentState.numReturned
                        else:
                            blueCount += agentState.numReturned
                    if redCount >= (TOTAL_FOOD /
                                    2) - MIN_FOOD or blueCount >= (
                                        TOTAL_FOOD / 2) - MIN_FOOD:
                        state.data._win = True

            if agentState.isPacman and manhattanDistance(nearest, next) <= 0.9:
                AgentRules.consume(nearest, state,
                                   state.isOnRedTeam(agentIndex))
Exemplo n.º 6
0
 def decrementTimer(ghostState):
     timer = ghostState.scaredTimer
     if timer == 1:
         ghostState.configuration.pos = nearestPoint(ghostState.configuration.pos)
     ghostState.scaredTimer = max(0, timer - 1)