       Р О Б О Т Л А Н Д С К И Е  К О Н С Т Р У К Т О Р Ы

                                      А.А. Дуванов

                                      Под редакцией
                                      Ю.А. Первина

                                      (C) Роботландия, лето 1997

                                      Пособие   распространяется
                                      только в рамках  Роботлан-
                                      дских  Курсов  и  является
                                      объектом авторского права.

                Глава 2. Мудрый Крот

      Содержание

  1. Знакомство
  2. Игра
  3. Создание новых задач


   Петя, старший брат  Васи,  сегодня не присутствует в папиной
комнате. К  нему зашли приятели  по школе и они решили устроить
вечер воспоминаний. Однако, компьютер включен, и Вася полон ре-
шимости продолжить занятия.

   1. Знакомство
   Вася.  Прошлый  раз мы очень долго работали с  роботландским
Монитором. Мы  узнали про него очень много, но  у меня не оста-
лось времени поиграть в Мудрого Крота. А ведь кнопка с запуском
этой программы много раз была на нашем экране.
   Папа. Всему свое  время... Вот сегодня можно заняться и Муд-
рым Кротом. Давно ты не играл в него?
   Вася. Да, давно, мы же уезжали в гости к бабушке в Луховицы.
Но я не забыл, как решать его задачи.
   Папа. Давай проверим! Расскажи вкратце, кого называют Кротом
в этой программе, почему он мудрый и что представляют собой его
задачи.
   Вася. Мудрый Крот живет под землей, где он  прорыл себе мно-
гочисленные ходы, превратившие его жилище в настоящий лабиринт.
Крот очень  трудолюбив и запаслив.  А еще он любит порядок. Все
собранные им мешки с зерном лежат на складе  ровно и аккуратно.
Но вот  однажды, когда, вероятно,  Крот был в гостях у знакомой
жабы, злоумышленники утащили  мешки со склада и шутки ради раз-
бросали по  всему  лабиринту.  Что  делать? Приходится собирать
мешки снова. А лабиринт большой и запутанный, с узкими прохода-
ми, как тут не  быть мудрым? И еще беда: у Крота  радикулит. Он
не может тащить мешок, а способен только толкать  его перед со-
бой. К  тому же,  Крот - не слон: силенок  у него маловато, два
мешка ему не сдвинуть, а три - тем более.
   Наша задача -  помочь Кроту собрать  все мешки с  зерном  на
складе  (в  одной или нескольких комнатах лабиринта, где  место
для каждого мешка помечено точкой).
   Папа. Да, красивую  сказку ты придумал. На самом деле, мешки
собирает  не  Крот, а человек, управляя исполнителем на  экране
при помощи стрелок клавиатуры.
   Вася. Еще одна  неприятность может случиться с нашим Кротом:
загнав мешок в  угол, он делает свою задачу неразрешимой: такой
мешок навсегда останется в углу и на кротовый склад уже  не по-
падет - задачу приходится решать заново.
   Папа. Ну, не  совсем  заново, ведь можно воспользоваться от-
каткой.  Однако,  давай загрузим эту программу на экран  нашего
компьютера.
   Вася. С удовольствием! Перехожу в Мониторе на страницу "Муд-
рый Крот" и нажимаю там кнопку запуска:
┌──────────────────────────────────────────────────────────────┐
│ИГРА      Шагов: 0   Шагов с грузом: 0             Лабиринт 1 │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│                      ▒▒▒▒▒                                   │
│                      ▒   ▒                                   │
│                      ▒░  ▒                                   │
│                    ▒▒▒  ░▒▒▒                                 │
│                    ▒  ░  ░ ▒                                 │
│                  ▒▒▒ ▒ ▒▒▒ ▒     ▒▒▒▒▒▒                      │
│                  ▒   ▒ ▒▒▒ ▒▒▒▒▒▒▒  ■■▒                      │
│                  ▒ ░  ░             ■■▒                      │
│                  ▒▒▒▒▒ ▒▒▒▒ ▒#▒▒▒▒  ■■▒                      │
│                      ▒      ▒▒▒  ▒▒▒▒▒▒                      │
│                      ▒▒▒▒▒▒▒▒                                │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│Справка - F1  Выход - Ctrl+Break   Мудрый Крот (C) Роботландия│
└──────────────────────────────────────────────────────────────┘
Условные обозначения:
Стена лабиринта            - символ ▒
Мешок в лабиринте          - символ ░
Место для мешка на складе  - символ ■
Мешок на складе            - символ █
Мудрый Крот                - символ #

   Папа. Экран этой программы имеет две служебные полоски и ра-
