2026-rff_mp/skorohodovsa/task_2/test/play.py
2026-05-25 10:23:00 +03:00

63 lines
1.7 KiB
Python

from source.build.builder import TextFileBuilder
from source.models.base import Maze
from source.view.observer import ConsoleView, Event
from source.view.command import Player, MoveCommand, CommandHistory
maze: Maze = TextFileBuilder().build_from_file("source/templates/10x10_path_v1.txt")
rows, cols = maze.shape
start = None
for y in range(rows):
for x in range(cols):
if maze[y, x].is_start:
start = maze[y, x]
break
if start is None:
print("Стартовая клетка не найдена!")
exit()
player = Player(start)
history = CommandHistory()
view = ConsoleView()
view.update(Event("maze_loaded", {"maze": maze}))
print("Управление: w/a/s/d — движение, z — отмена, q — выход\n")
while True:
key = input(">>> ").strip().lower()
if key == "q":
print("Выход.")
break
elif key == "z":
if history.undo():
print("Ход отменён.")
view.render(maze, player=player.cell)
elif key in ("w", "a", "s", "d"):
cmd = MoveCommand(player, key, maze)
if cmd.execute():
history.push(cmd)
view.update(
Event(
"move",
{
"maze": maze,
"player_cell": player.cell,
"direction": key,
},
)
)
if player.cell.is_exit:
print("Выход найден! Победа!")
break
else:
print("Туда нельзя — стена или граница.")
else:
print("Неизвестная команда. Используй: w/a/s/d, z, q")