예제 #1
0
 def perform_agent_action(self, agent: Agent, action: str):
     # Perform the specified action if possible, wait otherwise
     if action == 'UP' and self.tile_is_free(agent.x, agent.y - 1):
         agent.y -= 1
         agent.add_event(e.MOVED_UP)
     elif action == 'DOWN' and self.tile_is_free(agent.x, agent.y + 1):
         agent.y += 1
         agent.add_event(e.MOVED_DOWN)
     elif action == 'LEFT' and self.tile_is_free(agent.x - 1, agent.y):
         agent.x -= 1
         agent.add_event(e.MOVED_LEFT)
     elif action == 'RIGHT' and self.tile_is_free(agent.x + 1, agent.y):
         agent.x += 1
         agent.add_event(e.MOVED_RIGHT)
     elif action == 'BOMB' and agent.bombs_left:
         self.logger.info(
             f'Agent <{agent.name}> drops bomb at {(agent.x, agent.y)}')
         self.bombs.append(
             Bomb((agent.x, agent.y),
                  agent,
                  s.BOMB_TIMER,
                  s.BOMB_POWER,
                  agent.color,
                  custom_sprite=agent.bomb_sprite))
         agent.bombs_left = False
         agent.add_event(e.BOMB_DROPPED)
     elif action == 'WAIT':
         agent.add_event(e.WAITED)
     else:
         agent.add_event(e.INVALID_ACTION)