бочее поле, на  котором изображен лабиринт с мешками, складом и
самим Кротом, ожидающим наших команд.
   Вася. В  нижней  полоске  написано,  как  вызывать подсказку
(клавиша F1) и  как  выходить из программы (аккорд Ctrl+Break).
Там же  расположено  название  программы  и  фирмы, которая эту
программу сделала.  Насколько  я  помню,  мышью  в Мудром Кроте
пользоваться нельзя.
   Папа. Верхняя полоска  -  тоже информационная. В ней показан
текущий режим работы (сейчас он установлен в положение "Игра"),
номер лабиринта (сейчас на экране лабиринт с номером  1) и таб-
ло, описывающее  перемещение  исполнителя:  в нем располагаются
счетчики шагов Крота по лабиринту. Крот не сделал еще ни одного
шага, поэтому счетчики показывают нули.

2. Игра

   Вася. Первый лабиринт  - очень простой, я запросто решаю эту
задачу. Нужно  только  догадаться, как правильно переместить на
склад первый мешок. Вот смотри:

                     ..........

                       ▒▒▒▒▒
                       ▒   ▒
                       ▒░  ▒
                     ▒▒▒  ░▒▒▒
                     ▒  ░░#  ▒
                   ▒▒▒ ▒ ▒▒▒ ▒     ▒▒▒▒▒▒
                   ▒   ▒ ▒▒▒ ▒▒▒▒▒▒▒  ■■▒
                   ▒ ░  ░             ■■▒
                   ▒▒▒▒▒ ▒▒▒▒ ▒ ▒▒▒▒  ■■▒
                       ▒      ▒▒▒  ▒▒▒▒▒▒
                       ▒▒▒▒▒▒▒▒

                       ▒▒▒▒▒
                       ▒   ▒
                       ▒░ ░▒
                     ▒▒▒  #▒▒▒
                     ▒  ░░   ▒
                   ▒▒▒ ▒ ▒▒▒ ▒     ▒▒▒▒▒▒
                   ▒   ▒ ▒▒▒ ▒▒▒▒▒▒▒  ■■▒
                   ▒ ░  ░             ■■▒
                   ▒▒▒▒▒ ▒▒▒▒ ▒ ▒▒▒▒  ■■▒
                       ▒      ▒▒▒  ▒▒▒▒▒▒
                       ▒▒▒▒▒▒▒▒

                     ..........

                       ▒▒▒▒▒
                       ▒   ▒
                       ▒░ ░▒
                     ▒▒▒   ▒▒▒
                     ▒   ░   ▒
                   ▒▒▒ ▒░▒▒▒ ▒     ▒▒▒▒▒▒
                   ▒   ▒ ▒▒▒ ▒▒▒▒▒▒▒  ■■▒
                   ▒ ░ #░             ■■▒
                   ▒▒▒▒▒ ▒▒▒▒ ▒ ▒▒▒▒  ■■▒
                       ▒      ▒▒▒  ▒▒▒▒▒▒
                       ▒▒▒▒▒▒▒▒

                     ..........

                       ▒▒▒▒▒
                       ▒   ▒
                       ▒░ ░▒
                     ▒▒▒   ▒▒▒
                     ▒   ░   ▒
                   ▒▒▒ ▒░▒▒▒ ▒     ▒▒▒▒▒▒
                   ▒   ▒ ▒▒▒ ▒▒▒▒▒▒▒  ■■▒
                   ▒ ░                #█▒
                   ▒▒▒▒▒ ▒▒▒▒ ▒ ▒▒▒▒  ■■▒
                       ▒      ▒▒▒  ▒▒▒▒▒▒
                       ▒▒▒▒▒▒▒▒


   Папа. Как правило, все лабиринты Крота содержат одну или две
ключевых позиции. Если их разгадать, то решить задачу становит-
ся совсем просто.
   Вася. Досадно, что иногда случайно задержишь палец на клави-
ше со стрелкой,  и  Крот попадает  в  "аварию" - решить  задачу
нельзя:

     ▒▒▒▒▒                                ▒▒▒▒▒
     ▒  ░▒                                ▒   ▒
     ▒░ #▒                                ▒░  ▒
   ▒▒▒   ▒▒▒                            ▒▒▒  ░▒▒▒
   ▒  ░░   ▒                            ▒  ░  ░ ▒
 ▒▒▒ ▒ ▒▒▒ ▒     ▒▒▒▒▒▒               ▒▒▒ ▒ ▒▒▒ ▒     ▒▒▒▒▒▒
 ▒   ▒ ▒▒▒ ▒▒▒▒▒▒▒  ■■▒               ▒   ▒ ▒▒▒ ▒▒▒▒▒▒▒  ■■▒
 ▒ ░  ░             ■■▒               ▒ ░░#              ■■▒
 ▒▒▒▒▒ ▒▒▒▒ ▒ ▒▒▒▒  ■■▒               ▒▒▒▒▒ ▒▒▒▒ ▒ ▒▒▒▒  ■■▒
     ▒      ▒▒▒  ▒▒▒▒▒▒                   ▒      ▒▒▒  ▒▒▒▒▒▒
     ▒▒▒▒▒▒▒▒                             ▒▒▒▒▒▒▒▒

  Самый   верхний   мешок  уже    Два мешка перед  Кротом  "нав-
  больше  нельзя  никуда пере-    сегда" останутся на своих мес-
  местить.                        тах, да  и остальные на  склад
                                  не попадут никогда.

   Папа. Так часто бывает у новичков, которые еще не совсем ос-
воились с  клавиатурой  компьютера.  Но  беды  никакой нет: как
только обнаружилось, что Крот сделал неверный  шаг, можно легко
вернуть его назад и, тем самым, исправить ошибку. Такой возврат
назад, в предыдущее состояние, называется откаткой. Откатка вы-
полняется аккордом из двух клавиш, расположенных  в разных мес-
тах клавиатуры. Одна из них - клавиша Ctrl слева внизу,  а дру-
гая - клавиша Bs. Если нажать аккорд Ctrl+Bs два раза,  то Крот
с мешком "откатится" (вернется назад) на два шага. Так его мож-
но  откатывать  несколько раз подряд. Если же захочется  начать
решение  сначала,  достаточно  всего  один  раз  нажать  аккорд
Ctrl+Delete.
   Очень важно запомнить, что откатка означает не один шаг Кро-
та задом наперед, а возврат в предыдущее состояние всей окружа-
ющей среды, в  которой живет Крот на экране компьютера, включая
положение мешков в  коридорах  и на складе, показания счетчиков
шагов и, конечно, положение Крота.
   Имея такую операцию, как откатка, программа предлагает и об-
ратную операцию -  накатку.  Ею пользуются тогда, когда откатка
"завела" Крота слишком далеко  назад  и нужно снова пройти впе-
ред. Откатка выполняется аккордом Ctrl+Break. Точно так же, как
и откатка, накатка может выполняться несколько раз подряд.
   Вася. Во многих программах Роботландии есть откатка и накат-
ка. И всегда она выполняется этими аккордами:

                  Откатка - Ctrl+Bs
                  Накатка - Ctrl+Enter

   Папа. Первую задачу Крота ты решил, но ведь сначала ты вклю-
чал  демонстрационный  режим и смотрел, как за  тебя  ее  решал
компьютер.
   Вася. Да, это правда! В справке, которая вызывается на экран
по клавише F1, написано, что демо-режим  включается для первого
лабиринта клавишей F2. Но зато я сам решил решил вторую задачу,
а для нее демо-режима нет.
   Папа. Это  уже кое-что! Хотя  скажу тебе по секрету, что де-
мо-режим в программе  предусмотрен для всех 27 включенных в нее
задач.
   Вася. Вот это да! А как его запускать. Клавиша F2  на других
лабиринтах не работает, я проверял.
   Папа. Демо-режим для всех лабиринтов, кроме первого, вызыва-
ется аккордом Ctrl+F2. Хитрые роботландцы специально не написа-
ли его в справке, чтобы  у  тебя не было соблазна включать  его
каждый раз перед своим решением.
   Вася. Нет, я  буду сам решать задачи. Подсматривать не инте-
ресно, если только уж совсем не будет получаться...
   Вот только одно неудобство:  сейчас  я бы стал решать третью
задачу, потому что две первых уже решены. Но  чтобы пройти тре-
тий лабиринт, снова  придется проходить первые два, ведь к сле-
дующей задаче  программа  переходит  только тогда, когда решена
предыдущая. Это очень неудобно. Придется писать жалобу в Робот-
ландию.
   Папа. Не торопись, а лучше нажми на клавишу Esc.
   Вася. Нажал... На экране появилось меню:
                         ┌────────────┐
                         │▒ Номер    ▒│
                         │  Игра      │
                         │  Редактор  │
                         │  Чтение    │
                         │  Запись    │
                         │  Каталог   │
                         └────────────┘
   Папа. Первая  позиция в этом меню - "Номер".  Она-то и пред-
назначена для выбора произвольного лабиринта.
   Вася. Да,  дорогие роботландцы, прошу меня извинить. Нажимаю
клавишу выполнения. На экран вывелось новое окошко:
                    ┌──────────────────────┐
                    │     Задайте номер    │
                    │       лабиринта      │
                    │         ┌─┐          │
                    │         ││  ┌─┬─┐   │
                    │         └─┘ ┌┘ │ │   │
                    │      1      │<─┘ │   │
                    │         ┌─┐ └────┘   │
                    │         ││          │
                    │         └─┘          │
                    └──────────────────────┘

   Папа. Теперь, пользуясь стрелками клавиатуры, ты можешь лег-
ко заменить первый лабиринт на третий.
   Вася. Нажимаю два  раза стрелку "вверх" на клавиатуре. В са-
мом деле, в окошке появилось число 3. Нажимаю на Enter  и снова
попадаю в меню Крота. Теперь, конечно, надо выбрать раздел "Иг-
ра":
┌──────────────────────────────────────────────────────────────┐
│ИГРА      Шагов: 0   Шагов с грузом: 0             Лабиринт 3 │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│                           ▒▒▒▒▒▒▒▒                           │
│                           ▒     #▒                           │
│                           ▒ ░▒░ ▒▒                           │
│                           ▒ ░  ░▒                            │
│                           ▒▒░ ░ ▒                            │
│                   ▒▒▒▒▒▒▒▒▒ ░ ▒ ▒▒▒                          │
│                   ▒■■■■  ▒▒ ░  ░  ▒                          │
│                   ▒▒■■■    ░  ░   ▒                          │
│                   ▒■■■■  ▒▒▒▒▒▒▒▒▒▒                          │
│                   ▒▒▒▒▒▒▒▒                                   │
│                                                              │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│Справка - F1  Выход - Ctrl+Break   Мудрый Крот (C) Роботландия│
└──────────────────────────────────────────────────────────────┘

3. Создание новых задач.

   Папа. Ты обратил внимание на другие разделы кротового меню?
   Вася. Да. Там есть раздел  "Редактор".  Значит  ли это, что,
включив его, я  смогу вызвать Микрон, Художник или, быть может,
Шарманщик?
   Папа. Конечно нет! Микрон редактирует текстовую  информацию,
Художник графическую,  Шарманщик  -  музыкальную.  У Крота есть
свой, кротовый редактор, и редактирует он лабиринты.
   Ты можешь вывести на экран любой из 27  лабиринтов Крота, но
заняться не игрой, а совершенствованием задачи. Ты можешь доба-
вить в лабиринт новые ходы, мешки, комнаты-склады, иными слова-
ми, ты сможешь заняться редактированием.
   Вася. А  смогу я поставить в  лабиринт еще одного  крота для
помощи первому?
   Папа. Нет, редактор тебе  это  не позволит. По правилам игры
Крот должен быть только один.
   Вася. Буду менять лабиринт с номером три - ведь он сейчас на
экране. Вызываю меню, выбираю раздел "Редактор"  и нажимаю кла-
вишу выполнения. На  экране появился курсор в виде стрелки, из-
менилась верхняя служебная полоска  и  появились "строительные"
кубики под лабиринтом:
┌──────────────────────────────────────────────────────────────┐
│РЕДАКТОР                                           Лабиринт 3 │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│                           ▒▒▒▒▒▒▒▒                           │
│                           ▒     #▒                           │
│                           ▒ ░▒░ ▒▒                           │
│                           ▒ ░  ░▒                            │
│                           ▒▒░ ░ ▒                            │
│                   ▒▒▒▒▒▒▒▒▒ ░ ▒ ▒▒▒                          │
│                   ▒■■■■  ▒▒ ░  ░  ▒                          │
│                   ▒▒■■■    ░  ░   ▒                          │
│                   ▒■■■■  ▒▒▒▒▒▒▒▒▒▒                          │
│                   ▒▒▒▒▒▒▒▒                                   │
│ ┌─┐                                                          │
│ │▒│■ ░ █ #                                                   │
│ └─┘                                                          │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│Справка - F1  Выход - Ctrl+Break   Мудрый Крот (C) Роботландия│
└──────────────────────────────────────────────────────────────┘

   Вася. Я полагаю, что "строительный" материал выбирается кур-
сором-стрелкой?
   Папа. Нет. Курсор-стрелка указывает то место в поле лабирин-
та, которое должно быть изменено.  А  меню  выбора кубика имеет
свой собственный  курсор  в виде контурного прямоугольника. Оба
курсора управляются  стрелками  клавиатуры,  но второй работает
только тогда, когда вместе со стрелками (- или -) нажата кла-
виша Shift.
   Вася. И как же редактировать лабиринт?
   Папа. Очень  просто.  Выбираешь в "строительном" меню нужный
кубик, указываешь место на экране и нажимаешь пробел.
   Вася. А если кубик поставлен неправильно и надо убрать его с
экрана?
   Папа. Нажимаешь еще раз пробел и поставленный кубик пропада-
ет. Для удаления  кубиков  можно также выбрать в "строительном"
меню последний "пустой" кирпич. И тогда курсор-стрелка вместе с
пробелом будут работать как ластик.
   Редактор лабиринтов  устроен очень просто и осваивается быс-
трее в деле, чем в пространных объяснениях. Начни  работу, и ты
увидишь, что  проблема не в технике  рисования, а в  том, чтобы
придумать такой лабиринт, в который было бы интересно играть.

   Очень скоро Петя понял, насколько папа был прав. Первый пос-
троенный им  лабиринт никуда не  годился, несмотря на то, что в
нем было много мешков. Перемещение их на склад было простым уп-
ражнением на работу со стрелками клавиатуры.

          ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
          ▒▒■     ▒      ▒
          ▒■■     ▒  ░   ▒
          ▒▒▒     ▒    ░ ▒
          ▒■■     ▒   ░  ▒
          ▒▒▒▒▒  ▒▒      ▒▒
          ▒■■■      ░  ░ #▒
          ▒▒▒▒     ░  ░   ▒
          ▒■■■   ▒▒▒      ▒
          ▒▒▒▒▒▒▒▒ ▒ ░░░░ ▒
                   ▒      ▒
                   ▒▒▒▒▒▒▒▒

   Следующий Васин лабиринт тоже оказался плох:  задача Крота в
нем была неразрешима:

          ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
          ▒▒■     ▒      ▒
          ▒■■     ▒  ░   ▒
          ▒■■     ▒    ░ ▒
          ▒■■     ▒▒▒ ░  ▒
          ▒▒▒▒▒  ▒▒▒░ ░ ▒▒▒
          ▒■■■      ░  ░ #▒
          ▒▒▒■     ░  ░   ▒▒▒▒▒▒▒
          ▒■■■   ▒▒▒            ▒
          ▒▒▒▒▒▒▒▒ ▒ ░  ░ ▒ ░░░ ▒
                   ▒      ▒     ▒
                   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒

   Наконец,  после  долгих усилий Вася гордо показал папе  свое
