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

                                      А.А. Дуванов

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

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

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

                    Глава 6. Раскрашка

     Содержание

1. Первое знакомство с Раскрашкой
2. Как создается рисунок
3. Точка
4. Надписи
5. Штампы
6. Копирование
7. Откатка
8. Точные перемещения
9. Сохранение картинок
10. Тайна второй страницы
11. Редактирование программы
    11.1 Выполнение команд
    11.2 Изменение размеров
    11.3 Перемещение шаблонов
    11.4 Размножение и удаление шаблонов
    11.5 Буфер шаблонов
12. Задачи и упражнения

1. Первое знакомство с Раскрашкой

   На Васином  столе  рабочий беспорядок. Среди полосок цветной
бумаги, фломастеров, старых журналов  и  фотографий угадывается
плод Васиных трудов - белый лист бумаги, на котором Вася монти-
рует большую праздничную  открытку,  подарок маме на день рожде-
ния.
   Вася, действительно, занят монтажом. Он вырезает из журналов
веселых человечков и наклеивает  их  на свой лист. Самый добрый
персонаж расположен в центре.  Вася  наклеил на него мамину фо-
тографию. Полоски цветной бумаги дополняют композицию открытки.
Поздравительный текст Вася составил из вырезанных букв и только
линии, соединяющие  отдельные фигурки в веселый хоровод, подри-
совал цветными фломастерами.
   Закончив  работу,  Вася пошел в папину комнату на  очередное
заседание "компьютерного клуба". Он показал свое творение и ус-
лышал заслуженное одобрение папы и брата.

   Петя.  Очень  красивая открытка! В магазине такую не  купишь,
думаю, мама будет довольна!
   Папа. Да, мама будет очень рада. Вася молодец  и большой вы-
думщик! Интересно еще  и то, что  твоя работа очень  похожа  на
картины Раскрашки.
   Вася. Раскрашка  это еще один графический редактор Роботлан-
дии?
   Папа. Раскрашка,  конечно, редактор, но необычный. В отличие
от редактора Художник, картинки в этой программе не столько ри-
суют, сколько собирают  из готовых элементов. Почти так же, как
на твоей открытке для мамы.  Поэтому  Раскрашку  можно  назвать
конструктором.
   Вася. Так давайте сегодня поработаем с этой программой!
   Папа. Это как раз входило в мои и Петины планы.
   Петя. Сначала давайте посмотрим, как  Раскрашка представлена
на экране Монитора:
┌──────────────────────────────────────────────────────────────┐
│┌────┐┌────┐┌────┐                      ┌────┐┌────┐┌────────┐│
││ С  ││ Р  ││ i  │   Р А С К Р А Ш К А  │  П ││ +  ││18:20:25││
│└────┘└────┘└────┘                      └────┘└────┘└────────┘│
├──────────────────────────────────────────────────────────────┤
│   ┌────┐                  ┌────┐                ┌────┐       │
│   │░░░░│                  │░░░░│                │░░░░│       │
│   └────┘                  └────┘                └────┘       │
│  Раскрашка              Описание               Изменения     │
│                                                              │
│                                                              │
│                                                              │
│                                                              │
│                                                              │
│                                                              │
└──────────────────────────────────────────────────────────────┘
   Вася. Страница Раскрашки выглядит довольно скромно...
   Петя. Конструктор вызывается при помощи первой кнопки, а две
других показывают на экране текстовые файлы, один - с техничес-
ким описанием продукта,  а другой - с описанием отличий послед-
ней версии программы от предшествующих.
   Папа. Нет сомнений  в том, что ты уже основательно проштуди-
ровал эти тексты.
   Петя. Должен кто-то делать всю черновую работу...
   Вася. Уверен, что Петя прячет в кармане дерево.
   Петя. Что бы вы без меня  делали?  Каталог  Раскрашки  очень
простой:

C:\
└─ KURSROB       - Каталог пакета "Конструктор"
   └─ KURS
      └─ 1
         └─ KP            - Каталог Раскрашки
            │
            ├─ DOC        - Каталог документации
            ├─ kp.exe     - Раскрашка
          ┌─┼────────────┐
          │ ├─ guitar.kp │
          │ ├─ home.kp   │
          │ ├─ konstr.kp │- картинки
          │ ├─ portret.kp│
          │ └─ sea.kp    │
          └──────────────┘

   В  подкаталоге  DOC  расположена  техническая  документация,
kp.exe - это сама программа, а файлы с расширением kp - картин-
ки, сконструированные в Раскрашке.
   Вася. Раскрашка имеет свой особый формат графических файлов?
   Петя. Да и об этом, думаю, мы поговорим  позже. Но Раскрашка
позволяет записывать картинки на диск  также  в  форматах PIC и
PCX. Но загружать с диска он может картинки только в своем фор-
мате KP.
   Папа. Думаю, пора познакомиться с экраном  этой программы.
   Вася. Немедленно нажимаю кнопку "Раскрашка" в Мониторе.

      Главное                        Координаты  Имя картинки
    меню Раскрашки                    курсора    на диске
 ┌────────┴───────────┐                ┌────┐  ┌──────────────┐
┌───┬───┬───┬───┬───┬───┬─────────────┬───┬───┬────────────────┐
│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ РАСКРАШКА   │▒▒▒│▒▒▒│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
├───┼───┴───┴───┴───┴───┴─────────────┴───┴───┴────────────────┤
│▒▒▒│Прямоугольник ─┐                                          │
├───┤               │                                          │
│▒▒▒│Овал           ├── Инструменты                            │
├───┤               │                                          │
│▒▒▒│Треугольник    │                                          │
├───┤               │                                          │
│▒▒▒│Треугольник    │                                          │
├───┤               │                                          │
│▒▒▒│Треугольник    │                                          │
├───┤               │                                          │
│▒▒▒│Треугольник    │                                          │
├───┤               │              Поле для рисунка            │
│▒▒▒│Точка          │                                          │
├───┤               │             (605x298 точек)              │
│▒▒▒│Символ         │                                          │
├───┤               │                                          │
│▒▒▒│Штамп          │                                          │
├───┤               │                                          │
│▒▒▒│Копирование   ─┘                                          │
├───┤                                                          │
│▒▒▒├── Шаблон выбранного цвета (текущий цвет)                 │
│   │                                                          │
│┌┬┐│                                                          │
│├┼┤│                                                          │
│├┼┤│── Цветовая палитра (16 цветов)                           │
│├┼┤│                                                          │
│├┼┤│                                                          │
│├┼┤│ Разновидности инструментов      Информационное табло     │
│├┼┤│ ┌──────────────────────┐       ┌────────────────────────┐│
│├┼┤├──┬──┬──┬──┬──┬──┬──┬──┬──┬────┬──┬──┬──┬──┬──┬──┬──┬──┬──┤
│└┴┘│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│    │▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│
└───┴──┴──┴──┴──┴──┴──┴──┴──┴──┴────┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
   Папа. Раскрашка имеет три служебных полоски:  снизу, слева и
сверху, остальная часть экрана доступна для создания рисунка.
   Петя.  Если  быть точным,  то  поле  рисунка  имеет  размеры
605x298 пикселов.
   Папа. Верхняя  служебная полоска содержит главное меню, таб-
ло, на котором высвечиваются координаты курсора  и дисковое имя
картинки.
   Вася. А как вычисляются координаты курсора?
   Папа. Координаты показывают удаленность курсора от  верхнего
левого угла поля  рисунка.
   Главное меню содержит такие кнопки:
   - кнопка перехода  на вторую страницу Раскрашки (разговор об
     этой странице особый),
   - кнопка для показа информации о разработчиках,
   - кнопка для вызова меню работы с диском,
   - кнопка печати картинок на принтере,
   - кнопка для показа справки,
   - кнопка-выход из программы.

   Левая служебная  полоска содержит панель с пиктограммами ин-
