Advertisement
Guest User

Untitled

a guest
Oct 16th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.17 KB | None | 0 0
  1. from copy import deepcopy
  2.  
  3.  
  4. class MazeSolver:
  5.  
  6. def __init__(self):
  7. self._maze_rows = []
  8. self._maze_parameters = []
  9. self._start = None
  10. self._stop = None
  11. self._flipped_maze = []
  12. self._x = 0
  13. self._y = 0
  14. return
  15.  
  16. def __repr__(self):
  17. return 'Maze size: {0}, Maze start: {1}, Maze stop: {2}'.format(self._maze_parameters, self._start, self._stop)
  18.  
  19. def print_maze(self):
  20. for row in self._maze_rows:
  21. print(''.join(row))
  22. return
  23.  
  24. def populate_data(self, user_input):
  25. self._user_input = user_input
  26.  
  27. if self._user_input == '':
  28. self._user_input = 'maze'
  29. try:
  30. f = open(self._user_input)
  31.  
  32. except IOError as e:
  33. print(e)
  34. self._user_input = str(input("Please enter the maze file name:"))
  35.  
  36. with open(self._user_input, 'r') as f:
  37.  
  38. # Populate parameters, start and stop points
  39. line = f.readline()
  40. values = line.strip('\n').split()
  41. self._maze_parameters = (int(values[0]), int(values[1]))
  42.  
  43. line = f.readline()
  44. values = line.strip('\n').split()
  45. self._start = (int(values[0]), int(values[1]))
  46.  
  47. line = f.readline()
  48. values = line.strip('\n').split()
  49. self._stop = (int(values[0]), int(values[1]))
  50.  
  51. # Populate maze data
  52. for line in f:
  53. line.strip()
  54. self._maze_rows.append(list(line.strip('\n')))
  55.  
  56. return
  57.  
  58. def process_rows(self, rows):
  59. self._rows = rows
  60. self._processed_rows = deepcopy(self._rows)
  61.  
  62. for row in self._processed_rows:
  63. for i in range(len(row)):
  64. if (row[i] in "+|-"):
  65. row[i] = 1
  66. elif (row[i] == ' '):
  67. row[i] = 0
  68.  
  69. return self._processed_rows
  70.  
  71. def set_start_stop(self):
  72. self._flipped_maze = self.flip(self._processed_rows)
  73. for column in range(len(self._flipped_maze)):
  74. for row in range(len(self._flipped_maze[0])):
  75. if column == self._start[0] and row == self._start[1]:
  76. self._flipped_maze[row][column] = 8
  77. if column == self._stop[0] and row == self._stop[1]:
  78. self._flipped_maze[row][column] = 9
  79.  
  80. return self._flipped_maze
  81.  
  82. def flip(self, lst):
  83. flipped_lst = []
  84. for i in range(-1, -len(lst) - 1, -1):
  85. flipped_lst.append(lst[i])
  86. for lst in flipped_lst:
  87. lst.reverse()
  88.  
  89. return flipped_lst
  90.  
  91. def move(self, x, y):
  92. global FoundWayOut
  93.  
  94. width = len(self._processed_rows)
  95. height = len(self._processed_rows[0])
  96. if FoundWayOut:
  97. return
  98.  
  99. if (x < 0 or x > width - 1 or y < 0 or y > height - 1):
  100. print('Out of bounds');
  101. return
  102. if (self._processed_rows[x][y] == 9):
  103. FoundWayOut = True
  104. print('Got it!');
  105. return
  106. if (self._processed_rows[x][y] == 1):
  107. print('That is wall');
  108. return
  109. if (self._processed_rows[x][y] == 2):
  110. print('Was here before');
  111. return
  112. self._processed_rows[x][y] = 2
  113.  
  114. self.move(x + 1, y) # East
  115. self.move(x, y + 1) # South
  116. self.move(x - 1, y) # West
  117. self.move(x, y - 1) # North
  118.  
  119. def main(self):
  120. user_input = str(input("Please enter the maze file name:"))
  121. self.populate_data(user_input)
  122. processed_rows = self.process_rows(self._maze_rows)
  123. # print(self)
  124. self.set_start_stop()
  125. # for row in processed_rows:
  126. # print(row)
  127. # print()
  128. for row in reversed(self._flipped_maze):
  129. print(row)
  130. # for row in processed_rows:
  131. # print(row)
  132. # self.move(0,0)
  133. # if(FoundWayOut == True):
  134. # print("Solved!")
  135. # else:
  136. # print("Not solved")
  137.  
  138.  
  139. a = MazeSolver()
  140. a.main()
  141. # print(a)
  142. # a.print_maze()
  143. # num of rows * 2 + 1 ||||||
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement