import queue from os import path class Maze: def __init__(self): self.maze = [] self.moves = "" def loadMaze(self): maze_folder = path.dirname(__file__) with open(path.join(maze_folder, 'map.txt'), 'rt') as f: for line in f: self.maze.append(line) return self.maze def printMaze(self, maze, path=""): for x, pos in enumerate(maze[0]): if pos == "A": start = x i = start j = 0 pos = set() for move in path: if move == "L": i -= 1 elif move == "R": i += 1 elif move == "U": j -= 1 elif move == "D": j += 1 pos.add((j,i)) for j, row in enumerate(maze): for i, col in enumerate(row): if (j, i) in pos: print("+ ", end="") else: print(col + " ", end="") print() def valid(self, maze, moves): for x, pos in enumerate(maze[0]): if pos == "A": start = x i = start j = 0 for move in moves: if move == "L": i -= 1 elif move == "R": i += 1 elif move == "U": j -= 1 elif move == "D": j += 1 if not(0 <= i < len(maze[0]) and 0 <= j < len(maze)): return False elif (maze[j][i] == "#"): return False return True def findEnd(self, maze, moves): for x, pos in enumerate(maze[0]): if pos == "A": start = x i = start j = 0 for move in moves: if move == "L": i -= 1 elif move == "R": i += 1 elif move == "U": j -= 1 elif move == "D": j += 1 if maze[j][i] == "2": print("Found: " + moves) self.moves = moves self.printMaze(maze, moves) return True return False def run(self): nums = queue.Queue() nums.put("") add = "" self.loadMaze() while not self.findEnd(self.maze, add): add = nums.get() for j in ["L", "R", "U", "D"]: put = add + j if self.valid(self.maze, put): nums.put(put)