струментов и  цветовой палитрой. Многие инструменты в Раскрашке
имеют разные варианты своего представления на экране. Например,
прямоугольник может  быть  контурным  или "заклеенный" красными
кирпичными  "обоями".  Различные варианты одного и того же  ин-
струмента называют разновидностями. В нижней служебной  полоске
отображена панель с пиктограммами разновидностей инструментов и
табло для  показа  информации  о последнем построенном элементе
рисунка.
   Вася. Так как же рисовать в Раскрашке?

2. Как создается рисунок

   Папа. Рисунок в Раскрашке "монтируется" из отдельных элемен-
тов -  шаблонов,  имеющих разную форму. Основными строительными
"кирпичиками" служат треугольники, прямоугольники и овалы.
   Петя. Я могу предложить такой алгоритм построения:
   1) выбрать подходящий шаблон среди инструментов Раскрашки;
   2) выбрать цвет в палитре;
   3) выбрать разновидность инструмента;
   4) установить нужный размер шаблона;
   5) выбрать место для шаблона на поле рисунка;
   6) оставить "след" шаблона на экране.
   Вася. Ты объяснил ЧТО надо делать, но не сказал КАК!
   Петя. Верно! Давай что-нибудь нарисуем, а  объяснения я буду
давать по ходу дела.
   Вася. Проверю твой алгоритм, построив домик.  Сначала я дол-
жен выбрать среди инструментов прямоугольник для построения фа-
сада здания.
   Петя. Этот инструмент уже отмечен подсветкой, поэтому можешь
переходить к следующему пункту алгоритма.
   Вася. Я должен выбрать цвет в палитре. Пусть  стена у домика
будет окрашена в красный цвет.
   Петя. Нужно щелкнуть мышкой по красному  квадратику в палит-
ре. Выбранный  цвет  отображается внутри расположенного над па-
литрой прямоугольника и называется текущим цветом.
   Вася. Готово!  Теперь я должен выбрать разновидность инстру-
мента.
   Петя. У прямоугольника  (а также у овала и треугольника) де-
вять разновидностей, они показаны в нижней служебной строке:
   ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐
   │1 ││2 ││3 ││4 ││5 ││6 ││7 ││8 ││9 │
   └──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘

   1 - незаполненный контур текущего цвета (внутренность конту-
ра прозрачна и не затирает рисунок);
   2 - фигура, которая залита текущим цветом;
   3 - контур текущего цвета с белой заливкой внутренней облас-
ти (независимо от цвета фона);
   4 - фигура, залитая "миксером"  (так  называют  в  Раскрашке
равномерное смешение черного и текущего цвета);
   5 - фигура, которая залита "плетенкой";
   6 - фигура с заливкой "луг";
   7 - фигура, имеющая заливку "кирпичной кладки";
   8 - фигура, которая имеет заливку "черепица";
   9 - фигура с заливкой "вода".

   Вася. Для стены домика мне подойдет разновидность, названная
"кирпичная кладка", щелчком мыши отмечаю ее в меню разновиднос-
тей.
   Когда курсор находится не в  служебных  полосках,  а на поле
рисунка, он выглядит как прямоугольник.
   Петя. Курсор имеет форму того инструмента, который ты выбрал
в меню. Теперь ты должен изменить его размер.
   Вася. А как это сделать?
   Петя. Нужно нажать правую кнопку мыши и, не отпуская ее, во-
дить мышкой по коврику.
   Вася. Прямоугольник не перемещается по экрану,  зато он сжи-
мается и растягивается.
   Петя. Когда  ты  подберешь подходящий размер, отпусти кнопку
мыши, и курсор получит свободу перемещения по экрану, оставаясь
таким, каким ты его установил.
   Вася. Следующий  пункт твоего алгоритма выполнить очень лег-
ко: я устанавливаю курсор-прямоугольник в центре экрана. Теперь
остается только  оставить  "след".  Думаю,  нужно  нажать левую
кнопку мыши?
   Петя. Верно!
   Вася. Под курсором появился прямоугольник, заполненный крас-
ными кирпичиками. Это то, что мне надо!
                   ┌┬──┬──┬──┬──┬──┬──┬──┬┐
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   ├┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬┤
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   ├┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬┤
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   └──┴──┴──┴──┴──┴──┴──┴─┘
   Теперь приступаю к построению крыши.  Ее  можно  сделать  из
двух треугольников, залитых коричневой "черепицей".
   Отмечаю в  меню  инструментов  первый треугольник. Выбираю в
палитре  коричневый  цвет,  устанавливаю нужную разновидность  и
подбираю подходящий размер. Готово!

                             /|
                           /░░|
                         /░░░░|
                       /░░░░░░|
                     /░░░░░░░░|
                   /░░░░░░░░░░|
                   ┌┬──┬──┬──┬──┬──┬──┬──┬┐
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   ├┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬┤
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   ├┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬┤
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   └──┴──┴──┴──┴──┴──┴──┴─┘

   Второй треугольник  устанавливаю  рядом  с  первым и получаю
симпатичный домик:
                             /|\
                           /░░|░░\
                         /░░░░|░░░░\
                       /░░░░░░|░░░░░░\
                     /░░░░░░░░|░░░░░░░░\
                   /░░░░░░░░░░|░░░░░░░░░░\
                   ┌┬──┬──┬──┬──┬──┬──┬──┬┐
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   ├┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬┤
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   ├┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬┤
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   └──┴──┴──┴──┴──┴──┴──┴─┘

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

                             /|\
                           /░░|░░\
                         /░░░░|░░░░\
                       /░░░░░░|░░░░░░\
                     /░░░░░░░░|░░░░░░░░\
                   /░░░░░░░░░░|░░░░░░░░░░\
                   ┌┬──┬──┬──┬──┬──┬──┬──┬┐
                   ├┴─┬┴─┬┴┌──────┐┴─┬┴─┬┴┤
                   ├┬─┴┬─┴┬┤▒▒▒▒▒▒├┬─┴┬─┴┬┤
                   ├┴─┬┴─┬┴│▒▒▒▒▒▒├┴─┬┴─┬┴┤
                   ├┬─┴┬─┴┬└──────┘┬─┴┬─┴┬┤
                   ├┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴┤
                   └──┴──┴──┴──┴──┴──┴──┴─┘

   Петя. Все построения  в  Раскрашке можно выполнять не только
при помощи мышки, но и при помощи клавиатуры, при этом  надо не
забывать традиционное роботландское  правило: перемещение мышки
по коврику могут заменить стрелки клавиатуры,  а мышиные кнопки
- клавиша выполнения (Enter) и клавиша перехода (Esc).

3. Точка
   Вася.  В  меню  инструментов ниже треугольников  расположена
пиктограмма с изображением точки.
   Петя. Этот  инструмент  полезен  для расположения на рисунке
очень мелких деталей или отрезков прямых линий.
   Вася. Но ведь из точек можно нарисовать любую фигуру?
   Папа. Это верно, хотя далеко не всегда рационально и удобно.
Можно из точек построить, например,  овал,  но  это непросто, а
вот подрисовать на портрете веснушки можно только точками, овал
оставляет слишком "крупные" следы.
   Петя. Хочу заметить, что инструмент Точка не имеет разновид-
ностей.
   Вася. Это понятно, ведь одну точку нельзя залить ни "кирпич-
ной кладкой", ни "черепицей". Точка не имеет контура, у нее нет
"внутренности", она может иметь только цвет.

4. Надписи
   Вася. Если я захочу подписать свой рисунок, мне придется ри-
