2026-rff_mp/skorohodovsa/task_2/test/play.py

63 lines
1.7 KiB
Python
Raw Normal View History

2026-05-24 15:00:14 +00:00
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()
2026-05-25 07:23:00 +00:00
player = Player(start)
2026-05-24 15:00:14 +00:00
history = CommandHistory()
2026-05-25 07:23:00 +00:00
view = ConsoleView()
2026-05-24 15:00:14 +00:00
view.update(Event("maze_loaded", {"maze": maze}))
print("Управление: w/a/s/d — движение, z — отмена, q — выход\n")
while True:
key = input(">>> ").strip().lower()
2026-05-25 07:23:00 +00:00
if key == "q":
2026-05-24 15:00:14 +00:00
print("Выход.")
break
2026-05-25 07:23:00 +00:00
elif key == "z":
2026-05-24 15:00:14 +00:00
if history.undo():
print("Ход отменён.")
view.render(maze, player=player.cell)
2026-05-25 07:23:00 +00:00
elif key in ("w", "a", "s", "d"):
2026-05-24 15:00:14 +00:00
cmd = MoveCommand(player, key, maze)
if cmd.execute():
history.push(cmd)
2026-05-25 07:23:00 +00:00
view.update(
Event(
"move",
{
"maze": maze,
"player_cell": player.cell,
"direction": key,
},
)
)
2026-05-24 15:00:14 +00:00
if player.cell.is_exit:
print("Выход найден! Победа!")
break
else:
print("Туда нельзя — стена или граница.")
else:
2026-05-25 07:23:00 +00:00
print("Неизвестная команда. Используй: w/a/s/d, z, q")