7.КАК СДЕЛАТЬ КУРС ДИНАМИЧНЫМ

Если Вы думаете, что рассказанное в предыдущих главах - это весь АДОНИС, то Вы ошибаетесь. Это была только присказка. Сказка - вот она. Речь пойдет о том, как можно делать текстовую и графическую мультипликацию, подсчитывать оценки в курсе и т.д.

Все эти возможности, конечно же, изложены в документации. Если Вы предпочитаете строгий подход и полное описание возможностей, то начните с нее. А мы здесь будем просто разбирать реальные примеры и заодно знакомиться с теми же самыми возможностями.

Лучше всего будет, если Вы перед тем, как изучать методичку далее, запустите АДОНИС и войдете в библиотеку PRILOG1.

А теперь запустите курсы Тмпл (текстовая мультипликация), Гмпл (графическая мультипликация), Меню (режим меню) в режиме обучения и пройдитесь по всем пунктам.

Посмотрели? Понравилось? А теперь давайте поучимся делать такие же штуки. Вам понадобится курс для всяческих упражнений - создайте библиотеку и зарезервируйте его. Назовите его в соответствии с Вашими вкусами (а я буду называть его незамысловато: Проба).

7.1.Немного теории

До сих пор Вы знали только три компоненты кадра: текстовую его часть, графическую его часть и эталонные ответы. Однако, в текстовой части кадра, помимо собственно текста, могут располагаться так называемые макроинструкции и команды авторского языка. Это специальные тексты, которые не показываются на экране во время обучения, но заставляют АДОНИС делать всякие интересные вещи. Они отделяются от текста кадра спецсимволами. Давайте познакомимся с некоторыми понятиями.

7.1.1.Что такое макроинструкции

Макроинструкции - это своего рода команды АДОНИСу. Встретив в тексте кадра макроинструкцию, АДОНИС не выводит ее на экран, а выполняет то, что в ней указано. Макроинструкция всегда отделяется от остального кадра символами "@". Вот пример. В текстовой части кадра написано:

--------------------

Уважаемый @ФАМИЛИЯ@, Вы ответили правильно на@КВ@ вопpосов из @КО@.Ваша оценка @ОЦЕНКА@

-------------------

Вместо макроинструкции @ФАМИЛИЯ@ подставится конкретная фамилия (АДОНИС всегда спрашивает ее в начале обучения). Макроинструкции @КВ@, @КО@, @ОЦЕНКА@ выдадут количество верных ответов, количество вопросов и автоматически формируемую оценку. Так что вид кадра на дисплее будет, например, такой:

Уважаемый И.И.Иванов, Вы ответили правильно на 5 вопросов из 30 . Ваша оценка 2

В АДОНИСе много разных макроинструкций, в том числе и весьма полезных. Их назначение и использование описаны в документации. Мы рассмотрим подробно только наиболее интересные макроинструкции.

7.1.2.Что такое переменные

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

То же самое Вы можете делать в АДОНИСе. Поля для заметок, или ПЕРЕМЕННЫЕ, обозначены латинскими буквами: A, B, C, D и так далее (вспомните самую обыкновенную алгебру, которую Вы проходили в школе). В любой момент Вы можете ПРИСВОИТЬ переменной новое значение, например А=7 или С=12. Здесь "=" не знак равенства. Это знак ПРИСВАИВАНИЯ. Присвоить - не значит украсть. Это значит СТЕРЕТЬ предыдущее значение переменной и ЗАПИСАТЬ туда новое.

Как Вы думаете, чему будет равно значение переменной D после таких манипуляций?

D=67

S=9

D=45

Конечно, сорока пяти.

В правой части может быть не только число. Там может быть и выражение. Чему в конце концом будет равно значение W?

W=9

L=7

U=12

W=L+U

Разумеется, 19-ти.

И последний вопрос. Что бы это значило?

S=S+1

Имеет ли это смысл? И, если имеет, то какой?

Да! Вы абсолютно правы! Эта запись, дикая и бессмысленная с точки зрения математики, в АДОНИСЕ (и вообще в программировании) имеет простой смысл: переменной S присваивается значение, равное предыдущему значению переменной S , плюс 1. Если, например, до этого S была равной 6, то теперь стала равной 7.