совать буквы при помощи прямоугольников, треугольников,  овалов
и точек?
   Петя. Можно сделать и так, но среди инструментов есть специ-
альный инструмент  для  выполнения надписей. Он называется Сим-
вол.  Его  пиктограмма (на ней изображена буква А)  расположена
сразу за точкой в меню инструментов.
   Вася. Отмечаю этот инструмент.  Меню  разновидностей приняло
вид:
                                         ┌─┐
    ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐││
    │ А │ Б │ В │ Г │ Д │ Е │ Ж │ З │ И │├─┤
    └───┴───┴───┴───┴───┴───┴───┴───┴───┘││
                                         └─┘
   Петя. Теперь можно выбрать любую букву из списка и перенести
ее на экран.
   Вася. Я не смогу написать свое имя. Не хватает двух букв "с"
и "я".
   Петя. Все разновидности инструмента не поместились в служеб-
ной полоске, но список символов можно  прокручивать, нажимая на
экране кнопки со стрелками. Кроме  букв  русского  алфавита  ты
увидишь латинские буквы, цифры и специальные  знаки, такие, как
точка, запятая и некоторые другие.
   Вася. Понятно, а цвет символов выбирается, как обычно, в па-
литре?
   Петя. Обрати внимание: сейчас указатель текущего цвета в па-
литре - коричневый. Измени цвет на синий, и надписи будут сини-
ми.
   Вася. Синими станут символы, уже размещенные на экране?
   Петя. Нет,  цвет  уже установленных шаблонов меняется другим
способом. Синими будут те буквы, которые ты оставляешь на экра-
не при выбранном синем цвете.

5. Штампы
   Папа. Среди  инструментов  Раскрашки  есть такой инструмент,
который называется Штамп.
   Вася.  Это,  наверно, потому, что его пиктограмма похожа  на
печать, которой штампуют на бумаге разные слова или картинки.
   Петя. Лучше  сказать наоборот: пиктограмма нарисована в виде
печати потому,  что  инструмент  работает  очень похоже, только
штампует не на бумаге, а на экране компьютера.
   Папа. Можно сказать,  что Штамп работает так же, как инстру-
мент Символ с одним только отличием: цвет рисунка штампа нельзя
изменить.
   Вася. Я не смогу выбрать в палитре другой цвет?
   Папа. Сможешь, но это никак не повлияет на цвет Штампа.
   Петя. У Штампа, как и у Символа, очень много разновидностей.
Среди его рисунков,  например, есть глаза, уши, носы, губы. Они
очень полезны при конструировании портретов.
   Вася. Однажды я смотрел фильм, в  котором следователь вместе
со свидетелями  преступления создавали портрет бандита из набо-
ров готовых элементов.
   Папа. Такой портрет называется фотороботом.
   Вася. Я думаю, что фоторобот можно сделать и в Раскрашке.
   Папа. Набор штампов у нее не слишком богат, но сделать фото-
робот Маши Пушковой, я думаю, мы без труда сможем.

   У экрана  компьютера  закипела  работа. Сначала был подобран
подходящий овал для лица. Затем выбраны глаза, наиболее похожие
на  Машины,  потом нос, губы. Используя закрашенные овалы, Вася
нарисовал кудрявую  Машину  прическу, а Петя подрисовал бантик,
составленный из  четырех  треугольников и одного кружочка. Пор-
трет получился на удивление похожим.


6. Копирование
   Вася. Мы еще не использовали последний  инструмент из набора
Раскрашки. На его пиктограмме изображен грузовичок, перевозящий
тяжелый груз.
   Петя. Этот инструмент называется Копирование. А  "перевозит"
грузовичок с места на место копии фрагментов экрана.
   Вася. Что ты называешь фрагментом?
   Петя. Фрагментом называется любой прямоугольный участок  ри-
сунка. С  помощью  копирования  можно, например, посадить целую
рощу, имея только одно дерево:

                               /^\
                             /_____\
                               / \
                             /     \
                           /_________\
                                ▒
                                ▒

   Вася. Очень полезный инструмент! А как им пользоваться?
   Петя. Вот подробный алгоритм с комментариями и замечаниями:

   1) Выбрать инструмент  Копирование. Курсор  на поле рисунка
примет форму пунктирного прямоугольника.
   2) Отметить нужный  фрагмент.  Положение  и размер фрагмента
определяет положение и размер курсора, отметка выполняется щел-
чком левой кнопки мыши. После  отметки  контура  курсор из пун-
ктирного становится непрерывным. Это изменение служит  сигналом
о произошедшем событии: Раскрашка  "запомнила"  положение фраг-
мента и теперь способна воспроизвести его в других местах экра-
на.
                          ┌───────────┐
                          │    /^\    │
                          │  /_____\  │
                          │    / \    │
                          │  /     \  │
                          │/_________\│
                          │     ▒     │
                          │     ▒     │
                          └───────────┘
   3) Рисовать копии.  Теперь можно перемещать курсор по экрану
и при  помощи левой кнопки мыши  оставлять в разных  его местах
копии отмеченного фрагмента.
                                         ┌───────────┐
    /^\           /^\          /^\       │           │
  /_____\       /_____\      /_____\     │           │
    / \           / \          / \       │           │
  /     \       /     \      /     \     │           │
/_________\   /_________\  /_________\   │           │
     ▒             ▒            ▒        │           │
     ▒             ▒            ▒        │           │
                                         └───────────┘
     │             │            │             │
   Это           Это           Это       Это курсор. Здесь можно
  копия         копия        оригинал    сделать еще одну копию,
                                         нажав левую кнопку  мы-
                                         ши.

   Замечание. Раскрашка запоминает не изображение, а его распо-
ложение на экране. Поэтому, если одна из копий перекроет ориги-
нал, то  последующие будут воспроизводить участок экрана, кото-
рый в этот  момент находится на месте выделенного фрагмента, то
есть в новые копии войдет "кусочек" перекрытия.

   Вася. А если фрагмент отмечен неудачно, то как от него отка-
заться?
   Петя. Отказ выполняется при помощи правой  кнопки мыши. Кур-
сор снова  принимает  форму  пунктирного прямоугольника и можно
отметить фрагмент заново. Но  если  ты успел поставить на экран
копии неправильного фрагмента, то поможет только откатка.

7. Откатка

   Вася. Откатка в Раскрашке выполняется как в Микроне?
   Петя. Раскрашка имеет несколько разновидностей откаток и на-
каток, в том числе и таких, как в Микроне. Вот  полный справоч-
ник по этим операциям конструктора:

            Откатка на один шаг  - Ctrl+Bs
            Накатка на один шаг  - Ctrl+Enter
            Откатка на 100 шагов - Ctrl+Shift+Bs
            Накатка на 100 шагов - Ctrl+Shift+Enter
            Откатка до "упора"   - Ctrl+Shift+Del
            Накатка до "упора"   - Ctrl+Shift+Ins

   Под "шагом" в Раскрашке понимается одно рисующее действие на
экране, откатка убирает с экрана его  результат,  а  накатка  -
восстанавливает. Когда рисунок состоит из большого числа шабло-
нов, может  пригодиться откатка не на один, а  сразу на сто ша-
гов. Откатка "до упора", возвращает пользователя к самому нача-
лу рисования -  пустому экрану. Теперь он может начать рисовать
заново или, выполняя накатку,  просматривать  построение своего
рисунка как кадры мультфильма.  "Упор"  у накатки - самый конец
рисования: восстанавливаются все нарисованные ранее шаблоны.

   Папа. Чтобы Вася  не подумал, что только Петя может рисовать
сложные схемы,  привожу  рисунок, поясняющий механизм откатки и
накатки.


           Цепочка экранных построений
         ┌────────────────────────────────────────┐
