from abc import ABC, abstractmethod import os from source.classes.cell import Cell class Event: def __init__(self, event, maze, player_position, path): self.event = event self.maze = maze self.player_position = player_position self.path = path class Observer(ABC): @abstractmethod def update(self, event: Event): pass class ConsoleView(Observer): def update(self, event: Event): if event.event == "path_found": print("Путь найден:") self.render( event.maze, event.player_position, event.path ) elif event.event == "move": self.render( event.maze, event.player_position, event.path ) elif event.event == "maze_loaded": print("Загружен лабиринт:") self.render( event.maze, event.player_position, event.path ) else: pass def render(self, maze, player_position, path): if path and isinstance(path[0], tuple): self.render_xy(maze=maze, player_position=player_position, path=path) return os.system('cls' if os.name == 'nt' else 'clear') path_xy = [cell.getXY() for cell in path] for line in maze.cells: for c in line: if c.getXY() == player_position: print('P', end='') elif c.getXY() in path_xy: print('*', end='') else: print(c.toStr(), end='') print() def render_xy(self, maze, player_position, path: list[tuple[int, int]]): os.system('cls' if os.name == 'nt' else 'clear') # path_xy = [cell.getXY() for cell in path] for line in maze.cells: for c in line: if c.getXY() == player_position: print('P', end='') elif c.getXY() in path: print('*', end='') else: print(c.toStr(), end='') print()