             КОНСТРУКТОР СКАЗОК - НОВЫЕ ВОЗМОЖНОСТИ

                         Дуванов А.А.
              Переславль-Залесский, Роботландия

    В ИНФО N3 за 1993 был описан программный пакет "Конструктор
Сказок" версии 1.0 [1].
     Возможная область применения пакета - работа детей под  ру■
ководством учителя над
     - придумыванием,
     - проектированием,
     - макетированием,
     - программированием,
     - иллюстрированием и
     - написанием
ветвящихся компьютерных сказок.
     Конструктор Сказок прошел  испытания  в  различных  формах
учебной деятельности - на уроках в общеобразовательной школе, в
кружках, летних компьютерных лагерях ([5]). Опыт  использования
этого пакета показал пути его усовершенствования.
    Ниже описываются возможности Конструктора версии  3.0.  Эти
новые возможности порождают и новые области применения.

1. Возможности версии 3.0.
     Основные новинки состоят в том, что
     - каждый кадр может быть озвучен музыкой;
     - каждый кадр может быть анимирован;
     - введены новые управляющие символы "иначе", "возврат";
     - для дополнительных возможностей управления введена пере■
       менная "счетчик".

1.1. Музыкальные способности Конструктора.

    Приятно, когда текст и  иллюстрации  сказки  сопровождаются
музыкальными зарисовками. Это дополнительное эмоциональное воз■
действие на читателя становится возможным, когда  автор  сказки
задает на карточке - оборотной стороне кадра - имя файла с  ме■
лодией. Мелодию следует готовить в музыкальном  редакторе  Шар■
манщик, который включен в новую версию пакета.
    Шарманщик [2] - простой одноголосый  музыкальный  редактор.
Он позволяет собирать мелодию прямо на нотном стане,  прослуши■
вать и сохранять ее на диске.
     Музыка, по желанию читателя сказки, может отключаться  как
в каждом кадре, так и во всей сказке.

1.2. Картинки начинают оживать.

                Как формируются кадры мультфильма.
    Для мультипликации кадра сказки в графическом редакторе Ху■
дожник [3] готовятся несколько (не больше 10) фрагментов. Муль■
типликация сводится к их поочередному показу на экране.

         Как задаются дисковые имена кадров мультфильма.
     Все кадры одного мультфильма должны иметь имена, построен■
ные по следующему правилу:
                    основа_N.cut