"Упор"  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐"Упор"
откатки │  ├─│  ├─│  ├─│  ├─│  ├─│  ├─│  ├─│  ├─│  │накатки
        └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘
         │                   ││   │               │
         └───────────────────┘│   └───────────────┘
          Шаблоны, видимые    │    Эти шаблоны на экране не
          на экране                видны
                            Текущее
                            положение
                            откатки

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

                         Нарисован новый шаблон
                         после откатки на четыре шага
                                \
                                 ┌──┐Новый "упор"
                              ┌──┤  │накатки
                              │  └──┘
                              │ ┌────────────────────┐
"Упор"  ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌─┴┐│┌──┐ ┌──┐ ┌──┐ ┌──┐ │
откатки │  ├─│  ├─│  ├─│  ├─│  ├┼┤  ├─│  ├─│  ├─│  │ │
        └──┘ └──┘ └──┘ └──┘ └──┘│└──┘ └──┘ └──┘ └──┘ │
                              │ └────────────────────┘
                              │    Эти шаблоны пропали
                              │    безвозвратно
                              │
                            Положение
                            откатки перед
                            рисованием нового шаблона


8. Точные перемещения

   Вася. Не так-то просто, управляя курсором, поставить шаблоны
на одной прямой линии.

                    ┌───┐
          ┌───┐     │   │     ┌───┐            ┌───┐
          │   │     └───┘     │   │   ┌───┐    │   │
          └───┘               └───┘   │   │    └───┘
                                      └───┘
   Петя. Выполнить  точные перемещения в Раскрашке помогают три
приема:
        - использование координат;
        - использования "прицела";
        - перемещение курсора при помощи клавиатуры.

   Вася. Последняя рекомендация понятна. Стрелки клавиатуры пе-
ремещают курсор ровно  на одну экранную точку. Ими удобно поль-
зоваться для небольших сдвигов, в то время как  мышь удобна для
дальних "путешествий" курсора  по экрану.
   А что за прицел имеет Раскрашка?

   Петя. Прицел - это пунктирное  перекрестье.  Если  курсор  -
прямоугольник, то прицел "привязывается" к верхнему левому углу
этого прямоугольника:

                    |
                    |
          ----------┌───┐------------
          ┌───┐     │   │
          │   │     └───┘
          └───┘     |
                    |

   Курсор на экране выводится с перекрестьем, если пользователь
нажимает на клавишу F2. Эта же клавиша убирает прицел с экрана,
если он не нужен.
   Вася. Прицел  в самом деле удобен.  С его помощью  так легко
поставить шаблоны на одной прямой:

                                 |
                                 |
                                 |
             ┌───┐-----┌───┐-----┌───┐---------
             │   │     │   │     │   │
             └───┘     └───┘     └───┘
                                 |
                                 |

   А если курсор  имеет не прямоугольную форму, то как распола-
гается перекрестье?

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

                     |   перекрестье прицела
                     | /
         ------------|---------------------
                     |       /│
                     |     /  │
                     |   /    │ ── курсор-треугольник
                     | /      │
                     |────────┘
                     |
   Вася. Осталось разобраться с координатами Раскрашки.
   Папа. Для того чтобы  знать,  как по координатам найти соот-
ветствующую точку,  надо договориться о системе координат. Сис-
тема координат - это:
   во-первых, начало координат,  то  есть точка, от которой от-
считываются расстояния  по горизонтали и вертикали; поэтому ко-
ординаты начала координат - это пара из двух нулей: (0,0);
   во-вторых, это направления, по которым увеличиваются  значе-
ния координат;
   в-третьих, это  единицы измерения, в которых исчисляются ко-
ординаты.
   Петя. Раскрашка  постоянно  показывает в правом верхнем углу
экрана два числа. Эти числа являются координатами прицела.
   Начало координат,  то  есть  точка, от которой отсчитываются
расстояния по горизонтали и вертикали, в Раскрашке располагает-
ся в  левом верхнем углу поля  рисунка. От этой  точки горизон-
тальные координаты увеличиваются вправо, а вертикальные - вниз.
Координаты исчисляются в экранных точках, или пикселах.
   Например, точки (50,100) и (90,100) находятся на одной гори-
зонтальной  прямой,  но  первая  из  них  левее  второй.  Точки
(90,100) и (90, 150) лежат на одной вертикали,  но вторая точка
ниже первой.
   Вася. Полезность  координат  понятна: если я хочу, например,
один шаблон поставить на одной горизонтали с другим, нужно что-
бы  горизонтальные  координаты у этих шаблонов совпадали. Да  и
вообще, следя  за  значениями координат, всегда легко поставить
курсор в нужную точку, даже если прицела нет на экране.

9. Сохранение картинок
   Вася. Мне нужно сохранить  свой  рисунок, но в дисковом меню
Раскрашки так много разделов. Для чего они предназначены?

                     ┌───┬─────────────────┐
                     │   │     Д И С К     │
                     ├───┴─────────────────┤
                     │┌──┐                 │
                     ││▒▒│ Чтение...       │
                     │└──┘                 │
                     │┌──┐                 │
                     ││▒▒│ Запись...       │
                     │└──┘                 │
                     │┌──┐                 │
                     ││▒▒│ В формат PIC... │
                     │└──┘                 │
                     │┌──┐                 │
                     ││▒▒│ В формат PCX... │
                     │└──┘                 │
                     └─────────────────────┘

   Папа. Файл с картинкой Раскрашки (на диске он имеет расшире-
ние kp) устроен особым образом.
   Графические файлы с расширением pic и pcx, с которыми мы ра-
ботали раньше, содержат описания цветов всех  точек экрана. Та-
кие графические форматы называются точечными.
   Раскрашка сохраняет  рисунок  в  виде описаний его отдельных
элементов (шаблонов). Графические форматы, подобные формату  KP
Раскрашки, называются векторными.
   Говорят также о точечных и векторных редакторах, имея в виду
способ построения  рисунка.
   Задача точечного  редактора  -  размещать  на экране цветные
точки, как  живописец  наносит  штрихи на холст. Прямоугольник,
который строится в Художнике -  всего  лишь  набор точек. Можно
построить на экране сотни  точек,  но никакие свойства не будут
выделять их как прямоугольник. Программа Художник  - это типич-
ный точечный редактор.
   Раскрашка связывает с построенным прямоугольником его харак-
теристики - высоту и  ширину,  положение на экране, способ зак-
раски. Можно изменить некоторые  характеристики  фигуры, напри-
мер, высоту или  ширину,  но Раскрашка по-прежнему будет знать,
что речь идет о прямоугольнике и сумеет правильно его перестро-
ить на экране, не затрагивая при этом других фигур.
   Вася. Значит, в  Раскрашке  можно  изменять уже нарисованные
элементы, не перерисовывая заново картинку?
   Папа. Конечно! Именно в силу того, что Раскрашка - векторный
редактор.  Для редактирования  построенных  шаблонов  Раскрашка
имеет дополнительную страницу, и мы еще подробно коснемся этого
вопроса. А теперь вернемся к дисковому меню редактора.
   Первые два раздела "Чтение" и "Запись"  позволяют работать с
файлами формата KP. Это собственный формат Раскрашки.
   Вася. Я понял преимущества векторного формата, но что делать
если  мне  захочется  на  рисунке,  выполненном  в  Раскрашкой,
что-нибудь подрисовать  в  Художнике  или подсоединить картинку
Раскрашки к Веселым Картинкам?
   Папа. Именно для этого в дисковом меню предусмотрены две до-
полнительные строчки. Они позволяют сохранять экран Раскрашки в
виде pic- или pcx-файлов.
   Вася. Но ведь Раскрашка - векторный редактор! Как  же он мо-