последнее творение:

                  ▒▒▒▒▒▒▒▒
             ▒▒▒▒▒▒      ▒
             ▒▒■▒■▒▒▒  ░ ▒
             ▒■■■■■■■ ░  ▒
             ▒ ■■■■▒▒░  ▒▒
             ▒▒■▒ ▒ ░ ░░ ▒
              ▒    ░  ░  ▒▒▒▒▒
              ▒  ▒▒▒       ░ ▒
              ▒▒▒▒ ▒ ░░░ ▒░░ ▒
                   ▒     ▒ # ▒
                   ▒▒▒▒▒▒▒▒▒▒▒

   Папа. Задача  получилась неплохая, молодец! Хотя, конечно, и
она не из самых сложных.
   Вася. Хотелось бы  сохранить ее для  Маши. Я помню,  в  меню
Крота есть разделы, относящиеся к работе с диском:

                         ┌────────────┐
                         │  Номер     │
                         │  Игра      │
                         │  Редактор  │
                         │  Чтение    │
                         │▒ Запись   ▒│
                         │  Каталог   │
                         └────────────┘

   Папа. Ты безусловно прав! Хорошую работу надо сохранять. На-
жимай на клавишу выполнения в позиции "Запись".
   Вася. Появилось поле для ввода  имени  файла.  Я назову свой
лабиринт "kuk":
                    ┌───────────────────────┐
                    │   Введите имя файла:  │
                    │                       │
                    │ kuk█                  │
                    └───────────────────────┘
   Папа. Все  лабиринты имеют расширение имени "lab". Программа
автоматически приклеит его  к  твоему "kuk"у. Поэтому твой файл
на диске получит имя "kuk.lab".
   Вася. Я не возражаю. Но вот только хотелось бы этот лабиринт
распечатать на бумаге и показать Маше Пушковой. Это возможно?
   Папа. Ты умеешь печатать обычные текстовые файлы?
   Вася. Да, конечно, но неприятность в том, что файл "kuk.lab"
не текстовый. Когда я посмотрел  его  в  Norton Commander'е, то
увидел мало понятную абракадабру.
   Папа. Лабиринты хранятся  на диске в кодированном виде. Но в
каталоге Мудрого Крота  на диске есть полезная утилита с именем
"labtotxt.exe". Она-то и позволяет переводить лабиринтные  коды
в текст-рисунок.
   Вася. А как с ней работать?
   Папа. Очень просто.  Нужно набрать в командной строке DOS ее
вызов с параметром - именем нужного лабиринта:
                      labtotxt.exe kuk.lab
   Преобразованный лабиринт запишется в текстовый файл kuk.txt,
который ты можешь распечатать или подсоединить к любому тексто-
вому файлу.
   Вася.  А  почему утилита  записывает  текст  именно  в  файл
kuk.txt?
   Папа. Она так устроена! Но ты можешь задать другое имя в ка-
честве второго параметра. Если ты запустишь команду
                 labtotxt.exe kuk.lab proba.doc
то  текстовый аналог  лабиринта  kuk.lab будет записан  в  файл
proba.doc.
   Вася. Понятно.  Свой  лабиринт  я получил, редактируя третий
лабиринт Мудрого Крота. Значит, теперь он безвозвратно утерян?
   Папа. Нет. Когда ты  снова  запустишь Крота, то увидишь, что
он на своем месте. А свой лабиринт ты можешь загружать  с диска
при  помощи  раздела меню "Чтение" или "Каталог" независимо  от
того, какой лабирит сейчас на  экране.  Твой  файл его временно
заменит, до следующего запуска Крота.
   Вася. А можно строить собственную задачу,  не редактируя го-
товые лабиринты Крота?
   Папа. Специального  "чистого" листа для построения новых ла-
биринтов в программе  нет. Но в редакторе всегда можно очистить
лабиринтное поле при помощи тройного аккорда Ctrl+Shift+Delete.
   Вася. Меня это устраивает.

   Задание - конкурс. Придумать и построить  новый лабиринт для
Мудрого Крота.
