Exemplo n.º 1
0
 def __init__(self, level, clone=False):
     if clone:
         self.level = level
         self.verbose = False
     else:
         self.iterations = 0
         self.level = level
         self.verbose = False
         self.positions = []
         self.corridor_graph = corridormap.build_graph(level.blockHeights, level.width, level.height)
         self.kdtree = scipy.spatial.cKDTree([self.corridor_graph.node[n]["position"] for n in self.corridor_graph.nodes()])
         self.lookup = [[None for y in range(level.height)] for x in range(level.width)]
         node_count = len(self.corridor_graph.nodes())
         for x, y in itertools.product(range(level.width), range(level.height)):
             closest = None
             for d, i in zip(*self.kdtree.query((x, y), 2, distance_upper_bound=8.0)):
                 if i >= node_count:
                     continue
                 if closest is None or d < closest:
                     self.lookup[x][y] = i
                     closest = d
         self.explored = [False for x in range(len(self.corridor_graph.nodes()))]
         # Initialise the seen grids to false.
         self.seen = [ [False for y in range(level.height)] for x in range(level.width)]
         # Initialise the visibility to false.
         self.visibility = [ [False for y in range(level.height)] for x in range(level.width)]
    def initialize(self):
        """
        Called at the start of the game. Any heavy computation should be carried out here to save time later on.
        Here we construct the corridor map.
        """
        # Set parameters for visualisation
        self.window = visualizer.VisualizerWindow(self)
        self.window.drawBots = True
        self.game_state_updated = True

        # Generate our corridor map, capturing useful information out of the map
        self.corridor_graph = corridormap.build_graph(self.level.blockHeights, self.level.width, self.level.height)

        # We use scipy to perform a nearest neighbour look-up.
        # This allows use to work out which node the bots are closest to.
        self.kdtree = scipy.spatial.cKDTree([self.corridor_graph.node[n]["position"]
                                             for n in self.corridor_graph.nodes()])

        # Using the nearest neighbour tree. For each grid block, which is 1m x 1m, what is the closest node.
        self.lookup = [[None for y in range(self.level.height)] for x in range(self.level.width)]
        node_count = len(self.corridor_graph.nodes())
        for x, y in itertools.product(range(self.level.width), range(self.level.height)):
            closest = None
            for d, i in zip(*self.kdtree.query((x, y), 2, distance_upper_bound=8.0)):
                if i >= node_count:
                    continue
                if closest is None or d < closest:
                    self.lookup[x][y] = i
                    closest = d

        # Initialise all nodes to not having been visited.
        self.explored = [False for x in range(len(self.corridor_graph.nodes()))]

        self.initialise = True
Exemplo n.º 3
0
    def initialize(self):
        layer = self.visualizer.anonymousLayer(True)
        self.visualizer.addLabel("Initializing...", "centered-info-box", Color(222, 222, 222, 255), None)
        self.visualizer.endLayer()

        self.bestBotShapeId = -1
        self.selectedBot = None
        self.selectedBotShapeId = -1
        self.lastClickTime = time.time()
        self.botWaypoints = {}
        self.graph = corridormap.build_graph(self.level.blockHeights, self.level.width, self.level.height)
        self.kdtree = scipy.spatial.cKDTree([self.graph.node[node]["position"] for node in self.graph.nodes()])

        self.lookup = [[None for y in range(self.level.height)] for x in range(self.level.width)]
        node_count = len(self.graph.nodes())
        for x, y in itertools.product(range(self.level.width), range(self.level.height)):
            closest = None
            for d, i in zip(*self.kdtree.query((x, y), 2, distance_upper_bound=8.0)):
                if i >= node_count:
                    continue
                if closest is None or d < closest:
                    self.lookup[x][y] = i
                    closest = d

        for node in self.graph.nodes():
            self.graph.node[node]["distances"] = nx.single_source_dijkstra_path_length(self.graph, node, weight="weight")
            self.graph.node[node]["explored"] = False
        self.initGraphVisualization()

        self.visualizer.hideLayer(layer)
Exemplo n.º 4
0
    def initialize(self):
        # Generate our corridor map, capturing useful information out of the map
        self.corridor_graph = corridormap.build_graph(self.level.blockHeights, self.level.width, self.level.height)

        # We use scipy to perform a nearest neighbour look-up.
        # This allows use to work out which node the bots are closest to.
        self.kdtree = scipy.spatial.cKDTree([self.corridor_graph.node[n]["position"]
                                             for n in self.corridor_graph.nodes()])

        # Using the nearest neighbour tree. For each grid block, which is 1m x 1m, what is the closest node.
        self.lookup = [[None for y in range(self.level.height)] for x in range(self.level.width)]
        node_count = len(self.corridor_graph.nodes())
        for x, y in itertools.product(range(self.level.width), range(self.level.height)):
            closest = None
            for d, i in zip(*self.kdtree.query((x, y), 2, distance_upper_bound=8.0)):
                if i >= node_count:
                    continue
                if closest is None or d < closest:
                    self.lookup[x][y] = i
                    closest = d

        self.terminal_nodes = []
        for node in self.corridor_graph.nodes():
            # If only one neighbor then it's a terminal node.
            if len(self.corridor_graph.neighbors(node)) == 1:
                self.terminal_nodes.append(node)


        # Initialise all nodes to not having been visited.
        self.explored = [False for x in range(len(self.corridor_graph.nodes()))]

        self.initialise = True