жет записывать картинки в точечных форматах?
   Папа. Никакой проблемы в этом нет:  точечные файлы Раскрашка
создает, рассматривая  построенный  на экране рисунок как набор
цветных точек, "забывая" на время о его векторной природе.
   Было бы удивительно, если бы Раскрашка,  наоборот, могла чи-
тать точечные файлы с диска и преобразовывать их в свой вектор-
ный формат, то  есть выделять среди набора цветных точек экрана
отдельные шаблоны: прямоугольники, овалы, треугольники. Эта за-
дача Раскрашке "не по зубам".

10. Тайна второй страницы

   Вася. Столько  загадочного  было сказано про вторую страницу
Раскрашки, что мне хочется поскорее ее увидеть.
   Папа. Я уже  говорил,  что Раскрашка - векторный графический
редактор. Она хранит  в  своей памяти описания всех построенных
шаблонов рисунка в  виде специальных кодов. Эти коды можно уви-
деть на  второй странице и изменить  их, меняя, тем  самым, на-
чальный рисунок.
   У тебя сейчас на экране нарисован пейзаж с  грузовиком и де-
ревом. Можно поработать с этим рисунком на второй странице Рас-
крашки.
   Вася. Для смены  страницы нужно нажать первую кнопку в глав-
ном меню:

  ┌─ кнопка перехода на вторую страницу
┌─┴─┬───┬───┬───┬───┬───┬─────────────┬───┬───┬────────────────┐
│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ РАСКРАШКА   │▒▒▒│▒▒▒│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
├───┼───┴───┴───┴───┴───┴─────────────┴───┴───┴────────────────┤
│▒▒▒│                                                          │
├───┤                                                          │
│▒▒▒│                                                          │
├───┤                                                          │
│▒▒▒│                                                          │
├───┤                          __                              │
│▒▒▒│                         /  \                             │
├───┤                       /      \                           │
│▒▒▒│                      |        |                          │
├───┤                      \        /                          │
│▒▒▒│                        --ШШ--                            │
├───┤                          ШШ ┌───┐                        │
│▒▒▒│                  ┌──────────┤▒▒▒├───┐                    │
├───┤                  └──────────┴───┴───┘                    │
│▒▒▒│                    О     ШШ       О                      │
├───┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│▒▒▒│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
├───┤░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
│▒▒▒│                                                          │
├───┤                                                          │
│▒▒▒│                                                          │
│   │                                                          │
│┌┬┐│                                                          │
│├┼┤│                                                          │
│├┼┤│                                                          │
│├┼┤│                                                          │
│├┼┤│                                                          │
│├┼┤│                                                          │
│├┼┤│                                                          │
│├┼┤├──┬──┬──┬──┬──┬──┬──┬──┬──┬────┬──┬──┬──┬──┬──┬──┬──┬──┬──┤
│└┴┘│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│    │▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│▒▒│
└───┴──┴──┴──┴──┴──┴──┴──┴──┴──┴────┴──┴──┴──┴──┴──┴──┴──┴──┴──┘

   Вася. Ого! Моя картинка уменьшилась!
   Папа. Не волнуйся, твоя картинка не изменилась. Ты видишь ее
"эскиз", уменьшенный в два раза.

      ┌── таблица построенных шаблонов
┌─────┼────────────────────────────────────────────────────────┐
│┌──┬─┴┬──┬──┬──┬──┬──┬──┬──┐┌────────────────────────────────┐│
││  │  │  │  │  │  │  │  │  ││              __                ││
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│             /  \               ││
││  │  │  │  │  │  │  │  │  ││           /      \             ││
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│          |        |            ││
││  │  │  │  │  │  │  │  │  ││          \        /            ││
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│            --ШШ--              ││
││  │  │  │  │  │  │  │  │  ││              ШШ ┌───┐          ││
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│      ┌──────────┤▒▒▒├───┐      ││
││  │  │  │  │  │  │  │  │  ││      └──────────┴───┴───┘      ││
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│        О     ШШ       О        ││
││  │  │  │  │  │  │  │  │  ││░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░││
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░││
││  │  │  │  │  │  │  │  │  │└────────────────────────────────┘│
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤          ┌──────────────────┐    │
││  │  │  │  │  │  │  │  │  │┌──┐ ┌──┐ │┌──┐     ┌──┐     │┌──┐│
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│ │ │  │ ││  │     │  │     ││  ││
││  │  │  │  │  │  │  │  │  │├──┤ └──┘ │└──┘     └──┘     │└──┘│
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│▒▒│      │    ┌──┐┌────┐┌──┐│┌──┐│
││  │  │  │  │  │  │  │  │  ││▒▒│      │    │  ││    ││  │││  ││
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│▒▒│      │    └──┘└────┘└──┘│└──┘│
││  │  │  │  │  │  │  │  │  ││▒▒│ ┌──┐ │┌──┐     ┌──┐     │┌──┐│
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│▒▒│ │  │ ││  │     │  │     ││  ││
││  │  │  │  │  │  │  │  │  ││▒▒│ └──┘ │└──┘     └──┘     │└──┘│
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│  │  │   └──────────────────┘    │
││  │  │  │  │  │  │  │  │  ││  │     ┌──────────────────┐    │
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│  │ ┌──┐ │┌──┐   ┌──┐   ┌──┐│    │
││  │  │  │  │  │  │  │  │  ││  │ │  │ ││  │   │  │   │  ││    │
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤│  │ └──┘ │└──┘   └──┘   └──┘│    │
││  │  │  │  │  │  │  │  │  ││  │      │┌──┐   ┌──┐   ┌──┐│    │
│├──┼──┼──┼──┼──┼──┼──┼──┼──┤├──┤      ││  │   │  │   │  ││    │
││  │  │  │  │  │  │  │  │  ││ │      │└──┘   └──┘   └──┘│    │
│└──┴──┴──┴──┴──┴──┴──┴──┴──┘└──┘      └──────────────────┘    │
└──────────────────────────────────────────────────────────────┘

   Слева от  эскиза  располагается таблица, в которой Раскрашка
показывает описания построенных шаблонов:

┌──┬─────────────┬─────────────┬───┬───┬──────────┬─┬──────┬──────┐
│N │Инструмент   │Разновидность│ x │y  │Цвет (X)  │Y│Ширина│Высота│
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│1 │Прямоугольник│Заливка      │241│98 │коричневый│ │13    │121   │ствол дерева
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│2 │Овал         │Заливка      │200│29 │зеленый   │ │96    │122   │крона дерева
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│3 │Прямоугольник│Заливка      │206│176│серый     │ │142   │23    │кузов
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│4 │Прямоугольник│Заливка      │348│149│синий     │ │56    │52    │кабина
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│5 │Прямоугольник│Заливка      │405│176│синий     │ │36    │23    │мотор
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│6 │Прямоугольник│Заливка      │362│152│голубой   │ │36    │22    │окно
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│7 │Овал         │Миксер       │242│200│желтый    │ │36    │22    │колесо
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│8 │Овал         │Миксер       │402│200│желтый    │ │36    │22    │колесо
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│9 │Прямоугольник│Луг          │0  │223│зеленый   │ │602   │72    │дорога
└──┴─────────────┴─────────────┴───┴───┴──────────┴─┴──────┴──────┘

   Каждая  строка  таблицы  описывает один построенный  шаблон.
Описание шаблона состоит из девяти полей (клеток).
   В первой  клетке  записывается  номер  шаблона,  во вторую и