где "основа" - любой набор символов (кроме подчерка  "_",  N  -
номер кадра мультфильма. Например, если  кадр  номер  5  сказки
"pig" - мультик, состоящий из 3 кадров, то их  имена  на  диске
могут быть:
                    pig5_1.cut
                    pig5_2.cut
                    pig5_3.cut

            Как обозначается мультфильм на карточке.
     Признаком мультфильма при записи имени рисунка на карточке
служит символ подчеркивания "_". Мультфильм задается при помощи
группового имени
                    основа_
     Например, для задания мультика на пятом кадре сказки "pig"
достаточно указать в качестве имени рисунка "pig5_". Теперь при
показе кадра N5 сказки, будут по очереди демонстрироваться кар■
тинки
                    pig5_1.cut
                    pig5_2.cut
                    pig5_3.cut

       Как задается темп и длительность показа мультфильма
    По умолчанию темп равен 1 - примерно 1/18 секундная  задер■
жка после показа каждого кадра  мультфильма.  Длительность,  то
есть число циклов показа, по умолчанию, равна 9.
     Длительность и темп можно изменять в  диапазоне  0-9.  Для
изменения этих  параметров  необходимо  во  время  демонстрации
мультфильма нажать клавишу перехода <Esc>. При  этом  на  экран
вызывается панель настройки:
                     ┌────────────────────┐
                     │ Настройка мультика │
                     │ Темп            1  │
                     │ Длительность    9  │
                     └────────────────────┘
     Темп и длительность после их настройки записываются в файл
сказки на диск.

1.3. Новые управляющие символы.
     Уже первые попытки учебных применений Конструктора Сказок,
отличающиеся от  простой  демонстрации  ветвящихся  управляющих
структур по выбираемым ключевым словам [5], были направлены  на
контроль знаний. В новую версию пакета включены простые  и  эф■
фективные средства управления,  которые  дополняют  Конструктор
Сказок функциями контролирующих программ.

                 Передача управления по "иначе"
     Введен управляющий символ "%". Этот символ задает управле■
ние по "иначе", т.е. переход на указанный кадр происходит, ког■
да пользователь набрал ключевое слово, не совпадающее ни с  од■
ним из ключевых слов на карточке.
     Пример
Кадр:
┌────────────────────────────────────────────────────────────┐
│ Вычислите и введите положительный корень уравнения:        │
│                       2                                    │
│                      X  - 4 = 0;                           │
└────────────────────────────────────────────────────────────┘
Оборотная сторона кадра:
                ┌────────────────┬───────┐
                │Ключевое слово  │  Кадр │
                ├────────────────┼───────┤
                │2               │3      │
                ├────────────────┼───────┤
                │%               │14     │
                ├────────────────┼───────┤
                │                │       │
                └────────────────┴───────┘
     Если пользователь набирает число 2, то следущим кадром бу■
дет показан кадр 3. При любом другом наборе управление  переда■
ется кадру с номером 14.

             Возврат управления к предыдущему кадру
     Введен управляющий символ "@". Этот символ задает  возврат
к предыдущему (в цепочке управления) кадру, то есть к тому,  от
которого получено управление. Этот символ удобно  использовать,
например, когда предусмотрен единый кадр для ошибочных  сообще■
ний в цепочке кадров-вопросов. Например,

            Сказка для обучению правописанию слов

            ┌─┐ ошибка
            │1├──── на кадр 100
            └┬┘
             │cat
             │
            ┌┴┐ошибка
            │2├─────  на кадр 100        ┌───┐
            └┬┘                          │100│
             │rat                        └───┘
             │                           кадр 100  сообщает  об
            ┌┴┐ошибка                    ошибке  и   возвращает
            │3├─────  на кадр 100        управление тому кадру,
            └┬┘                          от которого  оно  было
             │                           получено
           .....

Оборотная сторона кадра 100:
                ┌────────────────┬───────┐
                │Ключевое слово  │  Кадр │
                ├────────────────┼───────┤
                │@               │       │
                ├────────────────┼───────┤
                │                │       │
                ├────────────────┼───────┤
                │                │       │
                └────────────────┴───────┘

1.4. Сказочная арифметика и условные переходы
     Введено понятие счетчика. Счетчик - это переменная,  кото■
рая по ходу чтения сказки  может  принимать  нулевое  значение,
увеличиваться или уменьшаться  на  единицу.  Значение  счетчика
можно использовать для организации условных переходов.
    На карточке введена графа "Счетчик". В нее  можно  записать
один символ, который будет  управлять  изменением  счетчика  во
время чтения сказки:
     1) "0" - при показе кадра на  экране  обнулить  содержимое
счетчика;
     2) "+" - при показе кадра на экране увеличить  счетчик  на
1;
     3) "-" - при показе кадра на экране уменьшить  счетчик  на
1;
     4) "=" (или любой другой символ) -  не  менять  содержимое
счетчика.
     При задании управления в графе "Ключевое слово" на карточ■
ке можно использовать следующие конструкции:
     1) &<число - управление будет передано  в  соответствии  с
графой "Кадр" текущей строки, если содержимое счетчика (обозна■
чение &) в данный момент меньше указанного числа;
     2) &>число - управление будет передано  в  соответствии  с
графой "Кадр" текущей строки, если содержимое счетчика в данный
момент больше указанного числа;
     1) &=число - управление будет передано  в  соответствии  с
графой "Кадр" текущей строки, если содержимое счетчика в данный
момент равно указанному числу.
       Первый пример:
              ┌────────────────┬───────┐
              │Ключевое слово  │  Кадр │
              ├────────────────┼───────┤
              │&<5             │ 20    │
              ├────────────────┼───────┤
              │&=5             │ 21    │
              ├────────────────┼───────┤
              │&>5             │ 22    │
              └────────────────┴───────┘
     В этом примере, если значение счетчика меньше 5, то управ■
