Это продолжение вопроса « Распечатать лабиринт» . Если вам нравится этот вопрос, пожалуйста, добавьте больше алгоритмов генерации лабиринтов;).
Для этого задания вам нужно будет внедрить игровой движок для одного игрока, который должен найти клад в лабиринте и выбраться из темницы.
Движок запускается с чтения лабиринта из стандартного ввода, за которым следует строка, содержащая файл, заданный в качестве аргумента в командной строке. Далее игрок .
(точка)@
размещается в случайном месте на карте. Затем движок начинает взаимодействовать с игроком через стандартный io:
Команды от двигателя к игроку :
continue
: Игра не закончена. Окружение напечатано, а затем.
. Игрок представлен@
персонажем. Ненаблюдаемые клетки представлены?
.finished
: Игра окончена. Количество шагов печатается и игра останавливается.
Команды от игрока к двигателю :
north
: Перемещает игрока вверх.south
: Перемещает игрока вниз.west
: Переместить игрока влево.east
: Переместить игрока вправо.
Любая неверная команда (например, удар по стене) от игрока игнорируется, но все равно считается. Вы можете сами определять обстановку по своему вкусу.
- Очки за самый короткий код.
- Точки для сложной среды (например, печать больших областей и замена ячеек, которые не видны
?
). - Нет баллов за код, который не соответствует формату io
Пример :
В этом примере окружение определяется как ячейка 3х3 с игроком посередине.
$ cat maze
+-+-+
|#|
| |
+---+
$ python engine.py maze
|#
@
---
.
east
|#|
@|
--+
.
north
+-+
|@|
|
.
south
|#|
@|
--+
.
west
|#
@
---
.
west
|
|@
+--
.
north
+-+
@|
|
.
west
finished
7
Ответы:
C99, 771 символ
Требует и использует ncurses. Только одна макрокоманда для длины, и макросы N и M должны заменить отсутствующие минимальные и максимальные операторы, и я не думаю, что здесь можно сделать гораздо больше.
Это предполагает , что входной лабиринт не превышает 80 символов в ширину, и что лабиринты имя файла уже было передано в командной строке, и что число параметров достаточно низко , что начальное значение с не команда движения.
Отходит от стандарта тем, что он принимает команды направления из одного символа в качестве строчной первой буквы из предложенных.
Показывает неизвестные регионы как '?' S.
Более читабельно с комментариями:
источник