третью помешаются пиктограммы инструмента, при помощи  которого
построен шаблон, и его разновидность. Третья и четвертая клетки
отводятся под координаты  шаблона  на экране. Первой идет гори-
зонтальная координата  (она  описана в заголовке таблице латин-
ской буквой x),  второй - вертикальная (она описана в заголовке
латинской буквой y).
   Вася. Раньше мы говорили только о координатах точек на экра-
не Раскрашки. А  что  понимается под координатами шаблона? Ведь
он состоит из множества точек.
   Папа. Положение шаблона на экране описывается положением од-
ной точки,  расположенной  в левом верхнем углу прямоугольника,
окаймляющего шаблон.
   Вася. Иными  словами,  координаты  шаблона  - это координаты
прицела в момент его построения?
   Папа. Верно! Если  шаблон  - прямоугольник, то его положение
на экране описывается координатами его левого верхнего угла:

                          координаты этой точки задают
                        / координаты прямоугольного шаблона
                       ■─────────────┐
                       │             │
                       │             │
                       │             │
                       └─────────────┘

   Вася. А положение треугольных шаблонов задают такие точки:

                                            
    ■             ■            ■────────┐      ■────────
    │\                   /│     \       │      │       /
    │  \               /  │       \     │      │     /
    │    \           /    │         \   │      │   /
    │      \       /      │           \ │      │ /
    └────────     ────────┘

   Петя. Координаты шаблона-овала задаются такой точкой:

                   
                   ■    _____
                      /       \
                    /           \
                   |             |
                   |             |
                    \           /
                      \ _____ /

   Вася. Положение шаблона-точки  описывается координатами этой
точки. Смысл третьего и четвертого столбца таблицы мне понятен.
   Папа. Пятая клетка в описании  задает  цвет,  выбранный  для
шаблона, шестая - не используется, седьмая и восьмая - описыва-
ют размеры.
   Вообще говоря,  описание  шаблона  (или, как говорят, формат
описания шаблона) зависит от инструмента, которым он построен.
   Формат, который  мы  рассмотрели, относится к шаблонам, пос-
троенным инструментами Прямоугольник, Треугольник и Овал.  Фор-
маты описаний остальных шаблонов имеют свои особенности.
   У инструмента Точка отсутствует  разновидность.  Кроме того,
размеры экранной точки фиксированы: можно считать, что ее шири-
на и высота равны 1, поэтому последние две клетки в строке опи-
сания точки не заполняются.
   У инструментов Символ и Штамп размеры  тоже нельзя поменять,
поэтому восьмая и девятая клетки в  их  описаниях  пустые.  При
построении Штампа, кроме того, не задается цвет.
   Описание инструмента Копирование имеет самый сложный формат.
Клетка "Разновидность"  не  используется - она остается пустой.
Цвет для этого инструмента  не  задается, но шестое поле вместе
со следующим, седьмым, задают  координаты  прямоугольного фраг-
мента экрана, который был  использован  для "снятия" с него ко-
пии.
   Вася. Пусть,  например,  я построил шаблон путем копирования
прямоугольного фрагмента,  расположенного в точке (0,20), в но-
вую точку (100,30):

       (10,20)
       ■──────┐
       │      │                               (100,30)
       │      │70  ─────────────┐             ■──────┐
       │      │                 └───────────> │      │
       └──────┘                               │      │70
          50                                  │      │
                                              └──────┘
                                                 50

   Тогда описание шаблона будет иметь следующий вид:

┌──┬─────────────┬─────────────┬───┬───┬────────┬────┬──────┬──────┐
│N │Инструмент   │Разновидность│ x │y  │Цвет (X)│Y   │Ширина│Высота│
├──┼─────────────┼─────────────┼───┼───┼────────┼────┼──────┼──────┤
│1 │Копирование  │             │100│30 │10      │20  │50    │70    │
└──┴─────────────┴─────────────┴───┴───┴────────┴────┴──────┴──────┘

   Папа. Ты все правильно понял!
   Раскрашка показывает пользователю таблицу с описаниями  пос-
троенных шаблонов для того, чтобы он при желании мог эту табли-
цу редактировать.
   Вася. А как это сделать?
   Папа. Для  изменения значения какого-либо поля нужно "войти"
в соответствующую клетку, щелкнув по ней мышкой. Если поле чис-
ловое - в клетке появится курсор и можно написать нужное значе-
ние на клавиатуре. Если в  поле  расположена  пиктограмма - она
заменяется по очереди  на  другие при помощи стрелок клавиатуры
или при помощи перемещения мыши по коврику. "Выход" из поля вы-
полняется левой или правой кнопкой  мыши.  В  последнем  случае
происходит отказ от внесенных изменений, и  поле  принимает  то
значение, которое  оно  имело до редактирования. Если изменения
сохранены, то они тут же отображается на малом экране страницы.
   Вася. Попробую изменить седьмой шаблон в моем рисунке: гори-
зонтальную координату 242 исправлю на 150.  Здорово! Заднее ко-
лесо грузовика оторвалось от него и "покатилось" назад:

                                 __
                                /  \
                              /      \
                             |        |
                             \        /
                               --ШШ--
                                 ШШ ┌───┐
                         ┌──────────┤▒▒▒├───┐
                         └──────────┴───┴───┘
                     О           ШШ       О
            ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
            ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

   Для подобного исправления на первой странице мне пришлось бы
сначала закрасить колесо цветом фона, а потом нарисовать его на
новом месте. Работа с шаблонами здорово упрощает жизнь!
   Петя. Заметьте, важны  не только описания шаблонов, но и по-
рядок следования их  в таблице по строкам.
   Вася. Думаю, порядок неважен. Ведь  независимо  от  места  в
таблице каждый шаблон все равно будет построен.
   Петя. Представь, что первые две строки в таблице переставле-
ны в конец. Изменится ли от этого рисунок?
   Вася. Конечно, нет! Ведь от перестановки мест слагаемых сум-
ма не меняется! Хотя, постой... Первые две строки описывают де-
рево. Грузовик был нарисован после него на переднем плане. Если
рисовать дерево после грузовика, то грузовик  окажется за дере-
вом. Вот это да! Я был неправ!
   Петя. Описание  шаблона можно рассматривать как команду пос-
троения фигуры. Последовательность команд  записана  в таблицу.
Так что же содержит таблица?
   Вася. Таблица  содержит  программу построения рисунка.

11. Редактирование программы

   Вася. На второй странице помимо рисунка и таблицы с команда-
ми рисования находится  множество  кнопок и числовых полей. Для
чего они предназначены?
   Папа. Для  выполнения  операций  над группой последовательно
расположенных команд или,  что тоже самое, строк в таблице опи-
саний шаблонов.
   Каждой такой операции предшествует выделение группы. Для вы-
деления группы  надо  щелкнуть  два  раза:  первый щелчок левой
кнопкой мыши -  на  начало группы,  то  есть на первую  команду
группы, в поле номера команды; второй, правой кнопкой мыши - на
конец группы, то есть на последнюю команду. Номера команд поме-
ченной группы выделяются в таблице подсветкой их номеров.
   Петя. Есть еще один способ выделения  группы команд, который