7.1.3.Что такое команды авторского языка

Теперь осталось понять, как Вы сможете задать АДОНИСу последовательность действий. Как, например, заставить его сделать так, чтобы слово "НАПРИМЕР!" продефилировало из одного края экрана в другой? Все это позволяют сделать команды авторского языка: одна и них подведет курсор в то место экрана, которое Вам нужно; другая организует повторение действий нужное количество раз и так далее. Сейчас Вы познакомитесь с некоторыми командами.

7.2.Как стереть часть кадра

7.2.1.Стираем снизу вверх

Как вы помните, в курсе Тмпл часть кадра ("Вянет лист, проходит лето..." Вспомнили?) стирается сверху: сначала вместо очередной строки появляется белая полоса, а потом строка закрашивается цветом фона. И так выше, выше и выше...

Вот как это сделано. Кроме кадра, в котором просто выведено четверостишие (кадр 50 курса Тмпл), есть еще один кадр:

----кадр 51 курса Тмпл-----------------------------------

@H1 __________ = _______________@

@H2 H3 = @

@ПКX = 14; Y=4;

A1:^ X,Y; O 1; ^ X,Y; O 2; ^ X,Y; O 3; X=X-1; E X=4 - A1;

-----------------------------------------------------------

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

Что здесь написано? Во-первых, скрытые поля. Это как бы кирпичики, фрагменты текста, каждый из которых Вы в любой момент можете показать в любом месте экрана.

Строки-кирпичики, из которых Вы собираете текст, Вы располагаете между символами @H @. ("H" от английского Hidden - скрытый). Скрытым оно называется потому, что, хотя и присутствует в кадре, не показывается на экране до тех пор, пока не выполнится команда вывода на экран. Как и всякая макроинструкция, скрытое поле "прячется" между символами @. Сразу поле символа H ставите метку скрытого поля, чтобы как-то их различать. В строке

@H1 __________ = _______________@

метка скрытого поля - 1, а в строке @H5 СИАИЕ ВЕ = @

метка скрытого поля - 5. Конечно, меткой может быть не только цифра, но и буква.

Итак, со скрытыми полями почти ясно: мы заготовили "кирпичики", осталось заставить их двигаться.

Для этого написана АДОНИС-программа. Программа начинается с макроинструкции @ПК@ и заканчивается знаком "!". Программа указывает АДОНИСу, в каком порядке, в какое место экрана и какие скрытые поля нужно выводить. Вот две первые команды: X=14; Y=4;

X и Y - это переменные. Они всего-навсего задают начальные координаты вывода на экран (X - номер строки, Y - номер столбца).

Идем дальше.

A1:^ X,Y; O 1; ^ X,Y; O 2; ^ X,Y; O 3; X=X-1; E X=4 - A1;

Бр-р-р-р! Чудовищная смесь! Давайте разобъем ее на отдельные команды и пронумеруем их; так будет понятнее:

1 A1:^ X,Y;

2 O 1;

3 ^ X,Y;

4 O 2;

5 ^ X,Y;

6 O 3;

7 X=X-1;

8 E X=4 - A1;

9 !;

Что делается в команде 1? A1: - это просто метка; мы пометили это место программы, чтобы к нему можно было возвращаться. Команда ^ X,Y просто-напросто перемещает курсор в строку X на столбец Y. Строки на экране нумеруются сверху вниз, значит, курсор переместится в четырнадцатую строку (помните, Х=14?) на 4-й столбец - это где-то в левом краю экрана. Теперь, если что-нибудь будет выводиться на экран, оно будет выводиться именно в строке 14, начиная со столбца 4. (Заметьте, кстати, что команды отделяются друг от друга точкой с запятой).

Займемся командой 2.

O 1 . Эта команда еще проще. Она выводит на экран содержимое скрытого поля с меткой 1. То есть - текст, состоящий из знака подчеркивания. Итак, текст появился в строке 14...