ление передается на кадр с номером 20, если больше 5 - на  кадр
с номером 22, если равно - на кадр с номером 21.
     Рассмотрим другой пример:
                ┌────────────────┬───────┐
                │Ключевое слово  │  Кадр │
                ├────────────────┼───────┤
                │&<5             │  100  │
                ├────────────────┼───────┤
                │&=8             │  101  │
                ├────────────────┼───────┤
                │*               │  102  │
                └────────────────┴───────┘
     Пользователь нажал клавишу  выполнения  (<Enter>),  набрав
(или не набрав) некоторое ключевое слово.
     Если содержимое счетчика в этот момент меньше 5, следующим
будет показан кадр с номером 100, если содержимое счетчика рав■
но 8 - кадр с номером 101, в противном случае  следующим  будет
показан кадр с номером 102.
     Здесь, как и в предыдущем примере, переход определяется не
ключевым словом, а значением счетчика.
     При задании управления в графе "Кадр"  на  карточке  можно
использовать следующие конструкции:
     1) &+число - следующим будет показан кадр с номером, кото■
рый получается прибавлением указанного числа к текущему  состо■
янию счетчика;
     2) &-число - следующим будет показан кадр с номером, кото■
рый получается вычитанием указанного числа из  текущего  состо■
яния счетчика.
     Следующий пример иллюстрирует этот способ управления:

                ┌────────────────┬───────┐
                │Ключевое слово  │  Кадр │
                ├────────────────┼───────┤
                │&<5             │&+100  │
                ├────────────────┼───────┤
                │&=8             │&-1    │
                ├────────────────┼───────┤
                │да              │&+101  │
                └────────────────┴───────┘

     Замечание 1. Пусть в последнем примере  значение  счетчика
равно 8, пользователь набрал ключевое слово "да". Управление  в
этом случае будет передано кадру с номером 7, а не 109. Дело  в
том, что сканирование условий производится,  начиная  с  первой
строки, пока не встретится то, которое  удовлетворяется.  Если,
необходимо по ключевому слову "да" всегда передавать управление
по правилу &+101, следует заполнить таблицу по-другому:

                ┌────────────────┬───────┐
                │Ключевое слово  │  Кадр │
                ├────────────────┼───────┤
                │да              │&+101  │
                ├────────────────┼───────┤
                │&<5             │&+100  │
                ├────────────────┼───────┤
                │&=8             │&-1    │
                └────────────────┴───────┘

     Замечание 2. Увеличение (или уменьшение) счетчика на  один
в каждом кадре делается только один раз,  даже  если  пользова■
тель, читая сказку, попадал в него многократно.

2. Опыт работы в детском коллективе.

               Формирование творческого коллектива
     Для проектирования сказки создается  временный  творческий
коллектив, состоящий из:
       - программистов,
       - художников-мультипликаторов,
       - литераторов,
       - музыкантов.
     Такой детский коллектив может состоять из 4 - 15  человек.
Численность определяется помимо всего  прочего  формой  работы:
если дети работают в рамках кружка, то группа  может  быть  не■
большой, если сказка проектируется в рамках основного  учебного
времени - она определяется числом детей в учебной  группе  (как
правило, половина класса).
     Творческий коллектив создается для выполнения  конкретного