особенно удобен для больших  групп.  При этом способе надо наб-
рать на  клавиатуре два числа  - номер первой и номер последней
команды в группе. Для этой цели предусмотрены два небольших по-
ля (на рисунке они обозначены числами 2 и 3) для ввода чисел:

    ─┼──┼──┼──┼──┤│                                ││
     │  │  │  │  │└────────────────────────────────┘│
    ─┼──┼──┼──┼──┤          ┌──────────────────┐    │
     │  │  │  │  │┌──┐ ┌──┐ │┌──┐     ┌──┐     │┌──┐│
    ─┼──┼──┼──┼──┤│ │ │1 │ ││4 │     │9 │     ││17││
     │  │  │  │  │├──┤ └──┘ │└──┘     └──┘     │└──┘│
    ─┼──┼──┼──┼──┤│▒▒│      │    ┌──┐┌────┐┌──┐│┌──┐│
     │  │  │  │  ││▒▒│      │    │7 ││ 6  ││8 │││18││
    ─┼──┼──┼──┼──┤│▒▒│      │    └──┘└────┘└──┘│└──┘│
     │  │  │  │  ││▒▒│ ┌──┐ │┌──┐     ┌──┐     │┌──┐│
    ─┼──┼──┼──┼──┤│▒▒│ │2 │ ││5 │     │10│     ││19││
     │  │  │  │  ││▒▒│ └──┘ │└──┘     └──┘     │└──┘│
    ─┼──┼──┼──┼──┤│  │  │   └──────────────────┘    │
     │  │  │  │  ││  │     ┌──────────────────┐    │
    ─┼──┼──┼──┼──┤│  │ ┌──┐ │┌──┐   ┌──┐   ┌──┐│    │
     │  │  │  │  ││  │ │3 │ ││11│   │13│   │15││    │
    ─┼──┼──┼──┼──┤│  │ └──┘ │└──┘   └──┘   └──┘│    │
     │  │  │  │  ││  │      │┌──┐   ┌──┐   ┌──┐│    │
    ─┼──┼──┼──┼──┤├──┤      ││12│   │14│   │16││    │
     │  │  │  │  ││ │      │└──┘   └──┘   └──┘│    │
    ─┴──┴──┴──┴──┘└──┘      └──────────────────┘    │
    ────────────────────────────────────────────────┘

   Вася. Над окошками ввода 2 и 3 расположена кнопка 1  с нари-
сованной на ней маленькой табличкой. Эта кнопка имеет отношение
к выделению группы?
   Петя. Это так. Если  нажать  эту кнопку, то выделенными ока-
жутся сразу  все строки таблицы.  А если нажать кнопку еще раз,
то отменятся все выделения:  поля  номеров у всех команд, кроме
первой, возвращаются к исходному серому цвету.
   Вася. КАК выделить  группу  теперь мы знаем, осталось понять
ЗАЧЕМ это надо.
   Петя. Над группой команд можно выполнить следующие операции:
   - показать рисунок, получаемый на экране при  последователь-
ном выполнении команд группы, - кнопка 15;
   - увеличить размеры  отмеченных  шаблонов в 2 раза (операция
не может быть  выполнена, если в группу входят инструменты Сим-
вол, Штамп и Копирование), - кнопка 4;
   - уменьшить размеры  отмеченных  шаблонов в 2 раза (операция
не может быть  выполнена, если в группу входят инструменты Сим-
вол, Штамп и Копирование), - кнопка 5;
   - переместить отмеченные шаблоны по экрану в  одном из четы-
рех направлениях - кнопки 7-10. Перемещение  выполняется на ве-
личину, определяемую полем ввода 6;
   - продублировать группу - кнопка 12;
   - удалить отмеченные команды - кнопка 11;
   - копировать группу в буфер (с сохранением их на старом мес-
те) - кнопка 13;
   - вставить команды  из  буфера  перед  отмеченной  группой -
кнопка 14.

   Вася.  Нет,  так не пойдет. Давайте по-порядку проверим  все
операции на моей картинке с грузовичком и деревом.

11.1 Выполнение команд
   Папа. Сформулирую  такое  задание:  показать  на экране одно
только дерево, без грузовика.
   Вася. Дерево нарисовано при помощи первых  двух команд. Сна-
чала отмечаю первые две строки в таблице, а затем нажимаю кноп-
ку 15 с нарисованной на ней лупой. Готово:
              ┌────────────────────────────────┐
              │              __                │
              │             /  \               │
              │           /      \             │
              │          |        |            │
              │          \        /            │
              │            --ШШ--              │
              │              ШШ                │
              │              ШШ                │
              │              ШШ                │
              │              ШШ                │
              │                                │
              │                                │
              └────────────────────────────────┘

   Петя. Раскрашка сначала очистила экран, а затем выполнила на
нем отмеченные команды.
   Вася. А как теперь снова вывести на экран  всю картинку?
   Петя. Нажать кнопку 16.  При  этом Раскрашка очистит экран и
выполнит всю программу, записанную в таблице целиком, игнорируя
отмеченную группу.

11.2 Изменение размеров
   Папа. Давайте превратим грузовик в болотоход, увеличив в два
раза его колеса.
   Вася. Отмечаю седьмую  и восьмую команды - они рисуют колеса
и нажимаю кнопку 4, на ней изображено умножение на два:

              ┌────────────────────────────────┐
              │              __                │
              │             /  \               │
              │           /      \             │
              │          |        |            │
              │          \        /            │
              │            --ШШ--              │
              │              ШШ ┌───┐          │
              │      ┌──────────┤▒▒▒├───┐      │
              │      └/  \──────┴───/  \┘      │
              │       \__/   ШШ     \__/       │
              │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
              │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
              └────────────────────────────────┘

   Петя. Обращаю внимание  на изменения в таблице: ширина и вы-
сота седьмого и восьмого шаблона увеличилась в два раза:
┌──┬─────────────┬─────────────┬───┬───┬──────────┬─┬──────┬──────┐
│N │Инструмент   │Разновидность│ x │y  │Цвет (X)  │Y│Ширина│Высота│
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤

├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│7 │Овал         │Миксер       │242│200│желтый    │ │72    │44    │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│8 │Овал         │Миксер       │402│200│желтый    │ │72    │44    │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│9 │Прямоугольник│Луг          │0  │223│зеленый   │ │602   │72    │
└──┴─────────────┴─────────────┴───┴───┴──────────┴─┴──────┴──────┘

   Папа. А теперь можно вернуть колесам первоначальный вид.
   Вася. Группа  отмечена по-прежнему, значит просто нажимаю на
кнопку 5, на ней изображено деление на два. Рисунок принял пер-
воначальный вид.

11.3 Перемещение шаблонов

   Папа. Пусть теперь грузовик немного проедет вперед, так что-
бы не загораживать на картине дерево.
   Вася. Выделю команды с третьей по восьмую -  они рисуют гру-
зовик - и буду нажимать кнопку 8 для перемещения шаблонов впра-
во.
   Петя. Погоди. В поле 6 сейчас написано число  1. Это значит,
что каждое нажатие на кнопку 8 будет увеличивать горизонтальную
координату шаблонов в группе ровно на одну точку  - это слишком
медленно для  грузовика. Предлагаю увеличить скорость его пере-
мещения в двадцать раз!
   Вася. А как это сделать?
   Петя. Нужно "войти" в поле 6 и записать число двадцать вмес-
то единицы.
   Вася. Готово! Теперь  нажимаю на кнопку 8, на ней нарисована
стрелка вправо:

              ┌────────────────────────────────┐
              │         __                     │
              │        /  \                    │
              │      /      \                  │
              │     |        |                 │
              │     \        /                 │
              │       --ШШ--                   │
              │         ШШ            ┌───┐    │
              │         ШШ ┌──────────┤▒▒▒├───┐│
              │         ШШ └──────────┴───┴───┘│
              │         ШШ   О              О  │
              │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
              │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
              └────────────────────────────────┘
   Петя. Тебе  пришлось нажать кнопку 8 три раза,  а если бы ты
не  исправил  1 на 20, тебе  пришлось  бы нажимать на кнопку  8
шестьдесят раз!
   Папа. Можно заставить грузовик, пятясь, вернуться на прежнее
место.
   Вася. Для  этого нужно просто три раза нажать  на кнопку 7 -
на ней нарисована стрелка влево.
   Петя. Снова  обращаю  внимание  на изменения, происходящие в
