Exemplo n.º 1
0
class Strategy_HuntAndKill(IMazeGenerator):
    def __init__(self, width, height):
        self.__maze = Maze(width, height)

    def generate(self):
        current_cell = self.__maze.getRandomOrigin()
        self.__maze.markVisitedCell(current_cell)
        have_more_cells_to_hunt = True

        while have_more_cells_to_hunt:
            while self.__maze.hasUnvisitedNeightbours(current_cell) == True:
                unvisited_cell = self.__maze.getRandomUnvisitedNeightbour(current_cell)
                self.__maze.removeWallBettweCells(current_cell, unvisited_cell)
                current_cell = unvisited_cell
                self.__maze.markVisitedCell(current_cell)

            current_cell = self.huntForAvailableCell()

            if current_cell is None:
                have_more_cells_to_hunt = False

        self.__maze.addEntryAndExitPoints()

    def huntForAvailableCell(self):
        for cell in self.__maze.cells():
            if self.__maze.hasUnvisitedNeightbours(cell):
                print (cell.getX(), cell.getY())
                return cell

        return None


    def getRaw(self):
        return self.__maze.getRaw()

    def getJSON(self):
        return self.__maze.getJSON()

    def __str__(self):
        return 'Strategy_HuntAndKill'
class Strategy_RecursiveBacktracker(IMazeGenerator):
    def __init__(self, width, height):
        self.__maze = Maze(width, height)

    def generate(self):
        cell_stack = list()
        current_cell = self.__maze.getRandomOrigin()
        self.__maze.markVisitedCell(current_cell)

        while self.__maze.hasUnvisitedCells() == True:
            if self.__maze.hasUnvisitedNeightbours(current_cell) == True:
                unvisited_cell = self.__maze.getRandomUnvisitedNeightbour(current_cell)
                cell_stack.append(current_cell)
                self.__maze.removeWallBettweCells(current_cell, unvisited_cell)
                current_cell = unvisited_cell
                self.__maze.markVisitedCell(current_cell)
            elif len(cell_stack) > 0:
                current_cell = cell_stack.pop()
            else:
                current_cell = self.__maze.getRandomUnvisitedCellr()
                self.__maze.markVisitedCell(current_cell)

        self.__maze.addEntryAndExitPoints()

    def getRaw(self):
        return self.__maze.getRaw()

    def getJSON(self):
        return self.__maze.getJSON()

    def __str__(self):
        return 'Strategy_RecursiveBacktracker'