задания, которое предлагает учитель  (или  ученики).  Например,
тема может быть сформулирована как "Создание сказки для  обуче■
ния английскому языку". Полезно обратить внимание детей на воз■
можные использования будущего продукта ("в 5 классе  на  уроках
английского языка").

                       Техническое задание
     На этом и следующем этапах  проекта  вся  группа  работает
вместе, принимая участие в обсуждении. На  коллоквиум  выносятся
следующие воросы:
     - назначение сказки
       (обучить правописанию и  значению  англиских  слов:  cat,
       camel, rat, bat, hen, chick, pig, pelican, rabbit);
     - форма подачи читателю;
       (в виде истории написания Драконом Биллом приглашений  на
       свой день рождения);
     - название,
       (День рождения Дракона).

                 Проектирование и макетирование.
     Когда известны форма представления и  сюжет  сказки,  пора
перейти к проектированию сказочного графа (см. п. 3.1).
     Одновременно с графом изготавливаются  бумажные  карточки,
которые составляют макет будущей сказки. На карточке  записыва■
ются:
            - черновик повествования;
            - эскиз (или описание)  иллюстрации  с  пометками  о
              возможной мультипликации;
            - возможная музыкальная тема кадра;
            - способ выбора следующего кадра.

               Создание отдельных кадров и сборка
     Общие обсуждения заканчиваются и каждый член группы  начи■
нает заниматься своей работой.
     Литераторы создают тексты для каждого кадра. Основное тех■
ническое средство - текстовый редактор.
     Художники делают иллюстрации в графическом  редакторе  или
подбирают готовые рисунки из библиотеки рисунков (входит в  па■
кет). Отлаживать мультипликацию им помогают программисты в  Ре■
дакторе Сказок.
     Музыканты работают в музыкальном редакторе,  сочиняя  свою
музыку или переписывая ноты известных мелодий к тем кадрам, ко■
торые решено озвучить.
     Программисты заполняют карточки Редактора Сказок, согласно
построенному графу. К ним поступают все готовые фрагменты сказ■
ки от других членов группы и они производят сборку.

                     Тестирование и отладка
     Когда сказка собрана  ее  необходимо  отладить:  проверить
комплектность каждого кадра (наличие  нужных  текстовых,  музы■
кальных и графических файлов), правильность  передачи  управле■
ния. Отладкой занимаются все члены группы одновременно на своих
компьютерах, фиксируя замеченные ошибки.

3. Примеры сказок

3.1. День рождения Дракона

                      Область использования
     Обучение английскому языку в рамках  курса,  обеспеченного
компьютерной поддержкой - Magic Land [4].

                           Назначение
     Обучить  правописанию  и  значению  англиских  слов:  cat,
camel, rat, bat, hen, chick, pig, pelican, rabbit.
                              Сюжет
     Дракон Билл пишет приглашения своим друзьям на  свой  день
рождения.
                              Граф

                   &=&+1        &=&+1
                  ┌───┐        ┌───┐
               ┌──┤201│     ┌──┤301│
               │  └┬──┘     │  └┬──┘
    &=0        │   │ошибка  │   │ошибка
    ┌─┐        │  ┌┴┐       │  ┌┴┐
    │1├────────┴──┤2├───────┴──┤3├─────── ...
    └─┘           └─┘ cat      └─┘ camel
    Постановка
    задачи
                                        ┌───┐
                                      ┌─┤220├─ на кадр 11
                                      │ └───┘
                                      │ ┌───┐
                                      ├─┤221├─ на кадр 11
                                      │ └───┘
                                      │ ┌───┐
          &=&+1                       ├─┤222├─ на кадр 11
         ┌───┐                        │ └───┘
      ┌──┤901│                        │ ┌───┐
      │  └┬──┘                        ├─┤223├─ на кадр 11
      │   │ошибка                     │ └───┘             Конец
      │  ┌┴┐                          │ ┌───┐              ┌──┐
... ──┴──┤9├────────── на кадр &+220 ─┼─┤224├──────────────┤11│
         └─┘rabbit                    │ └───┘              └──┘
                                      │ ┌───┐             сказки
                                      ├─┤225├─ на кадр 11
                                      │ └───┘
                                      │ ┌───┐
                                      ├─┤226├─ на кадр 11
                                      │ └───┘
                                      │ ┌───┐
                                      ├─┤227├─ на кадр 11
                                      │ └───┘
                                      │ ┌───┐
                                      ├─┤228├─ на кадр 11
                                      │ └───┘
                                      │ ┌───┐
                                      └─┤229├─ на кадр 11
                                        └───┘

                           Комментарии
     В кадре 1 читатель "погружается" в среду сказки:
            ┌───────────────────────────────────────┐
            │; Кадр N 1                             │
            │  Это Билл. Очень симпатичный и  добрый│
            │дракон. Cкоро Билл празднует свой  день│
            │рождения, а так как он учит английский,│
            │то непременно хочет написать  приглаше■│
            │ния на этом языке.                     │
            │&                                      │
            │  Кого пригласил Билл, вы  узнаете  да■│
            │льше, а сейчас включите  латинский  ре■│
            │гистр (CapsLock+Alt) и нажмите  клавишу│
            │Enter.                                 │
            └───────────────────────────────────────┘
     Счетчик в этом кадре устанавливается в ноль. В  дальнейшем
эта переменная будет использована для подсчета ошибок пользова■
теля.
     Далее следует цепочка из 8 однотипных циклических фрагмен■
тов:
                              ┌───┐
                           ┌──┤201│
                           │  └┬──┘
                           │   │ошибка
                           │  ┌┴┐
                          ─┴──┤2├──────
                              └─┘ cat

 В кадре 2 выдается задание на запись перевода слова "кот":
           ┌───────────────────────────────────────┐
           │ ; Кадр N 2                            │
           │   Первое приглашение  Билл  пишет коту│
           │ Сэму.                                 │
           │ &                                     │
           │   Как   написать   по-английски  слово│
           │ "кот"?                                │
           └───────────────────────────────────────┘
     Оборотная сторона карточки с кадром 2:
              ┌────────────────────────────┐
              │  Имя текста:  d2.txt       │
              │  Имя рисунка: d2.cut       │
              │  Имя мелодии: d2.mus       │
              │ ┌────────────────┬───────┐ │
              │ │Ключевое слово  │  Кадр │ │
              │ ├────────────────┼───────┤ │
              │ │cat             │3      │ │
              │ ├────────────────┼───────┤ │
              │ │CAT             │3      │ │
              │ ├────────────────┼───────┤ │
              │ │%               │201    │ │ "%" - переход
              │ └────────────────┴───────┘ │ по "иначе"
              │  Счетчик =                 │
              └────────────────────────────┘
     Если пользователь набирает верный ответ "cat" (или "CAT"),
управление передается на кадр 3, иначе - на кадр 201.  В  кадре
201 сообщается об ошибке:
           ┌───────────────────────────────────────┐
           │ ; Кадр N 201                          │
           │   Вы написали неверно! "Кот" по-англи■│
           │ йски будет "cat".                     │
           │ &                                     │
           │   Нажмите Enter и попробуйте снова!   │
           └───────────────────────────────────────┘
счетчик увеличивается на 1 и управление возвращается в кадр 2.
     Оборотная сторона карточки с кадром 201:
              ┌────────────────────────────┐
              │  Имя текста:  d201.txt     │
              │  Имя рисунка: d201.cut     │
              │  Имя мелодии: d201.mus     │
              │ ┌────────────────┬───────┐ │
              │ │Ключевое слово  │  Кадр │ │
              │ ├────────────────┼───────┤ │
              │ │@               │       │ │ "@" - возврат
              │ ├────────────────┼───────┤ │ управления в
              │ │                │       │ │ предыдущий кадр
              │ ├────────────────┼───────┤ │
              │ │                │       │ │
              │ └────────────────┴───────┘ │ Увеличение счетчика
              │  Счетчик +                 │ на один
              └────────────────────────────┘
     Когда читатель пройдет последний обучающий кадр 10,  счет■
чик будет иметь значение от 0 до 9 в зависимости от числа допу■
щенных ошибок. Управление передается на кадр с  номером  "счет■
чик+220", т.е. в зависимости  от  успехов  школьника  на  кадры
220-229. В кадрах 220-221 (ученик сделал не более одной ошибки)
присваивается звание "Профессор", в  кадрах  222-224  (школьник
сделал от 2 до 4 ошибок) - звание "Магистр", в  кадрах  225-227
(ученик сделал от 5 до 7 ошибок) - звание "Студент",  в  кадрах
228-229 (допущено более 7 ошибок) - звание "Бакалавр".
     Оборотная сторона карточки с кадром 10:
              ┌────────────────────────────┐
              │  Имя текста:  d10.txt      │
              │  Имя рисунка: d10.cut      │
              │  Имя мелодии: d10.mus      │
              │ ┌────────────────┬───────┐ │
              │ │Ключевое слово  │  Кадр │ │
              │ ├────────────────┼───────┤ │
              │ │cat             │&+220  │ │ Переход по значе■
              │ ├────────────────┼───────┤ │ нию счетчика плюс
              │ │CAT             │&+220  │ │ 220
              │ ├────────────────┼───────┤ │
              │ │%               │901    │ │ "%" - переход
              │ └────────────────┴───────┘ │ по "иначе"
              │  Счетчик =                 │
              └────────────────────────────┘

 3.2. Определитель персонажа сказки "Репка"

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

           Граф определителя персонажа сказки "Репка"
                         ┌─┐
                         │1│Завязка сюжета
                         └┬┘
                          │
                         ┌┴┐ человек?
          ┌──────────────┤2├──────────────┐
          │         да   └─┘  нет         │
          │                               │
         ┌┴┐мужчина?                     ┌┴┐животное?
 ┌───────┤3├──────┐               ┌──────┤4├──────┐
 │  да   └─┘ нет  │               │  да  └─┘ нет  │
 │                │               │               │
┌┴┐              ┌┴┐молодая?     ┌┴┐грызун       ┌┴┐
│5│          ┌───┤6├───┐     ┌───┤7├───┐         │8│
└─┘          │да └─┘нет│     │да └─┘нет│         └─┘
дед          │         │     │         │        репка
            ┌┴┐       ┌┴─┐  ┌┴─┐      ┌┴─┐
            │9│       │10│  │11│  ┌───┤12├──┐ виляет ли хвостом,
            └─┘       └──┘  └──┘  │   └──┘  │ когда радуется?
          внучка     бабка мышка  │да    нет│
                                 ┌┴─┐      ┌┴─┐
                                 │13│      │14│
                                 └──┘      └──┘
                                Жучка     кошка

     Завязка сюжета определителя в кадре 1:
            ┌───────────────────────────────────────┐
            │; Кадр N 1                             │
            │  Я - известный детектив Джо Великолеп■│
            │ный. Вы можете проверить мои способнос■│
            │ти хотя бы на примере сказки "Репка".  │
            │  Задумайте любого персонажа, а я,  за■│
            │давая наводящие вопросы, легко отгадаю.│
            │&                                      │
            │  Задумали? А  теперь  нажмите  клавишу│
            │Enter.                                 │
            └───────────────────────────────────────┘

     Приведенные здесь примеры сказок, наряду с  теми,  которые
описаны в [1], включены  в  поставочный  комплект  Конструктора
Сказок.

     Литература:
     1. Дуванов А.А., Первин Ю.А. Как сделать сказку. -  Инфор■
матика и образование, N3, 1993.
     2. Гольцман М.А., Первин Ю.А., Первина Н.А. Элементы музы■
кальной грамоты в курсе раннего обучения информатике, ч.1-3.  -
Информатика и образование, NN4-6, 1991.
     3. Первин Ю.А. Графический редактор Художник. Инструмента■
рий. - М., КУДИЦ, 1993.
     4. Первин Ю.А., Прохорова Н.А. Уроки иностранного языка на
базе программно-методической системы Magic Land. - В сб.  мате■
риалов IV Международной конференции  "Применение  новых  компь■
ютерных технологий в образовании", Троицк, 1993.
     5. Горвиц Ю.М. Детский компьютерный лагерь  в  Переславле-
Залесском. - Информатика и образование, N4, 1993.
     6. Дуванов А.А., Первин Ю.А. Конструктор  Сказок.  -  Ярос■
лавль, ИУУ, 1993.