...чтобы тут же исчезнуть, ибо две следующие команды ^X, Y; O 2 (команды 3-4) записывают на его место строку из символов псевдографики "горизонтальная линия". Возникает эффект "подпрыгивания", так как эта линия расположена чуть выше, чем линия из символов подчеркивания. Но и эта строка немедленно заменяется пустой строкой, а делают это команды 5-6 (проверьте!).

Команда 7 задает новое положение курсора: на одну строку вверх.

Команда 8 проверяет, достигли ли мы 4-й строки. Если нет, то нужно снова выполнить все то же самое, то есть перейти на команду 1, помеченную как А1. Команда Е (если) записывается так:

Е условие - метка

То есть, если условие верно, то выполняется команда, помеченная меткой. А если неверно, то ПК-программы выполняется дальше.

Вот, собственно, и все. До тех пор, пока Х больше 4, пустая строка поднимается все выше и выше, стирая предыдущий текст. А команда "!" означает, что АДОНИС-программа закончилась.

Ну как? Понятно? Если нет, прочитайте пункт еще раз. А если да, попробуйте переписать программу так, чтобы текст стирался не снизу, а сверху и без "подпрыгивания" (так проще). А написав, сравните :

7.2.2.Стираем сверху вниз

-----кадр 52 курса Тмл-------------------------------

@H1 __________ = ______________@

@H2 = @

@ПКX = 4; Y=4;

A1:^ X,Y;O 1;^ X,Y;O 2;X=X+1; E X14 - A1;

------------------------------------------------------

7.2.3."Схлапываем" текст

Кадр 54 курса Тмпл демонстрирует "схлапывание" текста. Текст стирается одновременно сверху и снизу. Поэтому в программе имеется две переменных - Х показывает очередную нижнюю строку, а М - очередную верхнюю. Разберитесь самостоятельно с этой программой. Для удобства можете выписать команды в столбик.

---------кадр 54 курса Тмпл----------------------------

@H1 __________ = _____________@

@H2 H3 = @

@ПКX = 17; Y=25; M=7;

A1:^ X,Y;O 1;^ M,Y;O 2;^ X,Y;O 2;^ M,Y;O 1; ^ X,Y;O 3;^ M,Y;O 3;

X=X-1;M=M+1;E X=12 - A1;

--------------------------------------------------------

7.2.4."Разворачиваем" текст

Кадр 56 курса Тмпл показывает прием "развертки текста", когда он появляется строка за строкой, от центра вверх и вниз. Разберите и этот пример. Здесь есть одно существенное отличие от предыдущих примеров: команды типа "О А=А" или "О В=В". Дело в том, что до этого мы писали в команде "О" конкретные метки скрытых полей: А, В, 3, 5 и так далее. Это удобно, если мы выводим командой одно и то же поле. А если разные? Запись О А=А означает, что выводится не поле А, а поле, номер которого содержится в переменной А. Например, если А в данный момент равно 4, то выведется поле 4.

-------кадр 56 курса Тмпл---------------------------------

@H1 ПЕ ИАЕ = ее @

@H2 = @

@H3 ЕИ ЖИ А, = м

@

@H4 = @

@H5 В ЕГ ЗЕЕ = Потому,

@

@H6 = @

@H7 И БЕЗ Г = же на-

@

@H8 = @

@H9 ДИ ЗА ГАИ = . @

@H8 = @

@ПКX = 11; Y=12; N=24; A=4; B=5;

A1:^ X,N;O A=A;^ Y,N;O B=B; A=A-1; B=B+1; X=X-1; Y=Y+1;

E X=7 - A1;!;

-----------------------------------------------------------

Кстати, обратите внимание на некоторые вроде бы излишества программы. Левый край текста расположен в столбце 24. Казалось бы, почему не написать так:

X=11; Y=12; A=4; B=5; A1:^ X,24;O A=A;^ Y,24;O B=B; A=A-1;

B=B+1; X=X-1; Y=Y+1; E X=7 - A1;!;

А авторы зачем-то вводят переменную N, присваивают ей значение 24, а потом используют не 24, а N. Им что, больше заняться нечем?