таблице: каждое  нажатие на кнопку 8 увеличивает горизонтальную
координату у всех шаблонов в  отмеченной  группе,  а нажатие на
кнопку 7, наоборот, уменьшает.

   11.4 Размножение и удаление шаблонов

   Папа. Почему бы  на нашем рисунке не "посадить" второе дере-
во?
   Вася. Эту операцию, я думаю, можно выполнить при помощи дуб-
лирования. Сначала я отмечу первые  две  команды  - наше старое
дерево, а затем нажму кнопку 12, на ней изображен знак плюс.
   Увы! Дерево на экране по-прежнему одно.
   Петя. Э, нет! На экране два дерева!
   Вася. Как же так, я вижу только одно!
   Петя. Посмотри на таблицу команд.
   Вася. Она увеличилась на две команды:
┌──┬─────────────┬─────────────┬───┬───┬──────────┬─┬──────┬──────┐
│N │Инструмент   │Разновидность│ x │y  │Цвет (X)  │Y│Ширина│Высота│
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│1 │Прямоугольник│Заливка      │241│98 │коричневый│ │13    │121   │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│2 │Овал         │Заливка      │200│29 │зеленый   │ │96    │122   │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│3 │Прямоугольник│Заливка      │241│98 │коричневый│ │13    │121   │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│4 │Овал         │Заливка      │200│29 │зеленый   │ │96    │122   │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│5 │Прямоугольник│Заливка      │206│176│серый     │ │142   │23    │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│6 │Прямоугольник│Заливка      │348│149│синий     │ │56    │52    │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│7 │Прямоугольник│Заливка      │405│176│синий     │ │36    │23    │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│8 │Прямоугольник│Заливка      │362│152│голубой   │ │36    │22    │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│9 │Овал         │Миксер       │242│200│желтый    │ │36    │22    │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│10│Овал         │Миксер       │402│200│желтый    │ │36    │22    │
├──┼─────────────┼─────────────┼───┼───┼──────────┼─┼──────┼──────┤
│11│Прямоугольник│Луг          │0  │223│зеленый   │ │602   │72    │
└──┴─────────────┴─────────────┴───┴───┴──────────┴─┴──────┴──────┘
   Понятно! Первые две команды повторены, но так как они совер-
шенно те же самые, второе дерево расположено в точности на мес-
те старого. Что же теперь делать?
   Папа. Команды,  рисующие  первое  дерево,  сейчас отмечены в
таблице. Предлагаю переместить его влево.
   Вася. Понятно. Величина перемещения равна 20, нажимаю кнопку
7 пять раз:
              ┌────────────────────────────────┐
              │      __        __              │
              │     /  \      /  \             │
              │   /      \  /      \           │
              │  |        ||        |          │
              │  \        /\        /          │
              │    --ШШ--    --ШШ--            │
              │      ШШ        ШШ ┌───┐        │
              │      ШШ┌──────────┤▒▒▒├───┐    │
              │      ШШ└──────────┴───┴───┘    │
              │      ШШ  О     ШШ       О      │
              │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
              │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
              └────────────────────────────────┘

   Папа. Если одно из деревьев  решено  пустить  на "дрова", то
его можно удалить при помощи кнопки 11.
   Вася. Так я  и сделаю для того, чтобы восстановить начальный
рисунок.

   11.5 Буфер шаблонов

   Папа. Следующее задание: "перетащить" дерево, которое сейчас
нарисовано за грузовиком, на передний план картинки.
   Вася. Для решения этой задачи нужно переставить команды, ри-
сующие дерево, за  командами, рисующими грузовик. Но я не знаю,
как это сделать.
   Папа. Раскрашка  имеет специальный буфер для временного хра-
нения шаблонов.  Он похож на  буфер Монитора, но в своем буфере
Монитор может хранить информацию  только  об одной кнопке, в то
время как Раскрашка  может  запоминать в своем буфере несколько
шаблонов, объединенных в одну группу.
   Вася.  Кажется,  я понял, как можно переставить шаблоны, ис-
пользуя буфер. Нужно:
       - выделить переставляемую группу;
       - запомнить ее в буфере;
       - удалить отмеченную группу;
       - вставить команды из буфера в другое место таблицы.

   Папа. Хороший план. Можно приступить к его выполнению.
   Вася. Отмечаю  первые две команды и  нажимаю кнопку 13  - на
экране появилось сообщение:
         ┌──┬──────────────────────────────────────┐
         │  │     Р А Б О Т А  С  Б У Ф Е Р О М    │
         ├──┴──────────────────────────────────────┤
         │  Отмеченные команды запомнены в буфере  │
         └─────────────────────────────────────────┘
   Убираю с экрана информационное окно  и  нажимаю  кнопку 11 -
дерево исчезло с картинки. Теперь мне надо дерево из буфера по-
местить в таблицу за грузовиком.
   Петя. Шаблоны из буфера вставляются в таблицу перед отмечен-
ной в ней группой.
   Вася.  Понятно.  Я отмечаю в таблице последнюю команду,  она
рисует дорогу и нажимаю кнопку  14.  Получилось!  Дерево, как и
планировалось, переместилось на передний план:

              ┌────────────────────────────────┐
              │              __                │
              │             /  \               │
              │           /      \             │
              │          |        |            │
              │          \        /            │
              │            --ШШ--              │
              │              ШШ ┌───┐          │
              │      ┌───────ШШ─┤▒▒▒├───┐      │
              │      └───────ШШ─┴───┴───┘      │
              │        О     ШШ       О        │
              │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
              │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
              └────────────────────────────────┘

   Петя. Используя буфер, можно объединять несколько  отдельных
картинок, нарисованных в Раскрашке, в единую композицию, распо-
ложенную на одном экране.
   Вася.  Сейчас  я подумаю, как это можно сделать...  Понятно!
Предположим, что на диске записаны два  файла  в  форматах  KP.
Сначала загружаем в Раскрашку первый файл,  переходим на вторую
страницу, отмечаем все команды в таблице и запоминаем  их в бу-
фере. Затем загружаем в Раскрашку вторую  картинку, она, конеч-
но, заменит первую, но это не  страшно,  ведь  первая  картинка
хранится  в  буфере! Теперь остается только вставить в  таблицу
второй картинки шаблоны  первой  из буфера и картинки объедини-
лись.
   Петя. Молодец! Понятно, что ко второй картинке таким образом
можно подсоединять  первую  не  целиком, а выборочно, запоминая
нужные фрагменты в буфере. Когда формирование объединенного ри-
сунка закончено, его можно, как обычно, сохранить на диске.
   На второй странице  расположены  еще три кнопки, про которые
мы не говорили, но выполняемые ими действия очень просты:
       кнопка 17 - выход из программы;
       кнопка 18 - переход на первую страницу;
       кнопка 19 - вывод на экран подсказки.

12. Задачи и упражнения

   Приведенные ниже  задачи  связаны  с картинкой, изображающей
домик и  уголок летнего сада.  В каталоге Раскрашки файл с этой
картинкой называется home.kp. Предполагается,  что  для решения
задач используется вторая страница Раскрашки.

   Задача 1. Удалить дерево, изображенное на картинке.

   Задача 2. Переместить дерево в сад.

   Задача 3. Посадить еще одно дерево в саду.

   Задача 4. Вынести дерево из-за забора.

   Задача 5. Увеличить размер яблочек на дереве в два раза.

   Задача 6. Изменить цвет кроны дерева.

   Задача 7. Изменить толщину ствола дерева.

   Задача 8. Изменить цветовое заполнение ствола дерева.

   Задача 9.  Поместить  грузовик,  нарисованный  на картинке в
файле kuk.kp, на картинку с домиком и летним садом.

