64 lines
1.3 KiB
Python
64 lines
1.3 KiB
Python
|
|
from observer.observer import Observer
|
||
|
|
|
||
|
|
|
||
|
|
class ConsoleView(Observer):
|
||
|
|
|
||
|
|
def update(self, event):
|
||
|
|
|
||
|
|
event_type = event.get("type")
|
||
|
|
|
||
|
|
if event_type == "maze_loaded":
|
||
|
|
print("[VIEW] Maze loaded")
|
||
|
|
|
||
|
|
elif event_type == "search_started":
|
||
|
|
print("[VIEW] Search started")
|
||
|
|
|
||
|
|
elif event_type == "search_finished":
|
||
|
|
print("[VIEW] Search completed")
|
||
|
|
|
||
|
|
elif event_type == "path_found":
|
||
|
|
print(
|
||
|
|
f"[VIEW] Path length: "
|
||
|
|
f"{event.get('length')}"
|
||
|
|
)
|
||
|
|
|
||
|
|
def render(
|
||
|
|
self,
|
||
|
|
maze,
|
||
|
|
path=None
|
||
|
|
):
|
||
|
|
route_marks = set()
|
||
|
|
|
||
|
|
if path:
|
||
|
|
for cell in path:
|
||
|
|
route_marks.add(
|
||
|
|
cell.getPosition()
|
||
|
|
)
|
||
|
|
|
||
|
|
screen = []
|
||
|
|
|
||
|
|
for row in maze.cells:
|
||
|
|
|
||
|
|
visual_row = ""
|
||
|
|
|
||
|
|
for cell in row:
|
||
|
|
|
||
|
|
position = cell.getPosition()
|
||
|
|
|
||
|
|
if (
|
||
|
|
position in route_marks
|
||
|
|
and not cell.isStart
|
||
|
|
and not cell.isExit
|
||
|
|
):
|
||
|
|
visual_row += "*"
|
||
|
|
|
||
|
|
else:
|
||
|
|
visual_row += str(cell)
|
||
|
|
|
||
|
|
screen.append(
|
||
|
|
visual_row
|
||
|
|
)
|
||
|
|
|
||
|
|
print(
|
||
|
|
"\n".join(screen)
|
||
|
|
)
|