Example #1
0
    def generate(self, dim):
        maze = Maze(dim)

        x = randrange(dim)
        y = randrange(dim)
        logging.debug("Chose (%s, %s) as initial cell", x, y)

        explorablenodes =[(x, y)]
        maze.get(x, y).visited = True

        self.initbar(dim*dim)
        i = 0
        while len(explorablenodes) > 0:
            cursearch = explorablenodes[randrange(len(explorablenodes))]
            randdirs = Direction.randdirs()

            foundNext = False
            for dir in randdirs: # search for a new cell to explore
                candidate = maze.getbydir(cursearch[0], cursearch[1], dir)
                if candidate is not None and not candidate.visited:
                    maze.connect(cursearch[0], cursearch[1], dir)
                    candidate.visited = True
                    if maze.explorables(candidate.x, candidate.y) > 0:
                        explorablenodes.append((candidate.x, candidate.y))
                    foundNext = True
                    i += 1
                    self.updatebar(i)
                    break
            if not foundNext:
                explorablenodes.remove(cursearch)
        # set all cells as unvisited
        for x in range(dim):
            for y in range(dim):
                maze.get(x, y).visited = False
        self.finishbar()
        return maze