Exemplo n.º 5
0
    def initialize(self):
        layer = self.visualizer.anonymousLayer(True)
        self.visualizer.addLabel("Initializing...", "centered-info-box", Color(222, 222, 222, 255), None)
        self.visualizer.endLayer()

        self.graph = corridormap.build_graph(self.level.blockHeights, self.level.width, self.level.height)
        self.kdtree = scipy.spatial.cKDTree([self.graph.node[n]["position"] for n in self.graph.nodes()])
        self.botPath = {}
        self.botPathColors = {}
        self.mouseLeftClicked = False
        self.debug = 0
        for n in self.graph.nodes():
            self.graph.node[n]["explored"] = False
            self.graph.node[n]["cell_count"] = 0
            self.graph.node[n]["visible_count"] = 0
            self.graph.node[n]["seen_count"] = 0

        self.lookup = [ [None for y in range(self.level.height)] for x in range(self.level.width)]
        node_count = len(self.graph.nodes())
        for x, y in itertools.product(range(self.level.width), range(self.level.height)):
            closest = None
            for d, i in zip(*self.kdtree.query((x, y), 2, distance_upper_bound=8.0)):
                if i >= node_count:
                    continue
                if closest is None or d < closest:
                    self.lookup[x][y] = i

                    if self.level.blockHeights[x][y] == 0:
                        self.graph.node[i]["cell_count"] += 1

                    closest = d

        self.seen = [ [-1 for y in range(self.level.height)] for x in range(self.level.width)]
        self.seen_dirty = []
        self.visibility = [ [False for y in range(self.level.height)] for x in range(self.level.width)]
        self.visibility_previous = None

        self.initVisualization()

        self.exploreTasks = { bot : None for bot in self.game.team.members }
        #set the colors for the graph path
        for bot in self.game.team.members:
            if bot.name == "Blue0":
                self.botPathColors[bot] = Color(200, 100, 50)
            if bot.name == "Blue3":
                self.botPathColors[bot] = Color(80, 10, 180)
            if bot.name == "Blue2":
                self.botPathColors[bot] = Color(0, 0, 255)
            if bot.name == "Blue1":
                self.botPathColors[bot] = Color(0, 0, 0)

        self.visualizer.hideLayer(layer)
Exemplo n.º 6
0
    def initialize(self):

        self.graph = corridormap.build_graph(self.level.blockHeights, self.level.width, self.level.height)
        self.kdtree = scipy.spatial.cKDTree([self.graph.node[n]["position"] for n in self.graph.nodes()])

        self.lookup = [ [None for y in range(self.level.height)] for x in range(self.level.width)]
        node_count = len(self.graph.nodes())
        for x, y in itertools.product(range(self.level.width), range(self.level.height)):
            closest = None
            for d, i in zip(*self.kdtree.query((x, y), 2, distance_upper_bound=8.0)):
                if i >= node_count:
                    continue
                if closest is None or d < closest:
                    self.lookup[x][y] = i
                    closest = d

        for n in self.graph.nodes():
            self.graph.node[n]["explored"] = False
        self.initGraphVisualization()
Exemplo n.º 7
0
    def initialize(self):
        """
        Called at the start of the game. Any heavy computation should be carried out here to save time later on.
        Here we construct the corridor map.
        """
        # Set parameters for visualisation
        self.window = visualizer.VisualizerWindow(self)
        self.window.drawBots = True
        self.game_state_updated = True

        # Generate our corridor map, capturing useful information out of the map
        self.corridor_graph = corridormap.build_graph(self.level.blockHeights,
                                                      self.level.width,
                                                      self.level.height)

        # We use scipy to perform a nearest neighbour look-up.
        # This allows use to work out which node the bots are closest to.
        self.kdtree = scipy.spatial.cKDTree([
            self.corridor_graph.node[n]["position"]
            for n in self.corridor_graph.nodes()
        ])

        # Using the nearest neighbour tree. For each grid block, which is 1m x 1m, what is the closest node.
        self.lookup = [[None for y in range(self.level.height)]
                       for x in range(self.level.width)]
        node_count = len(self.corridor_graph.nodes())
        for x, y in itertools.product(range(self.level.width),
                                      range(self.level.height)):
            closest = None
            for d, i in zip(
                    *self.kdtree.query((x, y), 2, distance_upper_bound=8.0)):
                if i >= node_count:
                    continue
                if closest is None or d < closest:
                    self.lookup[x][y] = i
                    closest = d

        # Initialise all nodes to not having been visited.
        self.explored = [
            False for x in range(len(self.corridor_graph.nodes()))
        ]

        self.initialise = True
Exemplo n.º 8
0
 def __init__(self, level, clone=False):
     if clone:
         self.level = level
         self.verbose = False
     else:
         self.iterations = 0
         self.level = level
         self.verbose = False
         self.positions = []
         self.corridor_graph = corridormap.build_graph(
             level.blockHeights, level.width, level.height)
         self.kdtree = scipy.spatial.cKDTree([
             self.corridor_graph.node[n]["position"]
             for n in self.corridor_graph.nodes()
         ])
         self.lookup = [[None for y in range(level.height)]
                        for x in range(level.width)]
         node_count = len(self.corridor_graph.nodes())
         for x, y in itertools.product(range(level.width),
                                       range(level.height)):
             closest = None
             for d, i in zip(
                     *self.kdtree.query((x,
                                         y), 2, distance_upper_bound=8.0)):
                 if i >= node_count:
                     continue
                 if closest is None or d < closest:
                     self.lookup[x][y] = i
                     closest = d
         self.explored = [
             False for x in range(len(self.corridor_graph.nodes()))
         ]
         # Initialise the seen grids to false.
         self.seen = [[False for y in range(level.height)]
                      for x in range(level.width)]
         # Initialise the visibility to false.
         self.visibility = [[False for y in range(level.height)]
                            for x in range(level.width)]