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