80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
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() |