Как раз наоборот: авторы программы сэкономили свое время и усилия. Представьте себе, что Вам понадобилось переместить текст из 24 столбца в 29-й. В каком случае больше работы? В первой, "сложной" программе - всего один символ: 4 на 9. Во второй, "простой" - то же самое, но два раза. Казалось бы, ненамного больше. Но ведь это весьма простая и маленькая программа; в реальной жизни придется из менять куда больше. И, что самое главное, Вам наверняка придется программу менять. Оператор АДОНИСа работает, как художник: мазок, еще мазок... не понравилось... сдвинем... изменим текст... вот теперь, вроде неплохо... А раз заранее известно, что кадр придется менять, то уж постарайтесь сделать так, чтобы менять его было просто.

И, наконец, последний пример :

@H1 ПКX = 12; Y=45; A1:^ X,Y;O 1;Y=Y+1;E Y67 - A1; Y=45; X=X+2;E

X18 - A1;

7.3.Как заставить текст двигаться

7.3.1.Пример с "Например"

Вспомните то место в курсе Тмпл, где слово "НАПРИМЕР!" пересекает экран справа налево сверху вниз, а внизу начинает менять яркость своих букв. Вот кадр 5, в котором все это и происходит (он почти полностью совпадает кадром в АДОНИСе; только я более яркие буквы написал прописными буквами, а менее яркие - строчными):

-----кадр 5 Тмпл-----------------------------------------

@HS H1 HC НА = мер

! @ @HD НАпример

! @ @HE НАПример

! @

@ПКX = 3; Y=65; A1:^ X,Y; O A;^ X,Y;O S; X=X+1; Y=Y-2; EX18-A1;

^ 19,33;O A;^ 20,32;O 1; % 1;^ X,Y;O C;^ 19,33;O D;^19,33;OE;^ 19,33;O

F;^ 19,33;O J; ^ 19,33;O I; ^ 19,33;O K;^ 19,33;OL;^ 19,33;O M;^ 19,33;O

N;!;

----------------------------------------------------------

Что делает каждая группа команд?

X=3; Y=65; A1:^ X,Y; O A;^ X,Y;O S; X=X+1; Y=Y-2; E X18- A1; Текст " НАПРИМЕР ! " появился в правом верхнем углу экрана и стал двигаться вниз и влево.

Теперь, думается, Вы запросто разберетесь, что делают эти вот команды (команда %1 просто дает задержку в одну минуту. Кстати, как Вы думаете, что сделает команда %8 ?)

% 1;^ X,Y;O C;^ 19,33;O D;^ 19,33;O E;^ 19,33;O F;

^ 19,33;O J;^ 19,33;O I;

^ 19,33;O K;^ 19,33;O L;^ 19,33;O M;^ 19,33;O N;!;

Упражнение. Войдите в курс Проба, запишите в нем эту программу и переделайте ее, чтобы слово "Ай да я" продефилировало из левого верхнего угла экрана в правый нижний.

7.3.2.Ту-ту, поехали

А если использовать символы псевдографики, то можно сделать даже движение рисунка. Войдите опять в курс Тмпл и дойдите до того места, где внизу экрана едет не то паровозик, не то трактор.

---- кадр 7 курса Тмпл----------------------------------

@H1 -- H3 = --@ @H5 ____@

@H2 -- H4 = -- @

@ПКX = 23; Y=0; Z=1; F=22; A2:^ X,Y; O Z=Z;^ F,Y; O 5; Y=Y+1; Z=Z+1;

E Z4 Z=1; E Y- A2;!;

---------------------------------------------------------

Собственно, все команды Вам знакомы. Есть пять скрытых полей, четыре из которых (1-4) - это различные фазы движения колес, а 5-е - это крыша. X и Y - как всегда, номера строки и столбца на экране (заметьте, что в программе меняется только номер столбца). Переменная Z отсчитывает номер фазы. Команда O Z=Z означает, что выводится не скрытое поле Z, а скрытое поле, номер которого равен Z. Итак, по команде O Z=Z едут колеса, а по команде O 5 едет... ...правильно, крыша! Как только цикл прошел от первой фазы до четвертой, номер фазы опять становится равным единице (предпоследняя команда).

В следующем кадре (кадре 8) стирается борозда на экране, проведенная трактором-паровозом:

------кадр 8 курса Тмпл---------------------------------

@H1 ПКX = 19; Y=0; A1:^ X,Y;O 1;X=X+1;E X23 - A1; X=23; Y=19;A2:^

X,Y;O 1;X=X-1;E X=19 - A2; X=19; Y=39;A3:^ X,Y;O 1;X=X+1;E

X23 - A3; X=23; Y=59;A4:^ X,Y;O 1;X=X-1;E X=19 - A4;

--------------------------------------------------------

Упражнение. Разберитесь, как работает эта программа.

7.4.Как построить меню

Сразу, как Вы только начинаете работать с Тмпл, на экране появляется меню.

Как оно создается? Вот текст кадра 1 курса Тмпл (я только немного обрезал его справа и снизу)

----- кадр 1 Тмпл -----------------------------------------

Текстовая МУЛЬТИПЛИКАЦИЯ @МЕТКА@

1. Cтирание текста в кадре.

2. Движение текста в кадре.

3. Иные возможности.

4. Выход.

-----------------------------------------------------------

Это самый обыкновенный текстовый кадр. Не совсем понятно, правда, что означает @МЕТКА@. А это как раз и есть одна из макроинструкций. Макроинструкция МЕТКА говорит АДОНИСу о том, что если в каком-нибудь кадре будет нажата клавиша [Esc], то нужно перейти именно к этому кадру: кадру 1 курса Тмпл. Как Вы видите, макроинструкции заключаются между символами @. Это сделано специально, чтобы АДОНИС мог отличить текст, который нужно показывать в кадре, от макроинструкций.

Итак, в кадре 1 мы вывели на экран картинку с меню. Но неясно, как сделать, чтобы маркер (светящаяся полоса) двигался по пунктам меню. Неясно также, как АДОНИС узнает, какой пункт выбран обучаемым.

Все это содержится в кадре 2 курса Тмпл. Вообще говоря, все можно было разместить в одном кадре, но тогда не получился бы красивый фон из символов псевдографики. Если все поле заполнено символами псевдографики, куда девать макроинструкции? А если поместить в кадр макроинструкции, на этих местах будут дыры в фоне из псевдографики. Куда ни кинь, а всюду клин, и все из-за того, что авторы АДОНИСа почему-то решили размещать макроинструкции там же, где и текст кадра. Итак, в этом примере меню формируется в два захода. Кадры 1 и 2 показываются один за другим без задержки и возникает впечатление, что это один кадр.

-------кадр 2 Тмпл ----------------------------------------

@S1 1. СИАИЕ = ста в кадре. $@

@S2 2. ДВИЖЕИ = екста в кадре. $@

@S3 3. ИЕ ВЗЖ = ти. $@

@S4 4. ВД. = $@

@O1@

@O2@

@O3@

@O4@ -----------------------------------------------------------

Вы видите еще одну макроинструкцию: @sn...$@. В любом месте экрана Вы можете написать очередную строку меню, снабдив ее слева символами @s и номером, а справа символами $@. Затем Вы ставите в тех местах экрана, куда нужно вывести нужную строку, макроинструкцию @n@. Именно туда выведутся соответствующие строки меню, а первое из полей подсветится. Итак, вроде все ясно. Или не все? О чем я умолчал?

Правильно! Я не сказал о том, как организовать переходы к нужным кадрам, когда обучаемый выберет нужный ему пункт меню. А вот это-то как раз очень просто. Когда обучаемый выбирает строку из меню, ее номер и поступает в АДОНИС в качестве ответа.

Вот и все. Вот так просто. Вы разочарованы? Или воодушевлены? Войдите в курс Проба и попробуйте сами сделать меню, сформировав кадр:

--------------

А и Б сидели на трубе.

А упало, Б пропало.

Кто остался на трубе? Выберите правильный ответ.

А

Б

Никто

И

--------------


© Алексей Бабий 1992