Глава 5 - удалить
-c1E
+\/d
ГЛАВА V. ГРАФИЧЕСКИЕ СРЕДСТВА MSX-BASIC
-
-
+\/d-
Лучше один раз увидеть, чем сто раз услышать.
Пословица
-
До появления цветной машинной графики результаты работы компьютера бы-
ли трудны для восприятия. Важная информация терялась среди второстепенной.
Машинные игры, например, больше напоминали утомительную работу. Одной из
В разделах V.1-V.8 мы будем говорить о графических средствах ПЭВМ се-
рии MSX-1, которые для компьютеров серии MSX-2 изменениям не подверглись!
-
-
V.1. ОПЕРАТОР SCREEN В ПРОСТЕЙШЕМ СЛУЧАЕ
(для компьютера MSX-1)
-
На компьютерах серии MSX-1 существуют четыре режима работы дисплея:два
т е к с т о в ы х (символьных) режима и два г р а ф и ч е с к и х, служа-
щих для индикации соответственно текстовой (символьной) и графической ин-
тем высвечивания точек различным цветом.
Переключение с одного режима работы на другой (или, как говорят, "с од-
ного экрана на другой") осуществляется оператором
- SCREEN n
+ SCREEN n ,
где: SCREEN("screen"-"экран") - служебное слово;
n - арифметическое выражение, целая часть значения которого должна
принадлежать отрезку [0,3]; этот параметр указывает режим работы дисплея:
SCREEN0. Этот режим обычно используется для ввода программ или для работы
с программами редактирования текстов.
Ясно,что в режиме высокого разрешения экран разбивается на большее чис-
-ло точек, чем в режиме низкого разрешения. Вследствие этого, в первом слу-
+ло точек, чем в режиме низкого разрешения. Вследствие этого в первом слу-
чае точки оказываются гораздо меньшего размера,благодаря чему изображение
может содержать существенно большее число деталей.
Отметим, что т о л ь к о в символьных режимах допустимо применение
Любая пара целых чисел (X,Y) в диапазоне 0≤X≤255, 0≤Y≤191, задает на
графических экранах SCREEN2 и SCREEN3 точку, однако учтите, что в режиме
SCREEN3 блок размером 4╳4 точек создает изображение одной "точки",поэтому
-фактические размеры экрана SCREEN3 - 64╳48 укрупненных "точек"(см. рис.1).
- Для сравнения, стандартный телевизионный монитор (телевизор) имеет раз-
+фактические размеры экрана SCREEN3 - 64╳48 укрупненных "точек"(см. рис.3).
+ Для сравнения: стандартный телевизионный монитор (телевизор) имеет раз-
решающую способность экрана 512╳256 точек,а профессиональная микроЭВМ фир-
мы Tektronix (модель 4054) имеет экран с разрешающей способностью
4096╳3125 точек.
-
0 255 0 63
0┌───────────────────┐──▶X 0┌───────────────────┐──▶X
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
191│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ 47│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
▼ Y ▼ Y
-
- Р и с. 1
-
- Отметим, что система координат, изображенная на рис.1, используется
+ Р и с. 3
+ Отметим, что система координат, изображенная на рис.3, используется
также в таких микроЭВМ, как APPLE, TRS-80, IBM, ATARI.
В любой момент времени одна из точек (α,β) экрана находится в особом
состоянии или, как говорят, отмечена г р а ф и ч е с к и м к у р с о -
Заметим, что текущие координаты X и Y графического курсора можно опре-
делить в режиме SCREEN0 или SCREEN1 при помощи команды (оператора)
PRINT PEEK(&HFCB3);PEEK(&HFCB5) .
-
П р и м е ч а н и е:
- 1) При включении питания компьютера, неявно выполняется оператор
+ 1) При включении питания компьютера неявно выполняется оператор
SCREEN 0.
2) При вводе оператора SCREEN n (n=0,1,2,3) всегда очищается экран.
3) В прямом режиме Вы находитесь в SCREEN 0 или SCREEN 1. Возвращаясь
в прямой режим, Вы снова перейдете в экран SCREEN 0 или в SCREEN 1,в зави-
-симости от последнего выполненного оператора. Соответственно,ввод команды
+симости от последнего выполненного оператора. Соответственно ввод команды
SCREEN 2 в прямом режиме очищает экран перед возвратом в режимы SCREEN 0
или SCREEN 1.
-
-
V.2. ОПЕРАТОР WIDTH . ОПЕРАТОРЫ KEY OFF и KEY ON
-
Оператор WIDTH используется для установки ширины экрана дисплея в сим-
вольных режимах SCREEN 0 и SCREEN 1 (каждому режиму может соответствовать
своя ширина экрана).
- Синтаксис оператора: WIDTH α
+ Синтаксис оператора: WIDTH α ,
где: WIDTH("width"-"ширина") - служебное слово;
α - арифметическое выражение, целая часть значения которого должна
принадлежать отрезку [1,40] для режима SCREEN0 или отрезку [1,32] для ре-
─────────── 10 WIDTH 1:?"Проверка":FOR I=1 TO 180:NEXT
20 WIDTH 40:?:?:?:?:?TAB(15);"Проверка"
30 FOR I=1 TO 180:NEXT:GOTO 10
-
Отметим, что оператор WIDTH является и командой непосредственного режи-
ма. Например, для возвращения к "обычной" ширине экрана используйте коман-
ду WIDTH 39 или команду WIDTH 29 .
мент оператора WIDTH должен лежать в диапазоне от 1 до 80 для компьютеров
серии MSX-2).
В результате выполнения оператора
- KEY OFF
+ KEY OFF ,
где KEY OFF ("key"-"клавиша") - служебное слово,
из 24-й строки символьных экранов SCREEN0 и SCREEN 1 убирается индикация
значений функциональных клавиш F1-F10. Тем самым эта строка становится до-
ступной для ввода информации (размер экрана увеличивается на одну строку).
-
П р и м е р: 10 KEY OFF:LOCATE 5,23
─────────── 20 PRINT "Проверка KEY OFF"
-
Оператор KEY ON
отменяет действие оператора KEY OFF и отводит 24-ю строку экрана для ин-
дикации значений функциональных клавиш F1-F10.
В этой строке удобно показывать вспомогательную информацию, т.к. она в
отличие от других не участвует в вертикальном сдвиге содержимого экрана!
-
-
V.3. УПРАВЛЕНИЕ ТЕКСТОВЫМ КУРСОРОМ
-
В данном разделе речь пойдет об операторе LOCATE установки текстового
курсора "█" (не графического!) и функциях POS(α), LPOS(α), CSRLIN управ-
ления текстовым курсором.
-
-
- V.3.1. О п е р а т о р LOCATE . Ф у н к ц и я CSRLIN .
+ О п е р а т о р LOCATE . Ф у н к ц и я CSRLIN .
Ф у н к ц и и POS(α) и LPOS(α)
-
Синтаксис оператора LOCATE:
- LOCATE [X][,Y][,α]
+ LOCATE [X][,Y][,α] ,
где: LOCATE("to locate"-"устанавливать") - служебное слово;
X - арифметическое выражение,целая часть значения которого задает но-
мер экранного столбца, в котором находится курсор (столбцы нумеруются сле-
"Illegal function call"
("Н е п р а в и л ь н ы й в ы з о в ф у н к ц и и").
Любой параметр оператора LOCATE может быть опущен,но запятые(запятая!),
-определяющие его позицию, обязательно должны присутствовать. Если X,или Y,
+определяющие его позицию, обязательно должны присутствовать. Если X или Y,
или α опущены, то сохраняются их предыдущие значения.Примеры записи опера-
тора:
LOCATE 25,10,1 LOCATE 15,,1 LOCATE 9 LOCATE ,,1
Оператор LOCATE перемещает курсор из текущей позиции в позицию (X,Y).
Учтите, что данный оператор позволяет управлять курсором т о л ь к о в
символьных экранах SCREEN0 и SCREEN1!
-
П р и м е р ы: 1) 10 LOCATE 15,15,0 2) 10 LOCATE 15,15,1
───────────── 20 FOR I=1 TO 300:NEXT 20 FOR I=1 TO 300:NEXT
-
Если используются строка или столбец с номерами,большими,чем максималь-
но отображаемые,но меньшими 255,то ошибки не произойдет,но курсор перемес-
тится на максимально возможную позицию экрана дисплея в этом направлении.
-
3) NEW 4) NEW
Ok Ok
10 CLS:LOCATE 5,3 3 CLS'Вначале очистим экран!
·····█ ◀── 6 столбец 40 FOR I=1 TO 400:NEXT
Компьютер ждет ввода символа! 50 LOCATE ,1,1
60 FOR I=1 TO 400:NEXT:GOTO 3
-
С помощью оператора LOCATE можно выводить информацию на текстовый эк-
ран, начиная с нужного места.
-
5) NEW 7) NEW
Ok Ok
10 CLS:LOCATE 3,2 10 CLS:LOCATE 1,1
···· 40 ? CHR$(255);"А теперь
···Смотри: █ здесь!"
Ok run
-
6) NEW ···
Ok ·█Я здесь!
10 LOCATE 14,15 ··█А теперь здесь!
20 ?PEEK(&HF3DD);PEEK(&HF3DC) Ok
-
- Функция CSRLIN
+ Функция CSRLIN ,
где CSRLIN ("Cursor ScReen LINe"-"строка курсора") - служебное слово, воз-
вращает в символьных экранах SCREEN0 и SCREEN1 номер экранной строки,в ко-
торой находится курсор.
Учтите, что "верхняя"строка имеет номер нуль,"нижняя" имеет номер или
22 или 23 (в зависимости от того,используется ли эта строка для индикации
значений функциональных клавиш).
-
П р и м е р: табулирование функции y=x² на отрезке [A,B] с шагом H с
─────────── предотвращением непрерывного вертикального движения
(скроллинга) результатов табулирования по экрану (информация движется по-
странично, "высота" страницы - 22 строки). Напомним: с к р о л л и н г -
рулонный режим перемещения строк снизу вверх или сверху вниз.
-
NEW
Ok
10 CLS:INPUT A,B,H:FOR X=A TO B STEP H' Оператор CLS важен!
X,X^2
30 NEXTX:FORI=(22-CSRLIN)*POS(0)TO(23-CSRLIN)*39:?CHR$(32);:NEXT:A$=
INPUT$(1)
-
-
- Функция POS(α)
+ Функция POS(α) ,
где: POS("POSition"-"позиция") - служебное слово;
α - числовая константа (при выполнении функции не используется, но
обязательно должна быть указана при обращении); возвращает в символьных
Например:
25 IF LPOS(0)>10 THEN LPRINT X ELSE LPRINT TAB(10):LPRINT X
-
-
V.4. БАЗОВЫЕ ГРАФИЧЕСКИЕ ОПЕРАТОРЫ MSX-BASIC
-
- Я думаю, что чертежи очень полезное средство
- против неопределенности слов.
- Г.В.Лейбниц
-
-
+ Я думаю, что чертежи - очень полезное сред-
+ ство против неопределенности слов.
+ Г.Лейбниц
V.4.1. О п е р а т о р COLOR д л я к о м п ь ю т е р а MSX-1
-
На экране дисплея можно выделить три отдельные области: передний план,
фон и бордюр. П е р е д н и й п л а н (изображение) - область,где распо-
лагаются цифровые и текстовые данные и графические изображения,которые на-
Оператор COLOR позволяет задавать различные цвета фона, бордюра и изо-
бражения,выводимого на передний план.
Его синтаксис:
- COLOR [I],[F][,B]
+ COLOR [I],[F][,B] ,
где: COLOR("color"-"цвет") - служебное слово;
I - арифметическое выражение, целая часть значения которого задает
код цвета изображения (по умолчанию I=15);
Приведем коды 15 возможных цветов для многоцветных дисплеев. Для моно-
хроматических (от греч."μоvoσ"-"один") дисплеев эти коды задают различные
оттенки черного и зеленого цветов.
-
0:прозрачный; 5:светло-голубой; 10:темно-желтый;
1:черный; 6:темно-красный; 11:светло-желтый;
2:зеленый; 7:голубой; 12:темно-зеленый;
3:светло-зеленый; 8:красный; 13:васильковый;
4:темно-голубой; 9:светло-красный; 14:серый; 15:белый.
-
- Отметим, что объект прозрачного цвета всегда преобретает цвет бордюра,
+ Отметим, что объект прозрачного цвета всегда приобретает цвет бордюра,
а бордюр "нулевого" цвета - черный (поэтому возможных цветов не 16, а 15)!
Полное отсутствие параметров в операторе COLOR приводит к появлению на
экране дисплея сообщения об ошибке
пую" в непосредственном режиме наберите, например, команду COLOR 1,15 или
COLOR 15,4 и нажмите клавишу "RETURN". На экране появится информация,кото-
рая ранее была "невидима"!
-
П р и м е р. Программа, позволяющая подобрать удобные сочетания цветов
─────────── изображения, фона и бордюра.
Ok
10 SCREEN 1:FOR I=1 TO 15:FOR F=1 TO 15:FOR B=1 TO 15
20 COLOR I,F,B:LOCATE 9,10:PRINT I;F;B
30 FOR K=1 TO 1000:NEXT:NEXT:NEXT:NEXT
-
В любой момент времени Вы можете,нажав на клавишу "STOP" Вашего компью-
тера, приостановить работу программы и выписать понравившуюся Вам комбина-
цию значений I, F, B, которая выводится на экран дисплея.
-
З а м е ч а н и е. Если Вы прервали программу,используя клавиши CTRL+STOP,
то можете тут же возвратить начальные значения цветов нажатием клавиш
SHIFT+F1 (только для компьютеров серии MSX-2)!
α) во время выполнения оператора COLOR в режиме SCREEN 2 изменяется
только цвет бордюра, а не цвет изображения или фона;
β) цвет фона изменится только в том случае,если после выполнения опера-
-тора COLOR будет выполнен оператор CLS (см. ниже раздел 4.3);
+тора COLOR будет выполнен оператор CLS (см. ниже раздел V.4.3);
Для проверки вышесказанного сравните следующие программы:
10 SCREEN 2:COLOR 1,15,6
фона и бордюра соответственно можно получить, выполнив в непосредственном
режиме команду PRINT PEEK(&HF3E9);PEEK(&HF3EA);PEEK(&HF3EB)
-
-
V.4.2. О п е р а т о р COLOR д л я к о м п ь ю т е р а MSX-2
-
- П а л и т р а (от франц."palette"-"пластинка"), четырехугольная
+ П а л и т р а (от франц."palette"-"пластинка")- четырехугольная
или овальная деревянная дощечка, металлическая или фарфоровая
пластинка для смешивания красок; подбор цветов, которыми пользу-
- ется художник. Советский Энциклопедический Словарь
-
-
- Известно, что цвета, (пронумерованные в MSX-BASIC от 0 до 15),содержат
+ ется художник.
+ Советский Энциклопедический Словарь
+ Известно, что цвета (пронумерованные в MSX-BASIC от 0 до 15) содержат
к р а с н ы й ("Red"), з е л е н ы й ("Green") и с и н и й ("Blue") цвет
в определенных пропорциях.
В приведенной ниже таблице Вы сможете почерпнуть сведения о пропорци-
ях RGB в изначально установленных цветах экрана дисплея:
-
┌───────┬───────────────┬───┬───┬───┐
│ Номер │ Цвет │ R │ G │ B │
├───────┼───────────────┼───┼───┼───┤
│ 14 │ Серый │ 5 │ 5 │ 5 │
│ 15 │ Белый │ 7 │ 7 │ 7 │
└───────┴───────────────┴───┴───┴───┘
-
В компьютере серии MSX-2 эти пропорции могут быть изменены при помощи
-оператора: COLOR=(C,R,G,B)
+оператора: COLOR=(C,R,G,B) ,
где: C - арифметическое выражение, целая часть значения которого опре-
деляет номер и з м е н я е м о г о цвета;
R,G,B - арифметические выражения, целые части значений которых опре-
деляют соответственно пропорции красного, зеленого и синего цветов.
Последние три числа должны находиться в диапазоне от 0 до 7.
- Например, пусть значением C является 4 (текущий цвет фона) и попробуй-
+ Например, пусть значением C является 4 (текущий цвет фона), и попробуй-
те изменить для него пропорции RGB. Так, для получения чистого красного
цвета фона, введите: COLOR=(4,7,0,0)
Таким образом, можно получить 512 различных оттенков каждого цвета.
л и т р ы" вместо термина "номер цвета", принятого на компьютерах серии
MSX-1.
Отметим, что оператор SCREEN устанавливает палитры в начальное положе-
-ние. Однако, для установки палитры без стирания экрана используйте опера-
+ние. Однако для установки палитры без стирания экрана используйте опера-
тор: COLOR=NEW или COLOR
┌────────────────────────────────────────────────────────────────┐
│ Обратите внимание на то, что палитра не может быть изменена │
здесь являются запрещенными!
-
V.4.3. О п е р а т о р CLS
-
Существует быстрый способ получить чистый(свободный от изображения) эк-
ран дисплея определенного цвета. Оператор
- CLS
+ CLS ,
где CLS("to CLear Screen"-"очищать экран") - служебное слово; окрашивает
весь экран цветом фона,не меняя положения графического курсора в графичес-
ких режимах (в символьных режимах после действия CLS курсор помещается в
ного" программирования! Так оратор откашливается перед выступлением, забо-
тясь о том, чтобы все слова донести до слушателей.
- V.4.4. О п е р а т о р PSET . О п е р а т о р PRESET
+ V.4.4. О п е р а т о р PSET . О п е р а т о р PRESET
Первая форма записи оператора PSET:
- I. PSET[@](Х,У)[,С]
+ I. PSET[@](Х,У)[,С] ,
где: PSET("to SET Point"-"установить точку") - служебное слово;
X - арифметическое выражение, целая часть значения которого опреде-
ляет x-координату точки (номер колонки);
выполнение; он используется только для совместимости с другими версиями
языка BASIC.
При попытке использовать оператор PSET в символьных экранах SCREEN 0 и
-SCREEN 1, компьютер сообщает об ошибке:
+SCREEN 1 компьютер сообщает об ошибке:
"Illegal function call" .
Целые части значений X и Y должны принадлежать отрезку [-32768,32767],
а целая часть значения C должна находиться на отрезке [0,15];по умолчанию
20 CIRCLE(90,90),7,11:PAINT STEP(0,0),11:PSET(A,90),8
30 GOTO 30
Дело в том, что каждая из 192 линий экрана SCREEN 2 разбивается на 32
-8-ми точечных сегмента (8-ми пиксельных сегмента). Каждому сегменту "при-
-сваивается" только д в а цвета - цвет изображения и цвет фона. Отобража-
-емый на экране пиксель имеет цвет изображения, тогда как отсутствие пиксе-
-ля означает появление пикселя, имеющего цвет фона. Следовательно,для вось-
-мипиксельного сегмента возможно наличие всего д в у х цветов.
+восьмиточечных (восьмипиксельных) сегмента. Каждому сегменту "присваивает-
+ся" только д в а цвета - цвет изображения и цвет фона. Отображаемый на
+экране пиксель имеет цвет изображения, тогда как отсутствие пикселя озна-
+чает появление пикселя, имеющего цвет фона. Следовательно, для восьмипик-
+сельного сегмента возможно наличие всего д в у х цветов.
Для режима SCREEN3 каждый блок точек 4╳4 создает на экране изображение
одной"точки", поэтому любое изменение цвета"маленькой" точки в этом блоке
Итак, вследствие неизбежного побочного эффекта "перетекания цветов",Вы
должны быть очень аккуратны, применяя оператор PSET, так как при этом лег-
ко можно изменить цвет уже нарисованной части изображения!
-
П р и м е р ы:
─────────────
1) построение графика параболы Y²=50·X, X≥0, Y≥0.
10 COLOR 1,15,8:SCREEN 2
20 FOR X=0 TO 255:PSET(X,191-SQR(50*X)):NEXT
30 GOTO 30
-
А теперь исключите оператор GOTO30. Обнаружили разницу при запуске?...
Думаем, что да! Запомните этот прием!
-
2) Ok
10 COLOR 1,15,8:SCREEN2:FOR T=0 TO 6.28*4 STEP .05:X=3*SIN(2*T):
Y=3*COS(3*T):PSET(44+10*X,96-15*Y),1
:E=25*COS(T)+25/2*COS(3*T):G=25*SIN(T)-25/2*SIN(3*T):PSET(125+E,
130+G):NEXT
80 GOTO 80'Замените эту строку на 80 A$=INPUT$(1) !
-
3) NEW
Ok
10 INPUT A,B,K,N:COLOR 1,15,8:SCREEN2
20 FOR T=0 TO 6.28 STEP.05:R=A*(1+COS(K*T)^N)+B*SIN(K*T)^N:X=R*C
OS(T):Y=R*SIN(T):PSET(128+X,96+Y):NEXT
40 GOTO 40 'Замените эту строку на 40 A$=INPUT$(1) !
-
II. Вторая форма записи оператора PSET:
- PSET[@]STEP(X,Y)[,C]
+ PSET[@]STEP(X,Y)[,C] ,
где: 1) STEP ("step"-"шаг") - служебное слово;
2) @,X,Y,C имеют тот же смысл, что и в пункте α).
Элемент конструкции STEP(X,Y) задает смещение координат изображаемой
30 FOR X=0 TO 15:PSET STEP(10,0),X:NEXT ' SCREEN2 !
60 GOTO60 'Подумайте, почему в режиме SCREEN3 расстояние между
точками различно?!
-
2) построение графика функции y=0.77x+14·sin(x/6),-128≤x≤127 (объяс-
ните назначение операторов PSET(0,95) и PSET(128,0)).
10 COLOR 1,15,8:SCREEN 2:PSET(0,95):FOR J=0 TO 255:PSET STEP(1,0
),1:NEXT:PSET(128,0):FOR J=1 TO 191:PSET STEP(0,1),1:NEXT:FOR I=
-128 TO 127:PSET(I+128,191/2-.77*I-14*SIN(I/6)),1:NEXT:B$=INPUT$
(1)
-
3) 10 CLS:INPUT"Введите Р (от 0 до 4) 5'Построение функциональных узоров
14.4)";Р 10 DEF FNF(X,Y)=SQR(X^2+Y^2)
20 COLOR 15,1,15:SCREEN3:E=0 20 SCREEN 3
PRESET[@](X,Y)[,C]
PRESET[@]STEP(X,Y)[,C]
Здесь элементы @, (X,Y), STEP(X,Y) и С имеют тот же смысл,что и в опе-
-раторе PSET, oднако,при выполнении оператора PRESET без параметра С точка
+раторе PSET, oднако при выполнении оператора PRESET без параметра С точка
с координатами (X,Y) "стирается", т.е. приобретает цвет фона.Если же пара-
метр С присутствует, то действия операторов PRESET и PSET идентичны.
-
П р и м е р. Отрезок, "бегущий" по экрану!
─────────── 10 INPUT"Длина отрезка(≤45)";A:COLOR 1,15,8:SCREEN 2
20 FOR K=A TO 300:PSET(K,95):PRESET(K-A,95):NEXT:GOTO 20
-
-
- 5.4.5. О п е р а т о р LINE
-
+ V.4.5. О п е р а т о р LINE
У точек бедных крошек,
Ни ручек нет, ни ножек.
Как же они, не пойму я,
Сцепляются в прямую?
Дж.А.Линдон
-
-
Оператор LINE позволяет изображать отрезки прямых и прямоугольники с
одновременной раскраской их требуемым цветом.
Синтаксис оператора LINE:
- LINE [@][[STEP](X,Y)]-[STEP](Z,T),[C][,B(или BF)]
+ LINE [@][[STEP](X,Y)]-[STEP](Z,T),[C][,B(или BF)] ,
где: LINE("line"-"линия") - служебное слово;
сочетания параметров (X,Y)-(Z,T) или STEP(X,Y)-STEP(Z,T) , или
(X,Y)-STEP(Z,T), или STEP(X,Y)-(Z,T) , или -(Z,T) , или -STEP(Z,T) за-
цветом, код которого определяется значением C;
@ - необязательный элемент оператора LINE, никак не влияющий на его
выполнение.
- Обращение к оператору LINE в режимах SCREEN0 или SCREEN1, вызовет со-
+ Обращение к оператору LINE в режимах SCREEN 0 или SCREEN 1 вызовет со-
общение об ошибке: "Illegal function call".
Если параметр C отсутствует,а параметр B (или BF) присутствует,то перед
ним обязательно ставятся д в е запятые. В этом случае рисунок имеет цвет,
заданный ранее оператором COLOR.
-
Рассмотрим три случая:
-
1. Параметр B (или BF) отсутствует.
В этом случае компьютер проводит на экране линию, имеющую цвет C и со-
единяющую точки α и β.
Примеры записи оператора:
LINE(3,17)-(10,20),4 LINE STEP(3,20)-(21,23)
LINE -(0,15),1 LINE STEP(10,20)-STEP(15,60)
-
П р и м е р ы:
─────────────
1) NEW
Ok
10 SCREEN 2:FOR X=-.5 TO .5 STEP.01:Y=1/(X^2-.05):K=K+2
40 LINE(K+25,Y+100)-(127,150):NEXT:A$=INPUT$(1)
-
2) NEW
Ok
10 K=8*ATN(1):SCREEN 2:PSET(128,96+80*COS(10))
20 FOR I=0TO K*6+.05 STEP.2:X=100*SIN(I):Y=80*COS(I+10)
40 LINE-(128+X,96+Y),1,B:NEXT:A$=INPUT$(1)
-
3) NEW
Ok
10 SCREEN2:XM=256:YM=191:XC=XM/2:YC=YM/2
140 FOR X=XM TO 0 STEP-1:C=INT(RND(1)*16):LINE(XC,YC)-(X,YM),C:NEXT
X:FOR Y=YM TO 0 STEP-1:C=INT(RND(1)*16):LINE(XC,YC)-(0,Y),C:NEXTY
220 GOTO 220
-
4) NEW
Ok
10'Построение линейчатых поверхностей ("ruled surface")
ND
370 X=120+.7*(FNX(I,J)-FNY(I,J)):Y=94-(.7*(FNX(I,J)+FNY(I,J))+.7*FN
Z(I,J)):RETURN '──▶
-
5) NEW
Ok
11 COLOR 15,4,4:SCREEN2:PI=3.14159:FORB=10TO 50 STEP 10
5*FI)^2:X=R*COS(FI)+256/2:Y=R*SIN(FI)+191/2
85 IF D=0THEN LINE(X,Y)-(X+1,Y+1),15 ELSE LINE-(X,Y),15
90 NEXT:NEXT:PAINT(4,104),15:A$=INPUT$(1)
-
Используя в операторе LINE пропуск координат первой точки ((X,Y) или
STEP(X,Y)), можно "подхватить"линию с точки, где "остановился" предыдущий
оператор, т.е.,например, связать прямые линии между собой в ломаную линию.
сования был приостановлен! Если же в операторе указан параметр STEP, то
заданные в круглых скобках координаты прибавляются к координатам послед-
ней упомянутой позиции графического курсора.
-
6) NEW
Ok
10 SCREEN2:PSET(115,95):GOSUB 100:END
100 RESTORE 1000:READ N:FOR I=1 TO N:READ X,Y
110 LINE -STEP(X,Y):NEXT:A$=INPUT$(1):END
1000 DATA 6,35,0,23,-35,-23,-35,-35,0,-23,35,22,35
-
"Относительный"вариант синтаксиса оператора LINE (с использованием па-
раметра STEP) позволяет рисовать фигуры в "относительных" координатах. За-
тем можно легко помещать один и тот же объект в различные места экрана,
указывая лишь его "начальную" точку!
-
7) Программа рисования пятиугольника, разделенного на сегменты. Заданы:
начальная точка (XB,YB), масштаб (S) и цвет (C).
NEW
130 LINE (XB,YB)-STEP(A*S,B*S),C:NEXT:RESTORE 170:FOR X=1 TO 5:READ
A,B:LINE-(A*S+XB,B*S+YB),C:NEXT:RETURN'──▶
170 DATA 10,2,6,10,-6,10,-10,-2,0,-10
-
Подумайте, какие изменения нужно внести в программу, чтобы на экране
компьютер изобразил "почти" правильный пятиугольник.
-
8) 5 INPUT "Введите Р=2,5,7,10,13";P:SCREEN2
10 RAD=60
20 FOR ANG%=0 TO 360 STEP P
85 LINE(X1,Y1)-(X2,Y2)
90 NEXT ANG%
100 GOTO 100
-
9) 10 SCREEN 2:N=18:DIM X(N),Y(N):R=99:DT=2*3.1415/N:T=0
70 FOR I=1 TO N:T=T+DT:X(I)=160+R*COS(T):Y(I)=100-R*SIN(T)
100 NEXT
110 FOR I=1 TO N-1:FOR J=I+1 TO N:LINE (X(I),Y(I))-(X(J),Y(J))
140 NEXT:NEXT
160 GOTO 160
-
10) 170 DIM X(3),Y(3),XD(3),YD(3)
180 SCREEN2:R=150:XL=100:YU=50:N=60
220 X(0)=XL:X(1)=XL+R:X(2)=XL+R:X(3)=XL
310 NEXT
320 FOR J=0 TO 3:X(J)=XD(J):Y(J)=YD(J):NEXT:NEXT
360 GOTO 360
-
11) 10 DIM X(3),Y(3),XD(3),YD(3):COLOR 1,15:SCREEN2
30 R=60:XL=10:YU=17
50 FOR K=1 TO 2:FOR L=1 TO 3
240 FOR J=0 TO 3:X(J)=XD(J):Y(J)=YD(J):NEXT:NEXT
290 XL=XL+R:NEXT:XL=10:YU=YU+R:NEXT
330 GOTO 330
-
12) И наконец, о "перетекании цветов". Сравните результаты работы двух
программ:
10 SCREEN 2 10 SCREEN 2
20 LINE(9,50)-(14,50),15 20 LINE(8,50)-(15,50)
30 LINE(12,40)-(12,60),1 30 LINE(12,40)-(12,60),1
40 GOTO 40 40 GOTO 40
-
2. Параметр В есть.
В этом случае компьютер рисует прямоугольник со сторонами цвета C, па-
-раллельными "экранным" осям координат,причем,если указаны две точки α и β,
-то они представляют собой противоположные вершины изображаемого прямоуго-
+раллельными "экранным" осям координат, причем, если указаны две точки α и
+β, они представляют собой противоположные вершины изображаемого прямоуго-
льника. Внутренняя часть прямоугольника не закрашивается. Если же указана
только вторая точка (не забудьте указать перед ней тире !), то в качестве
первой используется точка,изображенная или упомянутая в Вашей программе
последней.
-
13) α) 10 COLOR 1,11:SCREEN 2 β) 10 COLOR 1,11:SCREEN 2
20 LINE(8,10)-STEP(7,8),15,B 20 LINE(8,20)-STEP(3,8),15,B
30 LINE(16,10)-STEP(7,8),1,B 30 LINE(12,20)-STEP(11,8),1,B
30 LINE(20,30)-STEP(3,8),1,B
40 GOTO 40
В ы в о д: данные примеры совсем не означают, что невозможно создать
-многоцветные рисунки в режиме SCREEN 2. Однако, расположение элементов ри-
+многоцветные рисунки в режиме SCREEN 2. Однако расположение элементов ри-
сунка должно быть тщательно выверено!
При возникновении "конфликтов" между цветом линий и их расположением,
параметр BF действует точно так же, как и оператор PSET: он изображает
все "задействованные" пиксели, переустанавливает цвет изображения сегмен-
та, тогда как цвет фона остается неизменным.Чтобы проверить это,вернитесь
к программе, приведенной выше и замените параметр B на BF.
-
3. Параметр BF есть.
Компьютер, как и в случае β,изображает на экране дисплея прямоугольник,
но внутренняя часть его закрашивается цветом С.
-
П р и м е р ы [4]:
─────────────
14) 5 'Смещенные прямоугольники 15) 5' Вложенные прямоугольники
30 LINE(40+7*X,30+5*X)-(130+ 30 LINE(2+8*X,6+6*X)-(254-
7*X,90+5*X),15-X,BF:NEXT 8*X,185-6*X),15-X,BF:NEXT
50 GOTO 50 40 GOTO 40
-
16) 5 'Прямоугольники разных цветов
10 COLOR 1,15,8:SCREEN2:PSET(-4,160)
20 FOR X=0 TO15:LINE STEP(8,-130)-STEP(8,130),X,BF:NEXT
50 GOTO 50
-
-
V.4.6. О п е р а т о р CIRCLE
-
"Noli turbare CIRCilos meos!", - по преданию, Архимед
встретил этими словами римского солдата-завоевателя,
покушавшегося на его жизнь.
-
-
С помощью этого оператора компьютер изображает окружности,эллипсы или
их дуги (точнее, ту их часть, которая "умещается"на экране дисплея).
Синтаксис оператора CIRCLE:
- CIRCLE [@][STEP](X,Y),R,[C],[α],[β][,γ]
+ CIRCLE [@][STEP](X,Y),R,[C],[α],[β][,γ] ,
где: CIRCLE("circle"-"круг,окружность") - служебное слово;
@ - необязательный элемент оператора CIRCLE, никак не влияющий на
его выполнение;
Заметим, что если любой из параметров α,β является отрицательным,то ис-
пользуется его абсолютное значение; при этом соответствующий конец дуги
соединяется с центром линией радиуса (это необходимо при построении сек-
-торных диаграмм); к сожалению компьютер "не различает" значения парамет-
+торных диаграмм); к сожалению, компьютер "не различает" значения парамет-
ров α и β,равные (-0) и 0, однако его можно "обмануть",если вместо -0 ука-
зать, например, -0.001;
γ - арифметическое выражение, значение которого задает коэффициент
b) вертикальную полуось эллипса, если γ>1;
c) горизонтальную полуось эллипса, если γ<1.
Отметим, что любой необязательный параметр (STEP,C,α,β,γ) может быть
-опущен - однако, соответствующие запятые в записи оператора должны указы-
+опущен, однако соответствующие запятые в записи оператора должны указы-
вать на его отсутствие. После последнего параметра запятая не нужна.
В результате выполнения оператора CIRCLE компьютер нарисует эллипс(или
его дугу), после чего графический курсор переместится в точку (R,Y)! Одна-
│ 40 │-6.00│-6.28│ 1 │ │ 40 │ 0 │ 6.28│ 0.25│
│ 40 │ -.79│-2.36│ .3 │ │ 110 │ 0 │ 3.14│ 1 │
└─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┘
-
2) NEW
Ok
10 COLOR1,15,4:SCREEN2:LINE(30,10)-(220,180),1,BF
30 CIRCLE(125,95),75,15:FOR R=5TO70STEP5:CIRCLE(125,92.5),R,15:CIRCLE(
125,97.5),R,15:NEXT
100 GOTO 100
-
3) NEW
Ok
10 COLOR 1,15,8:SCREEN2:PSET(0,125):FOR K=1 TO 25:CIRCLE STEP(10,0),50
,4,0,3.14159:NEXT:PSET(0,160):FOR K=1 TO50:CIRCLE STEP(5,0),30,4:NEXT:
PSET(0,37):FOR K=1TO26 STEP.5:CIRCLE STEP(5,0),K,1:NEXT:A$=INPUT$(1)
-
4) NEW 5) NEW
Ok Ok
10 COLOR 1,15,8:SCREEN2 10 COLOR 1,15,8:SCREEN2:R=1
,95),80,C,,,E:NEXT .1:Y=P*SIN(I):CIRCLE(128,Y+
60 GOTO 60 95),R,,,,.2
60 GOTO 20
-
6) NEW 7) NEW
Ok Ok
5 '"Ползущий" эллипс 10 COLOR 1,15,8:SCREEN2
CIRCLE STEP(10,0),50,4,,,.5: 30 GOTO 30
CIRCLE STEP(0,0),50,15,,,.5:
NEXT:GOTO20
-
8) NEW
Ok
5 '"Вороне где-то бог послал кусочек сыру..."
20 CIRCLE(100,100),75,,-1,-1E-03,1.2
30 CIRCLE STEP(10,-5),75,,-1E-03,-1,1.2
50 PAINT(70,100):PAINT(130,80):B$=INPUT$(1)
-
9) NEW 10) NEW
Ok Ok
10 COLOR 1,15,8:SCREEN2:Q=3 10 COLOR 1,15,8:SCREEN2
30 CIRCLE(128,95),I 30 CIRCLE(128,95),I
40 IF I>88 THEN 50 ELSE 20 40 IF I>88 THEN50ELSE20
50 GOTO 50 50 GOTO 50
-
11) NEW
Ok
10 'Моделирование движения подпрыгивающего мяча [14].
130 LINE(0,YM)-(XM,YM):YN=YM-ABS(YN)-3:CIRCLE(X,Y),4,4:IF Y>186 THEN
KE=KE+2:CIRCLE(XN+10,YN),4,KE ELSE CIRCLE(XN+10,YN),4,KE
170 X=XN+10:Y=YN:NEXT XN:GOTO 100
-
12) NEW
Ok
10 COLOR 1,15,8:SCREEN2
30 CIRCLE(40+I*15,40+I*10),55-I*3,15-I,0,6.28:PAINT STEP(0,0),15-I
40 NEXT
50 GOTO 50
-
К сожалению, оператор CIRCLE не позволяет ориентировать эллипс под лю-
бым углом по отношению к горизонтальной оси. Если Вы хотите отобразить та-
кую кривую, воспользуйтесь следующим приемом:
-
NEW
Ok
10 SCREEN2:PI=4*ATN(1)
V.4.7. Ф у н к ц и я POINT . О п е р а т о р PAINT
-
Синтаксис функции POINT:
- POINT [STEP](X,Y)
+ POINT [STEP](X,Y) ,
где: POINT ("point"-"точка") - служебное слово;
X - арифметическое выражение, целая часть значения которого принад-
лежит отрезку [0,255] и задает x-координату точки; Y -арифметическое вы-
ражение, целая часть значения которого принадлежит отрезку [0,191] и зада-
ет y-координату точки;
- STEP(X,Y) определяет смещение кординат точки на X и Y соответственно
-относительно текущей позиции графического курсора.
+ STEP(X,Y) определяет смещение координат точки на X и Y соответствен-
+но относительно текущей позиции графического курсора.
Функция POINT в графическом режиме (SCREEN2, SCREEN3) возвращает код
цвета точки с координатами (X,Y),т.е. целое число, принадлежащее отрезку
[0,15]. На текстовом экране функция POINT всегда возвращает н у л ь .
β) определения цвета границы;
γ) определения, было ли столкновение движущегося на графическом экране
объекта с другим объектом, также находящимся на графическом экране.
-
П р и м е р ы:
─────────────
1) NEW
20 FOR K=10TO295:PSET(K,95):PRESET(K-10,95):FORI=1TO19:NEXT:IF POIN
T(150,95)=1 THEN FORI=1TO1000:NEXT:SCREEN0:LOCATE 11,12:PRINT"Столк
новение":END ELSE NEXT
-
А теперь замените в условии оператора IF...THEN...ELSE POINT(150,95)
на POINT(149,95)... Заметили разницу?!
-
2) NEW
Ok
10 COLOR 1,15,8:SCREEN 3
OR I=1 TO 1000:NEXT:GOTO 10
100 LOCATE 9,12:PRINT"Черных точек нет!":RETURN
110 LOCATE 9,12:PRINT"Черные точки есть!":RETURN
-
3) Для закраски точки (X,Y) примените следующий прием:
PSET(X,Y),POINT(U,V)
где точка (U,V) принадлежит ф о н у! Другой способ закраски точки на гра-
ляется частью "глубоко" вложенных друг в друга циклов FOR...NEXT или под-
программ, или же если контур, ограничивающий закрашиваемую область, имеет
достаточно сложную форму.
-
П р и м е р ы:
─────────────
1) NEW 2) NEW
40 PAINT(128,95),15-K 40 PAINT(128,95),15-K
50 NEXT 50 NEXT
60 GOTO 60 60 GOTO 60
-
3) NEW 4) NEW
Ok Ok
10 COLOR 1,15,8:SCREEN3 10 SCREEN2
(128,95),127-8*K,K,,,.7: 30 PAINT STEP(0,0),10
PAINT(128,95),15-K,K:NEXT 40 GOTO 40
60 GOTO 60
-
5) 10 COLOR 1,10,4:SCREEN2:FOR I=20 TO 110 STEP 10:CIRCLE(I+128,95),80
,1:PAINT(1.85*I,I+1),1:NEXT:A$=INPUT$(1)
-
6) Ok
10 COLOR1,15,8:SCREEN2
20 CIRCLE(95,60),20,1,-.01,-4.7124,1.1:PAINT(85,55),1:CIRCLE(95,125
V.4.8. В ы в о д р и с у н к о в на п р и н т е р
-
- ...Вы печатаете на клавиатуре заклинание, и вот экран дисплея
- оживает, показывая объекты, которых не было и не может быть ни-
- когда. Ф.П.Брукс
- Твердая копия - зафиксированное на бумажном носителе изображение
- на экране дисплея.
- Толковый словарь по вычислительной технике и программированию
-
+ ...Вы печатаете на клавиатуре заклинание,
+ и вот экран дисплея оживает, показывая
+ объекты, которых не было и не может быть
+ никогда.
+ Ф.Брукс
А сейчас мы научим Вас выводить на печатающее устройство (принтер) ри-
сунки, изображенные компьютером на экране дисплея. Для этого используем
вспомогательную подпрограмму, записанную в двоичных кодах, загрузка кото-
рой в оперативную память компьютера осуществляется подпрограммой с именем
HARDCOPY.BAS .
-
П р и м е р 1 [14]. Восстановим облик хищного тираннозавра (ящера-раз-
───────────────── бойника), жившего в мезозойскую эру (он достигал
высоты 5 м, длины 14 м).
55180 DATA FE,FF,C8,CD,A5,00,23,18,F6,1B,54,31
55190 DATA 36,1B,45,1B,3E,0E,FF,1B,53,30,32,35
55200 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
-
- П р и м е р 2. Лучше гор могут быть только горы.
- ───────────── В.Высоцкий
-
+ П р и м е р 2. "Лучше гор могут быть только горы" (В.Высоцкий).
+ ─────────────
Л.Карпентер и независимо от него А.Фурнье и Д.Фассел изобрели метод
"ф р а к т а л е й"("fractal"), в котором неправильность естественных объ-
ектов (линия берега,горы и т.д.) имитируется компьютером за счет внесения
случайных вариаций в представленный художником рисунок, делая гладкие ли-
-нии изломанными и т.п. Методом фракталей удается получать на удивление ре-
-алистические горы, долины, с раскиданными по ним валунами,береговые линии,
-скопления звезд, цветные географические карты, хлопья снега, ветви деревь-
-ев и т.д., а художнику остается лишь задать небольшое количество точек.
-Алгоритм метода изложен в монографии [15].
+нии изломанными и т.п. Методом "фракталей" удается получать на удивление
+реалистические горы, долины, с раскиданными по ним валунами, береговые ли-
+нии, скопления звезд, цветные географические карты, хлопья снега, ветви
+деревьев и т.д., а художнику остается лишь задать небольшое количество то-
+чек. Алгоритм метода изложен в монографии [15].
В пространстве берется некоторый исходный треугольник и над ним выпол-
няется следующая процедура. Находятся средние точки всех сторон треуголь-
ника и переносятся (не обязательно в одной плоскости) на расстояние, про-
55060 DATA 21,00,20,22,AC,EF,21,91,EF,CD,87
··· ··· ···
55200 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
-
Заметим, что вместо треугольников в алгоритме могут рассматриваться и
четырехугольники, при этом процедура деления лишь незначительно изменится.
Разбиение четырехугольника показано на рисунке:
│ │
│ │
│ │
- │ │ Р и с. 2
└───────────────────────────────────────────────────┘
+ Р и с. 4
Четыре ребра первоначального (закрашенного) четырехугольника разбивают-
ся с применением случайной функции, в результате чего вычисляются коорди-
наты точек P1, P2, P3 и P4. С помощью этих точек, а также случайной функ-
Таким образом, из начальной аппроксимации получается множество четырех-
угольников. Наконец, производится удаление скрытых поверхностей и применя-
ется соответствующая модель закраски.
-
П р и м е р 3 [14].
─────────────
NEW
55060 DATA 21,00,20,22,AC,EF,21,91,EF,CD,87
··· ···
55200 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
-
- П р и м е р 4. Для написания данного алгоритма требуются знание мате-
- ───────────── матики в объеме средней школы.
- NEW Фраза из учебника по программированию
+ П р и м е р 4.
+ ─────────────
+ NEW
Ok
2 DIM G(2000) 'Программа построения поверхностей!
4 DEFFNZ(X,Y)=(60^(2/3)-(X^2+Y^2)^(1/3))^(3/2) 'L=0
55060 DATA 21,00,20,22,AC,EF,21,91,EF,CD,87
··· ··· ···
55200 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
-
- П р и м е р 5 [16]. Рисуют головой, а не руками.
- ───────────── Микельанджело Буонарроти
+ П р и м е р 5 [16]. "Рисуют головой, а не руками" (Б.Микельанджело).
+ ─────────────
NEW
Ok
15 COLOR 1,15,8:CLS:PRINT"Для вывода полученного графика на принтер на
··· ··· ···
1030 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF
- П р и м е р 6. Обратите внимание на подпрограмму вывода на принтер
+ П р и м е р 6. Обратите внимание на подпрограмму вывода на принтер -
───────────── она написана на "чистом" MSX-BASIC !
NEW
Ok
V.5. ГРАФИЧЕСКИЙ МАКРОЯЗЫК GML
-
В MSX-BASIC входит оператор DRAW, который позволяет изображать на экра-
не дисплея рисунки, составленные из различных комбинаций прямых линий. На-
чиная с последней высвеченной на экране точки, с помощью оператора DRAW
можно провести линию любой длины и в любом из 8 заданных направлений (см.
-рис.2). После этого можно провести еще одну линию, снова любой длины и в
+рис.5). После этого можно провести еще одну линию, снова любой длины и в
любом из тех же восьми направлений и т.д. Каждая проводимая линия может
быть окрашена в любой из 15 допустимых цветов. Кроме того,можно проводить
отрезок, соединяющий текущую точку с любой точкой, заданной абсолютными
Оператор DRAW - мощный оператор, являющийся по существу настоящим мини
-языком в MSX-BASIC. Этот язык называется графическим м а к р о я з ы -
к о м GML("Graphics Macro Language").
- Записывается оператор в виде
- DRAW β
+ Записывается оператор в виде: DRAW β ,
где: DRAW("to draw"-"рисовать") - служебное слово;
β - строковое выражение, значение которого определяет рисунок.
Значение β составляется из последовательности команд GML. Обратите вни-
мание на то, что значение параметра β всегда заключено в кавычки, посколь-
-ку это обычная строка MSX-BASICa, состоящая из команд языка GML, констант
+ку это обычная строка MSX-BASIC, состоящая из команд языка GML, констант
и строковых переменных. Длина β не должна превышать 255 символов.Для удоб-
ства чтения текста программы команды можно разделять пробелами. Каждая ко-
манда GML представлена одиночной ключевой буквой, за которой следует один
Ключевая буква Аргумент Ключевая буква Аргументы
Команды GML в основном предназначены для перемещения графического кур-
сора из одних точек экрана в другие с одновременным вычерчиванием соединя-
-ющих их отрезков. Однако, они могут модифицироваться следующим образом.
+ющих их отрезков. Однако они могут модифицироваться следующим образом.
1. Перед командой перемещения ставится п р е ф и к с (приставка) B.Тог-
да положение курсора изменяется, но линия не рисуется.
2. Перед командой перемещения ставится префикс N.Тогда курсор возвраща-
α) какова текущая позиция графического курсора;
β) в какую позицию Вы собираетесь его перевести;
γ) хотите ли Вы провести линию при его перемещении.
-
1. Команда перемещения βn служит для перемещения графического курсора
по направлению β с рисованием прямой линии.
Здесь: β - указатель одного из 8 возможных направлений: β ∈ {R,E,U,H,
"Left"-"левый" \ │ ╱
"Right"-"правый" L◀── ──▶ R
╱ │ \
- G ▼ F Рис.3
- "Down"-"вниз" D ─────
+ G ▼ F
+ "Down"-"вниз" D
+ Р и с. 5
n - целое положительное число, задающее величину смещения курсора
(выраженную в точках экрана).
При выполнении команды курсор смещается от своего текущего положения
последней упомянутой точки на 10 точек влево, на 10 точек вверх, на 10 то-
чек вправо и на 10 точек вниз, т.е.квадрат(интересно, что диагональ данно-
го квадрата - также 10 точек).
-
П р и м е р. 10 COLOR 1,15,8:SCREEN 2:PSET(80,100)
─────────── 20 DRAW"c13 s12 u10 e10 r10 f10 d10 g10 l10 h10"
30 GOTO 30
-
2. Команда перемещения MX,Y ("to Move"-"двигаться")позволяет перемес-
тить курсор из текущего положения в точку с координатами (X,Y). Здесь X,Y
- абсолютные координаты.
ку (160,100), оставляя при этом след в виде закрашенных точек. Оператор
DRAW"BM160,100" перемещает графический курсор в ту же позицию (160,100),
но префикс B делает это перемещение невидимым!
-
П р и м е р [6]. Изображение картины взрыва.
───────────
5 COLOR 1,15,4:SCREEN2:LINE(105,65)-(225,146),1,BF
160,124m166,139m172,124m196,145m184,121m223,133m193,115m217,109m196,10
6m205,97m187,97m190,82"
20 PAINT(130,100),8:A$=INPUT$(1)
-
3. Команда перемещения М±X,±Y служит для смещения курсора из текущего
положения на ±Х точек по абсциссе и ±Y точек по ординате (разумеется, ука-
зание знака "+" или "-"обязательно!). Здесь ±X,±Y - относительные коорди-
на 10 точек влево и на 40 точек вниз, с рисованием прямой линии.
Отметим,что команда M±X,Y действует точно так же,как команда M±X,+Y ,а
команда MX,+Y действует как команда MX,Y.
+
Например, оператор DRAW"M-10,40" перемещает графический курсор из по-
следней упомянутой в Вашей программе точки на 10 точек влево и на 40 вниз,
т.е. его действие совпадает с действием оператора DRAW"M-10,+40".
-
П р и м е р. Ok
─────────── 10 COLOR 1,15,8:SCREEN 2:PSET(100,85)
20 DRAW"a1 s12 c13 nu10 ne10 nr10 nf10 nd10 ng10 nl10 h10
m+0,30 a2": PSET (190,95):DRAW"s8 c13 nu10 ne10 nr10 nf10
nd10 ng10 nl10 h10 m+0,30"
30 GOTO 30
-
4. Команда Cp ("Color"-"цвет") позволяет определить цвет вычерчивае-
мых отрезков (p=0,1,2,...,15 - код цвета). Действует команда до нового на-
значения цвета (по умолчанию p - код цвета изображения). Отметим,что зада-
ние цвета командой C в операторе DRAW не меняет цвет остальной части изо-
бражения!
-
5. Команда Sm("Size"-"размер")задает масштабный множитель m,(1≤m≤255).
При выполнении команды Sm числовые параметры всех последующих команд пере-
мещения приобретают масштабный множитель m/4 (например, при m=8 m/4=2).
Действует команда Sm на все команды DRAW, не содержащие префикса "B", до
нового назначения.
-
6. Команда At ("Angle"-"угол") служит для поворота изображения вокруг
точки, с которой начиналось рисование, на 90·t° против часовой стрелки
(t может принимать значения 0,1,2,3).Действует команда At на все последую-
60 GOTO 60
Запомните,что при переходе в другой графический режим координаты графи-
ческого курсора,масштаб,угол поворота и цвет изображения остаются прежними.
-
П р и м е р ы.
- ─────────────
1) Ok
5 '"Цветок".
10 COLOR 1,15,8:SCREEN 2:FOR K=0 TO 3:L=4*K
30 DRAW"a=k; s4 c13 bm128,85 e10 r10 f10 d10 g10 l10 h10 u10":NEXT:
A$=INPUT$(1)
-
2) Ok
5 '"Паркет".
10 COLOR 1,15,8:SCREEN 2
20 FOR J=25 TO 160 STEP 40:FOR I=18 TO 180 STEP 40
40 DRAW"s8 bm=i;,=j; e10 r10 f10 d10 g10 l10 h10 u10"
50 NEXTI,J:A$=INPUT$(1)
-
3) Ok
10 '"Акробаты"
20 CLS:INPUT"Введите 0,1,2 или 3";T:IF T<>0 AND T<>1 AND T<>2 AND T
1c1d3c15d1c1r2l5c15e3r6u2c1d5g3l8g2d3l5g8u18l5d30e15d25r15l15g15d18
l3d2"
90 IF X<O THEN X=X+73:GOTO 80 ELSE W$=INPUT$(1):GOTO 20
-
4) Ok
10 CLS:COLOR 1,15,8:SCREEN 2 '"Блоха"
30 BDY$="BM=H;,=V; L20 U20 R20 D20 F10 D10 R2"
280 DRAW "XA2$;":H=H-10:DRAW "XNECK$;":H=H-5:V=V-4
320 DRAW "XHEAD$;":V=V-3:DRAW "XF1$;":H=H+7:DRAW "XF2$;"
370 GOTO 370
-
5) Цифры "нестандартных" размеров на графическом экране.
Ok
5 INPUT"Масштаб";I:J=INT(I)*4 '0≤I≤5
60 DRAW"nr2d2r2d2l2be4":DRAW"br2nr2d4r2u2l2be4"
80 DRAW"bf2r2d1g1d2be4":DRAW"bf1e1r1f1g1l1h1f1g1f1r1e1h
1be4":DRAW"bd2nr2d2r2nu2d2l2":B$=INPUT$(1)
-
6) Рисунок черного и белого домов [1].
Ok
10 COLOR,5:SCREEN2:BOX$="R20 U20 L20 D20":HAT$="E14 F14 BL20":DO$="
,-5 XWINDOW$;BM-18,-12 XHAT$;"
20 DRAW"BM20,20 C1 S2 XHOUSE$;BM100,100 S6 C15 XHOUSE$;"
30 GOTO 30
-
7) Ok
10 CLS:KEYOFF:COLOR 1,15,8:SCREEN2:PSET(125,95)
40 HX$="u25 e15 r25 d25 g15 l25" 'Исходный шестиугольник
":DRAW SHAPE$:NEXT ROTATE:NEXT SCALE
160 Z$=INPUT$(1)'Ожидание нажатия любой(!) клавиши для окончания ра
боты. Данный пример приведен в [6].
-
В процессе работы эта программа выводит на экран дисплея один и тот же
шестиугольник, изменяя с помощью команды A угол его поворота,с помощью ко-
манды C его цвет, а с помощью команды S - размер. В программе иллюстриру-
На экране дисплея - "окружность"! Укажите ее "радиус"?!
Заметим, что команды GML как и операторы графики "работают"в воображае-
мом пространстве, координаты которого принадлежат отрезку [-32768,32767].
-Однако, на экране дисплея будет видна только та часть рисунка,для которой
+Однако на экране дисплея будет видна только та часть рисунка, для которой
0≤X≤255 и 0≤Y≤191.
-
П р и м е р. Как уже говорилось, командная строка,вызванная командой X,
─────────── может сама содержать команды X. Используем этот факт для
создания нестандартного, собственного "алфавита" [4].Значение каждого эле-
V.6. СПРАЙТЫ
-
- Мультипликация является единственным подлинным искусством в настоящее
- время,потому что в ней, и только в ней, художник абсолютно свободен в
- своей фантазии и может делать все, что угодно. Ч. Чаплин
-
-
+ Мультипликация является единственным подлинным
+ искусством в настоящее время, потому что в ней,
+ и только в ней, художник абсолютно свободен в
+ своей фантазии и может делать все, что угодно.
+ Ч. Чаплин
"Оживление" изображения при мультипликации основано на использовании
набора обычных "неподвижных" картинок,каждая последующая из которых очень
незначительно отличается от предыдущей.Если последовательно просматривать
положения при предыдущем выводе, иначе вместо плавного перемещения будет
лишь видно, как изображение объекта исчезнет в одном месте,а затем появля-
ется в другом.Эту идею нетрудно реализовать с помощью циклической програм-
-мы, использующей рассмотренные нами ранее графические операторы. Однако,
+мы, использующей рассмотренные нами ранее графические операторы. Однако
для того, чтобы движение изображения не было "дергающимся",отдельные кад-
ры должны очень быстро сменять друг друга. Используя только базовые опера-
торы графики, это требование выполнить очень трудно. Смотрите!
-
П р и м е р [14]. Бегущий человечек.
───────────
NEW
720 DATA 2,132,25,136,40,93,43,150,50,130,30,120
730 DATA 30,111,22,103,38,95,43,110,58,104,40,83
740 XO=0:X2=0:GOTO 120
-
Убедились?В связи с этим в язык MSX-BASIC включены дополнительные сред-
ства вывода на экран графической информации - с п р а й т ы.
-
V.6.1. Ф о р м и р о в а н и е з н а ч е н и я с п р а й т а
-
Э л ь ф ы - в германских народных поверьях духи природы,
населяющие воздух,землю,горы,леса,жилища людей и обычно
- благожелательные людям.
+ благожелательные к людям.
Советский Энциклопедический Словарь
-
-
В MSX-BASIC используются специальные нумерованные строковые переменные,
называемые с п р а й т а м и.
Для записи и м е н и спрайта используется псевдопеременная SPRITE$(),
синтаксис которой:
- SPRITE$(n)
+ SPRITE$(n) ,
где: SPRITE("sprite"-"эльф") - служебное слово;
n - арифметическое выражение, целая часть значения которого опреде-
ляет номер спрайта.
Рассмотрим семантику оператора присваивания
- SPRITE$(n)=β (∗)
+ SPRITE$(n)=β , (∗)
где β - строковое выражение.
В дальнейшем вместо фразы "длина значения спрайта"мы будем употреблять
фразу "д л и н а с п р а й т а".
- При выполнении (∗), значение β выравнивается, если это требуется,до на-
+ При выполнении (∗) значение β выравнивается, если это требуется,до на-
ибольшей длины спрайта за счет отбрасывания его лишних правых байтов или,
наоборот,за счет добавления справа необходимого количества нулевых байтов
(00000000). Полученное значение присваивается спрайту с заданным номером.
ти, называемое с п р а й т о в о й областью и имеющее объем 2Кб (напом-
ним, что 1Кб = 1024 байтам).
Оператор присваивания
- A=SPRITE$(n)
+ A=SPRITE$(n) ,
где: A - строковая переменная или элемент строкового массива;
n - арифметическое выражение, целая часть значения которого опреде-
ляет номер спрайта; позволяет при недостатке строкового пространства хра-
Думаем, что теперь Вам совершенно ясен семантический смысл, например,
конструкции вида: SPRITE$(12)=SPRITE$(7) !
-
-
V.6.2. В ы в о д с п р а й т а на э к р а н
-
Intelligenti pausa
- Лат. поговорка
-
-
+ Латинская поговорка
Значения спрайтов можно выводить на экран SCREEN1 при помощи "тривиаль-
ного" оператора PRINT.
+
П р и м е р 1.
─────────────
10 SCREEN1'Но не SCREEN0! 10 SCREEN1'Но не SCREEN0!
Можно, конечно, выводить значение спрайта и в режиме SCREEN 0. Но для
этого его значение нужно вначале определить в режиме SCREEN 1!
+
Однако, обычно, выводятся не сами значения спрайтов,а некоторые геомет-
рические образы, порождаемые специальной двоичной интерпретацией этих зна-
чений. Вначале опишем форму представления значений спрайтов при выводе на
экран дисплея.
+
Пусть длина спрайта ≤8 байтам. Расположим его двоичное значение в виде
"квадрата" размером 8╳8 следующим образом: в первой строке - 1-й байт, во
второй строке - 2-й байт и т.д.
+
Значению спрайта сопоставим геометрический образ на экране,выделив там
б л о к из 8╳8 точек и раскрасив одним и тем же цветом все его точки, ко-
торым соответствует бит "1", и не изменив цвета других точек.
+
П р и м е р 2.
─────────────
NEW ┌───────────────┐
Ok
+
+
+
+
П р и м е р 3.
─────────────
Что мы желаем Процесс кодирования образа спрайта
│ │ │ │█│█│ │ │ │ └─┴─┴─┴─┘ └─┴─┴─┴─┘
├─┼─┼─┼─┼─┼─┼─┼─┤ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
│ │ │ │█│█│ │ │ │ │ │ │ │█│ │█│ │ │ │──▶ &H18
- └─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ └─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┘ └─┴─┴─┴─┘ ▲ ▲ ▲
+ Происхождение этих непонятных (пока!) символов ─────────┘─┘─┘ разъ-
+ясняет следующая таблица:
+ Рисунок Шестнадцатеричный код Рисунок
+ ─────── ───────────────────── ───────
+ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
+ │ │ │ │ │ ──▶ 0 8 ◀── │█│ │ │ │
+ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
+ │ │ │ │█│ ──▶ 1 9 ◀── │█│ │ │█│
+ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
+ │ │ │█│ │ ──▶ 2 A ◀── │█│ │█│ │
+ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
+ │ │ │█│█│ ──▶ 3 B ◀── │█│ │█│█│
+ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
+ │ │█│ │ │ ──▶ 4 C ◀── │█│█│ │ │
+ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
+ │ │█│ │█│ ──▶ 5 D ◀── │█│█│ │█│
+ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
+ │ │█│█│ │ ──▶ 6 E ◀── │█│█│█│ │
+ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ ┌─┬─┬─┬─┐ ┌─┬─┬─┬─┐
+ │ │█│█│█│ ──▶ 7 F ◀── │█│█│█│█│
+ └─┴─┴─┴─┘ └─┴─┴─┴─┘
+ Думаем, что самое время напомнить Вам, что перед шестнадцатеричным чис-
+лом в языке MSX-BASIC употребляется префикс &H !
+ И, наконец, завершающий этап! Определим образ спрайта:
+ SPRITE$(1)=CHR$(&H18)+CHR$(&H3C)+CHR$(&H7E)+CHR$(&HFF)+
+ CHR$(&H18)+CHR$(&H18)+CHR$(&H18)+CHR$(&H18)
+ Пусть теперь длина спрайта не превосходит 32 байтов.Расположим его дво-
+ичное значение в виде квадрата 16╳16 в двa столбца по 16 байтов в столбце
+так, как это показано в следующем примере. Тем же способом, что и раньше,
+этому значению сопоставим на экране некоторый блок из 16╳16 точек и в нем
+конкретный геометрический образ.
+ П р и м е р 4.
+ ─────────────
+ NEW
+ Ok
+ 10 SCREEN1,2:SPRITE$(255)=" Никто не обнимет необъятного! "
+ 15 FOR I=1 TO LEN(SPRITE$(255))-16
+ 20 PRINT RIGHT$("00000000"+BIN$(ASC(MID$(SPRITE$(255),I ,1))),8)" ";
+ RIGHT$("00000000"+BIN$(ASC(MID$(SPRITE$(255),I+16,1))),8):NEXT
+ run ┌──────────┬───┬───┬───────────┐
+ 00100000 11010100 │ 1-й байт │ │ т │ 17-й байт │
+ 11101110 00100000 │ 2-й байт │ Н │ │ 18-й байт │
+ 11001001 11001110 │ 3-й байт │ и │ н │ 19-й байт │
+ 11001011 11000101 │ 4-й байт │ к │ е │ 20-й байт │
+ 11010100 11001111 │ 5-й байт │ т │ о │ 21-й байт │
+ 11001111 11000010 │ 6-й байт │ о │ б │ 22-й байт │
+ 00100000 11011111 │ 7-й байт │ │ ъ │ 23-й байт │
+ 11001110 11010001 │ 8-й байт │ н │ я │ 24-й байт │
+ 11000101 11010100 │ 9-й байт │ е │ т │ 25-й байт │
+ 00100000 11001110 │10-й байт │ │ н │ 26-й байт │
+ 11001111 11001111 │11-й байт │ о │ о │ 27-й байт │
+ 11000010 11000111 │12-й байт │ б │ г │ 28-й байт │
+ 11001110 11001111 │13-й байт │ н │ о │ 29-й байт │
+ 11001001 00100001 │14-й байт │ и │ ! │ 30-й байт │
+ 11001101 00100000 │15-й байт │ м │ │ 31-й байт │
+ 11000101 00100000 │16-й байт │ е │ │ 32-й байт │
+ Ok └──────────┴───┴───┴───────────┘
+ █ ██ █ █
+ ███ ███ █
+ ██ █ █ ██ ███
+ ██ █ ██ ██ █ █ Образ спрайта на экране
+ ██ █ █ ██ ████ дисплея
+ ██ ████ ██ █
+ █ ██ █████
+ ██ ███ ██ █ █
+ ██ █ █ ██ █ █
+ █ ██ ███
+ ██ ████ ██ ████
+ ██ █ ██ ███
+ ██ ███ ██ ████
+ ██ █ █ █ █
+ ██ ██ █ █
+ ██ █ █ █
+ Блок размером 16╳16 рассматривается как совокупность четырех блоков,
+каждый из которых имеет размер 8╳8. Эти блоки объединяются вместе в после-
+довательности, указанной на рисунке:
+ 8
+ │◀───────▶│
+ ─▲─┌─────────┬──────────┐─▲─
+ │ │ │ │ │
+ 8│ │ 1 │ 3 │ │
+ │ │ │ │ │
+ ─▼─├─────────┼──────────┤ │ 16
+ │ │ │ │
+ │ 2 │ 4 │ │
+ │ │ │ │
+ └─────────┴──────────┘─▼─
+ Р и с. 6
+
+ П р и м е р 5.
+ ─────────────
+ ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ Что мы желаем впоследствии увидеть
+ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ на экране дисплея!
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+ │ │ │ │ │ │ │ │ │ │ │ │ │█│█│ │ │ ██
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ █████ ███
+ │ │ │ │ │█│█│█│█│█│ │ │█│█│█│ │ │ ██ ████ █
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ ██ █ ██ █
+ │ │ │ │█│█│ │ │ │█│█│█│█│ │█│ │ │ ██ █ █ █
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ ███ ███ █
+ │ │ │█│█│ │█│ │ │ │█│█│ │ │█│ │ │ ██ █████ ██
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ ██ █████ ███
+ │ │ │█│█│ │█│ │ │ │█│ │ │█│ │ │ │ ████ ███ ███
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ █████ ███
+ │█│█│█│ │ │ │ │ │ │ │█│█│█│ │█│ │ █ ███ ██ █
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ ██ █ ████ █
+ │█│█│ │ │ │ │ │█│█│█│█│█│ │ │█│█│ █ ██ ██████
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ █████ ███
+ │ │█│█│ │ │█│█│█│█│█│ │ │ │█│█│█│ ███ ███
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+ │ │ │ │█│█│█│█│ │█│█│█│ │ │█│█│█│
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+ │ │ │ │ │ │ │ │█│█│█│█│█│ │█│█│█│
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+ │ │ │ │ │█│ │█│█│█│ │█│█│ │ │█│ │
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+ │ │ │ │ │█│█│ │█│ │█│█│█│█│ │█│ │
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+ │ │ │ │█│ │█│█│ │█│█│█│█│█│█│ │ │
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+ │ │ │ │█│█│█│█│█│ │ │█│█│█│ │ │ │
+ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
+ │ │ │ │ │█│█│█│ │ │█│█│█│ │ │ │ │
+ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
+ Завершающий этап! Определение образа спрайта:
+ 30 X$=CHR$(&H0) +CHR$(&H0) +CHR$(&HF) +CHR$(&H18)+
+ CHR$(&H34)+CHR$(&H34)+CHR$(&HE0)+CHR$(&HC1)
+ 40 Y$=CHR$(&H67)+CHR$(&H1E)+CHR$(&H1) +CHR$(&HB)+
+ CHR$(&HD) +CHR$(&H16)+CHR$(&H1F)+CHR$(&HE)
+ 50 Z$=CHR$(&H0) +CHR$(&HC) +CHR$(&H9C)+CHR$(&HF4)+
+ CHR$(&H64)+CHR$(&H48)+CHR$(&HCA)+CHR$(&HF3)
+ 60 W$=CHR$(&HC7)+CHR$(&HE7)+CHR$(&HF7)+CHR$(&HB2)+
+ CHR$(&H7A)+CHR$(&HFC)+CHR$(&H38)+CHR$(&H70)
+ 70 SPRITE$(1)=X$+Y$+Z$+W$
+ Отметим,что размер спрайтов определяется оператором
+ SCREEN [n][,s] ,
+где: n - арифметическое выражение, целая часть значения которого принад-
+лежит отрезку [0,3] и указывает режим экрана;
+ s - арифметическое выражение, целая часть значения которого принад-
+лежит [0,3] и определяет размеры спрайтов.
+ Возможны следующие случаи:
+ s=0: спрайты длиной 8 байтов, занимающие 8╳8 точек экрана;
+ s=1: спрайты длиной 8 байтов, такие же как и при s=0, но с двухкратным
+увеличением размеров по обоим направлениям и занимающие поэтому 16╳16 то-
+чек экрана;
+ s=2: спрайты длиной 32 байта,занимающие 16╳16 точек экрана;
+ s=3: спрайты длиной 32 байта, такие же,как и при s=2, но с двухкратным
+увеличением размеров по обоим направлениям и занимающие поэтому 32╳32 точ-
+ки экрана.
+ З а м е ч а н и я.
+ ┌─────────────────────────────────────────────────────────────────┐
+ │ 1) Оператор SCREEN ,s не очищает экран, однако с т и р а е т │
+ │ образы спрайтов из памяти компьютера. │
+ │ 2) Оператор SCREEN n очищает экран б е з с т и р а н и я │
+ │ образов спрайтов из памяти компьютера. │
+ └─────────────────────────────────────────────────────────────────┘
+ Опишем синтаксис и семантику оператора, служащего для вывода на экраны
+1,2 и 3 образов спрайтов (коротко - с п р а й т о в):
+ PUT SPRITE t,[[@][STEP](X,Y)],[C][,n] ,
+где: PUT("to put"-"выводить"), SPRITE - служебные слова;
+ t - арифметическое выражение, целая часть значения которого должна
+принадлежать отрезку [0,31]; она задает "экранный" номер спрайта ("sprite
+plane namber");
+ n - арифметическое выражение, целая часть значения которого опреде-
+ляет номер одного из сформированных в оперативной памяти спрайтов, образ
+которого выведен на экран под номером t ("sprite pattern number").По умол-
+чанию значение n совпадает со значением t;
+ (X,Y) или STEP(X,Y) - элементы, определяющие координаты верхнего ле-
+вого угла блока точек на экране, в котором размещается образ спрайта, при-
+чем элементы (X,Y) и STEP(X,Y) могут задавать точку (X0,Y0) с координа-
+тами, удовлетворяющими условиям -32768 ≤X0,Y0≤ 32767. Однако в отличие от
+других графических операторов для спрайтов характерен неприятный эффект
+"свертывания" изображения на экране, который состоит в том, что, если мы
+попытаемся высветить спрайт за правой границей экрана, то этот спрайт вы-
+светится с левой стороны экрана,т.е. компьютер вычисляет координаты спрай-
+та (X,Y) по формулам:
+ X=INT(ABS(X0)MOD255), Y=INT(ABS(Y0)MOD191) (для экрана SCREEN2);
+ Заметим, что координата Y спрайта с д в и н у т а на одну позицию,то
+есть для изображения спрайта, левый верхний угол которого будет иметь ко-
+ординаты (X,Y), необходимо использовать оператор:
+ PUT SPRITE t,(X,Y-1),C,n
+ 5) C - арифметическое выражение,целая часть значения которого принад-
+лежит отрезку [0,15] и определяет цвет спрайта;
+ 6) @ - необязательный элемент оператора PUT SPRITE,никак не влияющий
+на его выполнение.
+ Отметим, что только t является необходимым аргументом, остальные могут
+быть опущены.
+ При выполнении оператора PUT SPRITE спрайт с номером n получает "экран-
+ный" номер t и размещается с позиции, определяемой элементами (X,Y) или
+STEP(X,Y), причем точки, соответствующие его единичным битам, раскрашива-
+ются цветом C.
+ Обратите о с о б о е внимание на следующий пример!
+ П р и м е р 6. Формирование образа спрайта с помощью оператора DATA.
+ ───────────── Следующие три программы формируют и выводят на экран об-
+раз одного и того же спрайта!
+α) NEW β) NEW
+ Ok Ok
+ 10 COLOR 1,15,8:SCREEN 2,1 10 COLOR 1,15,8:SCREEN 2,1
+ 15 DATA 11000000 20 Y$="алгоритм"
+ 20 DATA 11001100 130 SPRITE$(0)=Y$
+ 25 DATA 11000111 140 PUT SPRITE 0,(110,85),8
+ 30 DATA 11000100 150 GOTO 150
+ 35 DATA 11010010
+ 40 DATA 11001001 γ) NEW
+ 45 DATA 11010100 Ok
+ 50 DATA 11001101 10 COLOR 1,15,8:SCREEN 2,1
+ 100 FOR S=1 TO 8:READ R$ 20 DATA 193,204,199,207,210
+ 110 Y$=Y$+CHR$(VAL("&B"+R$)) ,201,212,205
+ 120 NEXT 100 FOR I=1 TO 8:READ R:Y$=
+ 130 SPRITE$(0)=Y$ Y$+CHR$(R):NEXT:SPRITE$(0)=
+ 140 PUT SPRITE 0,(110,85),8,0 Y$:PUT SPRITE 0,(110,85),8
+ 150 GOTO 150 150 GOTO 150
+ Очевидно, что программа α дает наглядное представление об образе спрай-
+та уже на стадии составления программы.Если же Вы умеете пользоваться ин-
+струментальным средством - программой "редактор спрайтов", то лучше всего
+формировать спрайт при помощи десятичных кодов (пример - программа γ). И,
+наконец, программа β выводит на экран графический образ спрайта со значе-
+нием "алгоритм"; при этом пользователь, разумеется, не может заранее пре-
+дугадать вид "пятна" (образа спрайта), образующегося на экране!
+ П р и м е р 7.
+ ─────────────
+ NEW
+ Ok
+ 10 KEY OFF:COLOR15,1,5:SCREEN1,2
+ 20 DATA 96,144,191,160,159,159,79,79,39,23,10,7,1,1,7,31,6,9,253,5,233,
+ 233,210,210,164,168,80,224,128,128,224,248
+ 30 FOR I=1 TO 32:READ A:A$=A$+CHR$(A):NEXT:SPRITE$(1)=A$
+ 40 PUT SPRITE 1,(120,90)
+ П р и м е р 8 [4]. Двенадцать одинаковых спрайтов.
+ ─────────────
+ NEW
+ Ok
+ 10 COLOR 1,15,8:SCREEN 2,3
+ 20 W$="Двенадцатьспрайтов-четыревстроке":SPRITE$(40)=W$
+ 40 S=0:FOR I=20 TO 230 STEP 60:FOR J=20 TO 170 STEP 60
+ 60 PUT SPRITE S,(I,J),13-S,40:S=S+1:NEXT J,I 'Обратите внимание на то,
+ что параметр t ("экранный" номер спрайта) изменяется!
+ 80 GOTO 80
+ Итак, одному значению n может соответствовать несколько значений пара-
+метра t, находящегося в одном или нескольких операторах PUT SPRITE.Это по-
+зволяет при необходимости "размножать" спрайт в виде нескольких одинако-
+вых образов на экране дисплея.
+ П р и м е р 9. Спрайты с псевдослучайными образами.
+ ─────────────
+ 10 COLOR 1,15,8:SCREEN 2,3:FOR K=1 TO 12:Y$="":FOR Z=1TO32
+ 40 Y$=Y$+CHR$(INT(RND(1)*256)):NEXTZ:SPRITE$(K)=Y$:NEXTK
+ 70 S=1:FOR I=20 TO 230 STEP 60:FOR J=20 TO 170 STEP 60
+ 90 PUT SPRITE S,(I,J),13-S:S=S+1:NEXTJ,I
+ 110 GOTO 110
+ П р и м е р 10. Движение спрайта по горизонтали.
+ ──────────────
+ 10 COLOR 1,15,8:SCREEN 2,3
+ 20 X$="терминал":SPRITE$(0)=X$+X$+X$+X$
+ 40 FOR K=1 TO255:PUT SPRITE 5,(K,80),4,0'Обратите внимание на то, что
+ значения параметров t и n не меняются!
+ 90 NEXT:GOTO 40
+ П р и м е р 11. Надеемся, что приведенный ниже пример доставит Вам
+ ────────────── большое эстетическое наслаждение!
+ 10 ' ∗∗∗∗∗ C o l o r ∗∗∗∗∗
+ 20 COLOR 15,1,1:SCREEN 2,2
+ 30 OPEN "GRP:" AS #1
+ 40 FOR S=1 TO 2:A$="":FOR P=1 TO 32:READ D$
+ 60 A$=A$+CHR$(VAL("&H"+D$)):NEXT
+ 70 SPRITE$(S)=A$:NEXT
+ 80 FOR K=15 TO 2 STEP-1:Y=K*11+13:FOR X=10 TO 75+K*5 STEP 2
+ 100 PUT SPRITE K,(X,Y),K,1:PUT SPRITE K+15,(X+8,Y-16),K,2
+ 120 LINE (X-4,Y+3)-(X-2,Y+12),K,BF:NEXT
+ 130 READ D$:PSET(X+30,Y-13),1: PRINT #1,D$
+ 140 S=50+K*2:PLAY"v9n=s;32":NEXT '◀── Как, и музыка здесь!
+ 150 DRAW "bm15,15":PRINT #1,"Transparent"
+ 160 DRAW "bm15,26":PRINT #1,"Black"
+ 170 DRAW "bm27,0":PRINT #1,"Press RETURN key"
+ 180 IF INKEY$<>CHR$(13) THEN 180
+ 190 COLOR 15,4,7:END
+ 200 DATA 1,2,4,D,17,13,21,23,47,4C,F0,C0,0,0,0,0,3F,7E,FC,F8,F0,E0,C0,
+ 80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,4,9,13,27,4F,9F,0,0,0,0,10,28,4
+ C,9E,3F,7E,FC,F8,F0,E0,C0,80
+ 260 DATA White,Gray,Magenta,Dark Green,Light Yellow,Dack Yellow, Light
+ Red,Medium Red,Sky Blue,Dark Red,Light Blue,Dark Blue,Light Green,Medi
+ um Green
П р и м е р 12. Фильм (чередование спрайтов на одном и том же месте эк-
────────────── рана дисплея).
40 FOR I=1 TO 4:PUT SPRITE 2,(90,90),11,I'Обратите внимание на то, что
номер спрайта изменяется в цикле, а "экранный" номер постоянен!
50 FOR U=1 TO 200:NEXT:NEXT:GOTO 40
-
Из рассмотрения примеров 8-12 можно сделать некоторые выводы о назначе-
нии "экранного" номера спрайта.
α) "Экранный" номер показывает нам номер "пятна" (спрайта) на экране.
давать" цветные спрайты,накладывая их образы друг на друга.При этом важно
отметить,что спрайт с меньшим экранным номером "накладывается" на спрайты,
имеющие большие экранные номера.
-
П р и м е р 13. Цветные спрайты.
──────────────
NEW
85 PUTSPRITE 3,(141,94),11,1
87 PUTSPRITE 4,(141,94),1,2
90 GOTO 90
-
П р и м е р 14. Движение цветных (!) спрайтов.
──────────────
NEW
95 PUT SPRITE 3,(75+L,88),10,2:PUT SPRITE 4,(88+L,73),13,2
110 PUT SPRITE 5,(80+L,60),1,1:NEXTL:END
130 RESTORE10:READB$:A$="&b"+B$:C$=C$+CHR$(VAL(A$)):RETURN
-
Внимание!В одной строке экрана (напомним,что,например,в экране SCREEN2
192 строки) можно разместить не более ч е т ы р е х спрайтов, а осталь-
ные спрайты с более высокими "экранными" номерами останутся невидимыми!
Экран 0┌──────────┐ │ · │ │─┘ Фоновый экран
Образ │ │ │· │─┘ Основной экран
спрайта с │ ██ │ │───┘◀── для спрайта 31
- "экранным" ────────▶ ██ │ │ Р и с. 5
- номером 0 │ │─┘◀── для спрайта 1 ────────
+ "экранным" ────────▶ ██ │ │
+ номером 0 │ │─┘◀── для спрайта 1
└──────────┘◀── для спрайта 0
На рисунке изображен ряд параллельных прозрачных пластинок, которые мы
будем называть э к р а н а м и. Экраны введены для того, чтобы:
Сквозь незанятые позиции основного экрана "просвечивают" ф о н о в ы й
экран и окаймляющая его цветная рамка.
-
-
V.6.3. С т о л к н о в е н и е с п р а й т о в
-
"Да сделайте же, наконец, CALL NETEND !", -
крик, вырвавшийся из уст пользователя MSX-2.
-
-
С т о л к н о в е н и е м с п р а й т о в мы считаем:
α) для п р о г р а м м и с т а - наложение на экране одной или не-
скольких точек их образов. Следует отметить,что столкновение спрайтов про-
β) для к о м п ь ю т е р а - совпадение е д и н и ч н ы х битов в об-
разах спрайтов, за исключением тех случаев, когда цвет хотя бы одного
спрайта установлен в 0 (тогда столкновение не обнаруживается!).
- Оператор ON SPRITE GOSUB n
+ Оператор ON SPRITE GOSUB n ,
где: ON ("по"), SPRITE, GOSUB - служебные слова;
n - номер программной строки,
приводит в состояние готовности режим передачи управления подпрограмме,
кновение спрайтов произошло, то этот факт "запоминается", но никаких дей-
ствий не происходит; однако,если позже компьютер встретит оператор SPRITE
ON, то будет обработано ранее зафиксированное прерывание.
-
П р и м е р 1. Сравните, пожалуйста,результаты работы приведенных ниже
───────────── программ.
NEW NEW
100 SPRITE OFF:PRINT "Столк 100 PRINT"Столкновение":FOR
новение":FOR I=1 TO 1000:NE I=1 TO 1000:NEXT:CLS:SPRITE
XT:CLS:SPRITE ON:RETURN OFF:RETURN
-
Для очистки экрана дисплея от образов спрайтов примените в непосредст-
венном режиме команду SCREEN0 (CLS не поможет!).
Укажем один из способов определения, какие именно спрайты столкнулись:
Предлагаем Вам пример простейшей программы, позволяющей определить,
спрайт какого цвета "пострадал" при столкновении! Разумеется,задача значи-
тельно усложняется в случае, когда спрайты имеют одинаковые цвета!
-
П р и м е р 2.
─────────────
Ok
lack"
520 FOR T=1 TO 500:NEXT:PUT SPRITE E,(E*10,E*10),15:E=E+1
525 CLS:SPRITE ON:RETURN
-
Напомним, что значения PEEK(&HFCB3) и PEEK(&HFCB5) определяют коорди-
наты текущего положения графического курсора.
Прерывания по столкновению спрайтов широко используются в и г р о -
в ы х программах. Они дают возможность,например,воспроизводить звук взры-
ва при всяком столкновении ракеты и мишени, если оба этих объекта являют-
ся спрайтами.
-
П р и м е р 3. Программа демонстрирует некоторые возможности примене-
───────────── ния спрайтов.
NEW
V.7. ОПЕРАТОР SCREEN В ОБЩЕМ СЛУЧАЕ
-
Общая форма записи оператора SCREEN следующая:
- SCREEN [n],[s],[z],[d],[p],[m]
+ SCREEN [n],[s],[z],[d],[p],[m] ,
──▲─
└ только для MSX-2 !
где: SCREEN("screen"-"экран") - служебное слово;
если p=0, то принтер совместим со стандартом MSX (будет распечатывать каж-
дый символ из набора символов стандарта MSX); если же p≠0, то принтер при
выводе преобразует графические символы в пробелы (по умолчании p=0).
- 7) m - арифметическое выражение,целая часть значения которого принад-
+ m - арифметическое выражение, целая часть значения которого принад-
лежит отрезку [0,3], причем:
если m=0, то изображение устойчивое (по умолчанию);
если m=1, то изображение "дергающееся";
с нечетным номером.
Отметим, что неиспользуемые параметры в операторе можно не указывать,
но если они не последние в записи, то ограничивающие их запятые обязатель-
-ны. При этом, каждый назначенный параметр действует до тех пор,пока не по-
+ны. При этом каждый назначенный параметр действует до тех пор, пока не по-
лучит новое значение в последующем операторе SCREEN.
-
П р и м е р ы: SCREEN 1,2,0,2,0 SCREEN X,Y
───────────── SCREEN 3,,0 SCREEN 2,3,,,0
Если какой-либо из параметров выходит за допустимый диапазон,то компью-
Запомните, что основное назначение оператора SCREEN - это определение
типа экрана и размера спрайтов!
-
-
-V.8. ПОНЯТИЕ ФАЙЛА [5]. ВЫВОД ТЕКСТОВОЙ ИНФОРМАЦИИ НА ГРАФИЧЕСКИЕ ЭКРАНЫ
-
+ V.8. ПОНЯТИЕ ФАЙЛА [5]. ВЫВОД ТЕКСТОВОЙ ИНФОРМАЦИИ
+ НА ГРАФИЧЕСКИЕ ЭКРАНЫ
Я случайно уничтожил все свои файлы!
Крик души
-
-
Термин ф а й л происходит от английского слова file, переводящегося
на русский язык как "дело" или "досье".
В информатике под ф а й л о м понимают совокупность в некотором смыс-
Компоненты файла последовательного доступа называются с т р о к а м и.
Каждая строка имеет специальную концевую метку и, как и запись,состоит из
отдельных значений. Однако строки не нумерованы и обрабатывать их можно
-лишь последовательно друг за другом. Причем, запись организуется от нача-
-ла или конца файла, а чтение - только от его начала.
- Теперь перейдем к делу!
+лишь последовательно друг за другом. Причем запись организуется от нача-
+ла или конца файла,а чтение -только от его начала. Теперь перейдем к делу!
Схемы, графики, рисунки или их отдельные фрагменты, выводимые на графи-
ческие экраны, обычно нуждаются в обозначениях и поясняющих сообщениях.
Сформировать их оператором PRINT невозможно! В режимах SCREEN2 ÷ SCREEN8
последний не действует.
Однако эту процедуру можно осуществить путем совместного применения в
программе четырех операторов:
- α) MAXFILES=α
+ α) MAXFILES=α ,
где: MAX ("MAXimum"-"наибольший") и FILES ("файлы") - служебные слова;
α - арифметическое выражение, целая часть значения которого принадле-
жит отрезку [1,15].
При выполнении оператора MAXFILES= кроме резервирования буферов произ-
водится "чистка" значений переменных и закрытие всех ранее открытых фай-
лов данных.
- β) OPEN"GRP:"[FOR OUTPUT]AS[#] N
+
+ β) OPEN"GRP:"[FOR OUTPUT]AS[#] N ,
где: OPEN("открыть"), FOR("для"), OUTPUT("вывод"), AS("как") - служебные
слова;
"GRP:" - имя устройства вывода,которое передает информацию на гра-
ошибке: "File already open in ..."
("Ф а й л у ж е о т к р ы т в с т р о к е ...")
- γ) PRINT #N,A
+ γ) PRINT #N,A ,
где: A - список арифметических и строковых выражений (разделенных запяты-
ми или точками с запятой), значения которых выводятся на графические экра-
ны;
Применение оператора PRINT#... без оператора OPEN приводит к сообщению
об ошибке: "File not open in ..."
("Ф а й л не о т к р ы т в с т р о к е ...")
- Напомним также, что "обычный" оператор PRINT (без указания параметра
-н о м е р ф а й л а) в графических экранах игнорируется!
+ Напомним также, что "обычный" оператор PRINT (без указания параметра N)
+в графических экранах игнорируется!
+
δ) CLOSE [[#] N] ,
где: 1) CLOSE ("закрыть") - служебное слово;
2) N - номер файла, "открытого" оператором OPEN.
Таким образом, последовательность операторов при выводе текстовой или
цифровой информации на графический экран может выглядеть, например, следу-
ющим образом:
-
П р и м е р 1.
─────────────
NEW
50 CLOSE #1
60 GOTO 60 'Данная программа позволяет вывести на графический экран те
кущий цвет изображения, фона и бордюра
-
П р и м е р 2.
─────────────
NEW
60 SCREEN 3:OPEN "GRP:"FOR OUTPUT AS#2
80 PSET (50,80),11:PRINT #2,"БУКВЫ"
100 FOR I=1 TO 1000:NEXT I:CLOSE #2
-
Обратите внимание на то, что первые операторы строк 30 и 80 указывают
то место экрана, с которого начинается текст, т.к. текст позиционируется
так, что первый символ размещается с верхней левой точки позиции графичес-
чтобы уничтожить строку символов,либо нарисуйте прямоугольник и закрасьте
его цветом фона, либо выведите оператором PRINT#1,... ту же самую строку
на прежнее место с помощью символов, имеющих цвет фона.
-
П р и м е р 3.
─────────────
NEW
Ok
10 COLOR 1,11,7:SCREEN2:OPEN "GRP:"FOR OUTPUT AS #1
30 PSET (69,80),11:PRINT #1,"Рис 9.1 ЦВЕТА":GOSUB 1000'──▶
- 55 LINE(69,80)-(100,87),11,BF 'Нарисован прямоугольник,внутренняя част
- ь которого закрашена цветом фона.
+ 55 LINE(69,80)-(100,87),11,BF 'Нарисован прямоугольник, внутренняя
+ часть которого закрашена цветом фона.
56 GOSUB 1000'──▶
60 COLOR 11,11,7:PSET (69,80),11:PRINT #1,"Рис 9.1 ЦВЕТА"
68 GOSUB 1000'──▶
100 FOR I=1 TO 1000:NEXT:CLOSE#1
110 END
1000 FOR I=1 TO 1000:NEXT:RETURN '──▶
-
Вначале на экране появляется надпись
- Рис 9.1 ЦВЕТА
-затем 9.1 ЦВЕТА
+ Рис 9.1 ЦВЕТА ,
+затем 9.1 ЦВЕТА ,
далее экран становится чистым,и после паузы возникает надпись
- БУКВЫ
+ БУКВЫ .
А в режимах SCREEN5, SCREEN6, SCREEN7 и SCREEN8 наложения символов не
происходит!
Попробуйте "прогнать" следующий пример при различных значениях N (2÷8):
-
П р и м е р 4.
─────────────
NEW
30 FOR T=0 TO 500:NEXT 'Задержка
40 PRESET(90,90):PRINT#1,"раму"
50 GOTO 50
-
П р и м е р 5.
─────────────
NEW
·150··90
·70··90
Ok
-
Эта программа позволяет узнать координаты (X,Y) графического курсора и
координаты (α,β) т.н. графического а к к у м у л я т о р а . Когда мы ри-
суем точку (или линию), графический курсор и графический аккумулятор сов-
-падает. Различия возникают лишь при выводе текстовой информации. Графиче-
+падают. Различия возникают лишь при выводе текстовой информации. Графиче-
ский курсор устанавливается в ту точку, которую мы вывели последний раз
(оператором PSET, LINE, CIRCLE,...). Графический аккумулятор устанавлива-
ется на то место, с которого должна быть напечатана очередная буква (убе-
суем точку (PSET,LINE,...), графический курсор сразу же переходит в пози-
цию графического аккумулятора, и далее они действуют совместно до нового
оператора PRINT#.
-
П р и м е р 6 [ 76 ]. Сочетание текста и иллюстраций.
────────────────────
40 COLOR 15,15,15:SCREEN 2:OPEN"GRP:"AS#1
240 PRESET(160,102):COLOR 4:PRINT #1,"Треугольник"
270 LINE(208,118)-STEP(30,30):LINE-STEP(-30,0):LINE-STEP(0,-30)
300 GOTO 300
-
П р и м е р 7 [ 76 ]. Ввод данных в графическом режиме.
────────────────────
40 COLOR 15,15,15:SCREEN 2,0,0:OPEN"GRP:"AS #1
280 LINE (80,8)-STEP(56,8),15,BF
290 GOTO 110
- V.9. Р е ж и м SCREEN 4 (только для компьютера MSX-2)
+ V.9. Р е ж и м SCREEN 4 (только для компьютера MSX-2)
Этот режим идентичен режиму SCREEN 2 в том, что касается выбора цвета,
-графических операторов и отображения текста (см. рис.6).
+графических операторов и отображения текста (см. рис.7).
+
0 255
0┌───────────────────┐──▶X
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
│▨▨▨▨▨ SCREEN4 ▨▨▨▨▨│
│▨▨▨ 256╳192 точек▨▨│
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
- 191│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ Р и с. 6
+ 191│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
▼
Y
+ Р и с. 7
В режиме SCREEN 4,однако, имеются н о в ы е операторы для работы со
спрайтами.
A. Оператор COLOR SPRITE$ предоставляет Вам возможность изображать
В режиме SCREEN 2 для получения такого же результата обычно накладыва-
ются несколько спрайтов (см. раздел V.6.2).
Оператор, с которым мы хотим Вас познакомить, имеет следующий формат:
- COLOR SPRITE$(NS)=A$
+ COLOR SPRITE$(NS)=A$ ,
где: COLOR, SPRITE - служебные слова;
NS - арифметическое выражение, целая часть значения которого опреде-
-ляет номер сформированного в оперативной памяти спрайта;
+ляет э к р а н н ы й номер спрайта;
A$ - строковое выражение, причем значение А$ должно содержать не бо-
лее 16 символов (LEN(A$)≤16).
Каждый символ значения строки A$ воздействует на одну линию спрайта
спрайта с номером NS с другими спрайтами не будет обнаружено. Правило при-
оритета (если "накладываются" два спрайта, то спрайт с меньшим "экранным"
номером перекрывает спрайт с большим "экранным" номером) более не соблюда-
-ется. Оказывается область пересечения спрайтов имеет цвет,определяемый ре-
-зультатом логической операции OR, примененной к цветам "наложенных" спрай-
-тов.
+ется. Оказывается, область пересечения спрайтов имеет цвет, определяемый
+результатом логической операции OR, примененной к цветам "наложенных"
+спрайтов.
Более того, спрайтовые линии, отмеченные в операторе COLOR SPRITE$ и
не "затронутые" пересечением, исчезают!
-
П р и м е р 3. Пример, иллюстрирующий "работу" бита 6 спрайтовой линии.
─────────────
NEW
5) б и т 7 (крайний левый).Если этот бит равен 1,то спрайтовая линия
отображается на 32 точки левее координаты Х, заданной в операторе PUT
SPRITE;
-
П р и м е р 4. Сдвиг двух верхних спрайтовых линий с изменением цвета.
─────────────
NEW не используется
60 COLOR SPRITE$(0)=SC$ спрайтовой линии палитры
70 GOTO 70
Установите, что произойдет при нажатии любой клавиши!?
-
П р и м е р 5.
─────────────
NEW
- Ok
- 10 SCREEN 4,1
- 20 SPRITE$(0)=STRING$(8,255) не соблюдается
- 30 SC$=CHR$(&b01000111)+CHR$(&b01000111)+ правило наложения
- CHR$(&b01000111) спрайтов
- 40 PUT SPRITE 0,(120,85),8,0: │ не используется
- PUT SPRITE 1,(130,95),7,0 │ │
- 50 IF INKEY$="" THEN 50 ▼ ▼
- 60 COLOR SPRITE$(1)=SC$ 0 1 0 0 0 1 1 1
- 70 GOTO 70 ▲ ────▲─────
- │ │
- отсутствие сдвига номер
+ Ok не соблюдается
+ 10 SCREEN 4,1 правило наложения
+ 20 SPRITE$(0)=STRING$(8,255) спрайтов
+ 30 SC$=CHR$(&b01000111)+CHR$(&b01000111)+ │ не используется
+ CHR$(&b01000111) │ │
+ 40 PUT SPRITE 0,(120,85),8,0: ▼ ▼
+ PUT SPRITE 1,(130,95),7,0 0 1 0 0 0 1 1 1
+ 50 IF INKEY$="" THEN 50 ▲ ────▲─────
+ 60 COLOR SPRITE$(1)=SC$ │ │
+ 70 GOTO 70 отсутствие сдвига номер
спрайтовой линии палитры
+
+
Спрайт 0 изображается красным цветом (8), а спрайт 1 - темно-синим (7).
При нажатии любой клавиши,все линии спрайта 1, находящиеся "под" спрайтом
0, сохраняются,остальные "исчезают"(цвет пересечения - б е л ы й, так как
7 OR 8 = 15).
Oбратите внимание, что оператор COLOR SPRITE$ в строке 60 "применяет-
ся" к спрайту с "экранным" номером 1.
-
П р и м е р 6.
─────────────
NEW
50 PUT SPRITE 1,(T,95),5,1:T=T-1:NEXTI
60 GOTO 60
Если исправить 30-ю строку следующим образом:
- 30 SC$=STRING$(4,&B11100100):T=255
+ 30 SC$=STRING$(4,&B11100100):T=255 ,
то при столкновении двух спрайтов спрайт с меньшим "экранным" номером
вначале уменьшится в два раза, а затем восстановит свои размеры.
-
П р и м е р 7. Уменьшение и увеличение "высоты" спрайта при нажатии лю-
───────────── бой клавиши.
NEW
70 A$=INKEY$:IF A$="" THEN 70
80 COLOR SPRITE$(1)=E$
90 IF LEN(E$)<=8 THEN E$=E$+"0":GOTO 70 ELSE 50
-
B. Оператор COLOR SPRITE очень похож на оператор COLOR SPRITE$,но дей-
ствует на всех спрайтовых линиях спрайта с номером NS.
- Формат оператора: COLOR SPRITE(NS) = B
+ Формат оператора: COLOR SPRITE(NS) = B ,
где: COLOR, SPRITE - служебные слова;
NS - арифметическое выражение, целая часть значения которого опреде-
ляет номер сформированного в оперативной памяти спрайта;
COLOR SPRITE$(0)=STRING$(8,B)
COLOR SPRITE(0)=B
эквивалентны!
-
П р и м е р 8. Исчезновение спрайта с меньшим экранным номером при
───────────── COLOR SPRITE(0)=127 и изменение цвета области пересече-
ния спрайтов при COLOR SPRITE(0)=63 .
50 IF T=I THEN COLOR SPRITE(0)=127:FOR A=1 TO 300:NEXTA
60 PUT SPRITE 1,(T,95),7,0:T=T-1:NEXTI
70 GOTO 70
-
П р и м е р 9.
─────────────
NEW
н ы, однако, если значение B находится в диапазоне от 128 до 255, или ког-
да необходимо воздействовать на отдельные линии спрайта, следует восполь-
зоваться первым оператором.
-
П р и м е р 10. Столкновение спрайтов для оператора COLOR SPRITE(NS)=B
──────────────
NEW
90 GOTO 60 '──▶ │
100 SCREEN 0:RETURN 10 Обратите внимание на единичный пятый бит!
-
-
V.10. Р е ж и м SCREEN 5 (только для компьютера MSX-2)
-
Этот режим предлагает те же возможности работы со спрайтами, что и ре-
жим SCREEN 4. Он отличается от режима SCREEN 4 в двух пунктах:
α) р а з р е ш е н и е и в ы б о р ц в е т а .
- Экран разделен на 212 строк по 256 точек (см. рис.7).
+ Экран разделен на 212 строк по 256 точек (см. рис.8).
0 255
0┌───────────────────┐──▶X
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
│▨▨▨▨▨ SCREEN5 ▨▨▨▨▨│
│▨▨▨ 256╳212 точек▨▨│
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
- 211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ Р и с. 7
+ 211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
▼
- Y
+ Y Р и с. 8
Цвет присваивается каждой точке, причем допустимых палитр - 16.
β) э к р а н н ы е с т р а н и ц ы .
В режиме SCREEN 5 в Вашем распоряжении имеется несколько так называе-
2) страницу для в о з д е й с т в и я (а к т и в н у ю страницу).
На активной странице можно "рисовать" с помощью графических операторов.
Формат этого интересного оператора:
- SET PAGE [M],[N]
+ SET PAGE [M],[N] ,
где: SET, PAGE - служебные слова;
M, N - арифметические выражения, целые части значения которых при-
надлежат отрезку [0,3]. Первый аргумент SET PAGE указывает номер отобража-
емой страницы, а второй - номер активной страницы.
-
П р и м е р 1.
─────────────
NEW
тивизируется; рисуются 8 линий.
60 FOR I=0 TO 7:FOR J=0 TO 127
70 PSET(2*J,I+108),I+2:PSET STEP(1,0),I+3:NEXTJ,I: P=1
- 90 IF INKEY$="" THEN 90 ' Ожидание нажатия клавиши! Если клавиша нажат
- а,то номер (P) отображенной страницы изменяется оператором XOR
+ 90 IF INKEY$="" THEN 90 'Ожидание нажатия клавиши! Если клавиша нажата,
+ то номер (P) отображенной страницы изменяется оператором XOR.
100 P=P XOR 1:SET PAGE P,P 'Листание страниц!
120 GOTO 90 '──▶ ┌───────┬────────────┐
Напомним Вам диаграмму Вейча │ X │ 0 1 0 1 │
(таблицу истинности функции XOR): │ Y │ 0 0 1 1 │
- │X XOR Y│ 0 1 1 0 │
- └───────┴────────────┘
- П р и м е р 2.
- ─────────────
+ П р и м е р 2. │X XOR Y│ 0 1 1 0 │
+ ───────────── └───────┴────────────┘
Ok
10 SCREEN 5
20 FOR M=0 TO 3:SET PAGE M,M:CLS:NEXT
80 SET PAGE 3,3:CIRCLE(127,106),K+Q+7,15
90 NEXT:NEXT
100 FOR K=0 TO 3:SET PAGE K,K:NEXT:GOTO 100
-
П р и м е р 3. Бегущий человечек.
─────────────
NEW
110 FOR I=0 TO 3:SET PAGE I,I
120 FOR T=0 TO 100:NEXT:NEXT
140 GOTO 110 '──▶
-
Любопытную возможность для работы с экранными страницами предоставляет
оператор SCREEN,,,,,N (пять запятых!). Целая часть выражения, задающего
параметр N, должна принадлежать интервалу [0,3] и по умолчанию равна нулю.
этом случае на страницу с номером 3 накладывается изображение 2-й страни-
цы).
Взгляните на следующий пример:
-
П р и м е р 4.
─────────────
NEW
30 A$=INPUT$(1) 'Задержка до нажатия клавиши
40 SCREEN ,,,,,2 'Обратите внимание на величину последнего параметра!
50 A$=INPUT$(1)
-
Обратим Ваше внимание на то, как можно осуществить к о п и р о в а -
н и е изображения из одной области экрана в другую на компьютерах серии
MSX-1.
бражения, которые находятся с помощью функции POINT. Затем эти данные ис-
пользуются в операторе PSET для переноса отмеченных точек в другое место
экрана.
-
П р и м е р 5 [ 76 ]. Копирование участка экрана
─────────────────────
20 CLEAR:DEFINT A-Z
530 DATA 30,28,80,28
Заметим, что в массиве чтение и запись данных выполняются невыносимо
медленно, поэтому нужно запастись терпением!
+
Ниже мы познакомим Вас еще с одним весьма мощным оператором MSX-BASIC -
оператором COPY, который пересылает блок экрана в другое место экрана (на
этой же или другой странице).
Фактически, имеется ш е с т ь вариантов этого оператора.
-
В а р и а н т 1
┌───────────────────────────────────────────────────────────────┐
│ { [T]XOR } │
│ AND │ SC = C AND S │
│ PSET │ SC = C │
│ PRESET │ SC = 16+(NOT C) │
- └────────┴─────────────────┘
+ └────────┴─────────────────┘ ,
где S, SC, C - арифметические выражения, целые части значений которых оп-
ределяют:
S - цвет изображения или фона до копирования;
го прямоугольника окрашивается в тот цвет, который она имела до копирова-
ния, а при выполнении оператора COPY с параметром PRESET каждая точка ко-
пируемого прямоугольника окрашивается в "противоположный" цвет.
-
П р и м е р ы:
─────────────
6) NEW 7) NEW
80 PSET(205,10),1:?#1,POINT(210,5) При нажатии на любую клавишу
90 PSET(205,50),1:?#1,POINT(210,45) Вы получите изображение другой
100 GOTO 100 экранной страницы.
-
Испытайте логические операции PRESET,
AND,OR,XOR, изменяя последний параметр в строке 70.
-
8) NEW
Ok
10 COLOR 15,3,4:SCREEN 5:OPEN"GRP:"AS#1:SET PAGE 0,0
80 PSET(205,10),1:PRINT#1,POINT(210,5)
90 PSET(205,50),1:PRINT#1,POINT(210,45)
100 A$=INPUT$(1)
-
9) NEW
Ok
5 OPEN"grp:"AS#1
быстрее осуществляется смена изображений и чем меньше расстояние между
двумя "кадрами", тем эта иллюзия полнее. Если осуществлять смену кадров
с достаточно высокой скоростью, то можно добиться исчезновения эффекта ми-
-гания изображения. Однако, учтите, что скорость смены кадров ограничена
-производительностью компьютера.
+гания изображения. Однако учтите,что скорость смены кадров ограничена про-
+изводительностью компьютера.
П р и м е р 10.
──────────────
20 LINE (73,63)-(100,100),13,,XOR
30 PRINT #1,POINT(73,63)
40 GOTO 40
-
Отметим, что наличие префикса T перед параметрами XOR, OR, AND, PSET,
PRESET никак не влияет на выполнение логических операций над кодом цвета!
-
П р и м е р 13.
──────────────
5 OPEN"grp:"AS#1
70 PRESET(90,120):PRINT #1,"Цвет прямоуг. :";Y ' Вывод цвета
80 I$=INPUT$(1)
+
В а р и а н т 2
+
Этот оператор позволяет запоминать цвета всех точек заданной прямо-
угольной области экрана дисплея и хранить их номера в виде числового мас-
сива (или в файле данных); далее этот оператор по Вашему желанию может
COPY изображение воспроизводится достаточно быстро для того, чтобы можно
было синтезировать движение объектов на экране.
Формат оператора:
+
┌──────────────────────────────────────────────────────┐
│ COPY (X1,Y1)-(X2,Y2), stri ТО {И м я массива} │
- │ {И м я файла } │
+ │ {И м я файла } │ ,
└──────────────────────────────────────────────────────┘
+
где: (X1,Y1)-(X2,Y2) - параметры, указывающие позицию копируемого блока
и "работающие" точно так же,как в операторе LINE (X1,Y1)-(X2,Y2),C,BF
(наличие этих параметров обязательно);
│ { [T]OR } │
│ COPY {И м я массива} [,napr] ТО (X3,Y3), strp,{ [T]AND } │
│ {И м я файла } { [T]PSET } │
- │ { [T]PRESET} │
+ │ { [T]PRESET} │ ,
└───────────────────────────────────────────────────────────────┘
где: napr - необязательный параметр, дающий возможность "поворачивать"
блок изображения. Он может принимать следующие значения:
└ 8 ┘ ления целой части.
На языке MSX-BASIC это "звучит" как
INT( (4* (ABS(X1-X2)+1) * (ABS(Y1-Y2)+1) +7)/8 )+4
-
П р и м е р 15.
──────────────
Ok
35 SCREEN 0:FOR I=1 TO 150:PRINT A%(I);:NEXT
40 PRINT"Изображение записано":L$=INPUT$(1)
50 SCREEN 5:COPY A% TO (77,56),0:L$=INPUT$(1)
-
После выполнения программы наберите команду goto 50 и нажмите клавишу
-"RETURN"... Пожалуйста, проанализируте полученный результат!
-
+"RETURN"... Пожалуйста, проанализируйте полученный результат!
П р и м е р 16.
──────────────
Ok
10 SCREEN 5
20 COPY "okr" TO (25,30),0 'Вывод информации с диска на экран
30 GOTO 30
-
П р и м е р 17. Пример копирования изображения на экране дисплея в
───────────── массив, а из массива - в новое место экрана.
NEW
40 A$=INKEY$:IF A$="" THEN 40
50 COPY AK,0 TO (150,150),0
70 A$=INKEY$:IF A$="" THEN 70
-
П р и м е р 18. Иллюстрация действия параметра PRESET
──────────────
Ok
35 A$=INPUT$(1) ▼
40 COPY(100,100)-(190,130) TO (100,0),,PRESET
50 GOTO 50
-
П р и м е р 19.
─────────────
Ok
┌──────────────────────────────────────────┐
│ COPY и м я файла ТО и м я массива │
└──────────────────────────────────────────┘
-
П р и м е р 20.
──────────────
Ok
60 COPY "Dima" TO AB:COPY AB TO (40,40)
70 GOTO 70
+
В а р и а н т 6
Давайте все-таки обсуждать вкус ананаса
с теми, кто его не ел!
щим от внешнего источника видеосигнала.
Для этой цели имеется оператор
┌──────────────────────────────┐
- │ SET VIDEO R,Y,C,S,A,V,R │
+ │ SET VIDEO R,Y,C,S,A,V,R │ ,
└──────────────────────────────┘
где: SET, VIDEO - служебные слова;
R - числовой параметр, значение которого определяет источник видео-
│ Отметим, что оператор COPY можно использовать в режимах │
│ SCREEN 5, SCREEN 6, SCREEN 7, SCREEN 8 │
└───────────────────────────────────────────────────────────┘
-
П р и м е р 19.
──────────────
NEW
с о б).
- V.11. Р е ж и м SCREEN 6 (только для компьютера MSX-2)
+ V.11. Р е ж и м SCREEN 6 (только для компьютера MSX-2)
- Экран в режиме SCREEN 6 такой же, как и в режиме SCREEN 5 (см.рис.7),
+ Экран в режиме SCREEN 6 такой же, как и в режиме SCREEN 5 (см.рис.8),
но могут использоваться только 4 цвета.
0 511
0┌───────────────────┐──▶X
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
│▨▨▨▨▨ SCREEN6 ▨▨▨▨▨│
│▨▨▨ 512╳212 точек▨▨│
- │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ Р и с. 8
+ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
- ▼
+ ▼ Р и с. 9
Y
CLS устанавливает цвет ф о н а, имеющий номер 0 (прозрачный).
Для установления цветов можно выбирать номер, лежащий в пределах от 0
+
V.12. Р е ж и м SCREEN 7 (только для компьютера MSX-2
с видеопамятью 128 Кбайтов)
-
┌─────────────────────────────────────────────────────────────┐
│ Этот режим максимально удобен для многоцветных рисунков! │
└─────────────────────────────────────────────────────────────┘
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
│▨▨▨▨▨ SCREEN7 ▨▨▨▨▨│
│▨▨▨ 512╳212 точек▨▨│
- │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ Р и с. 9
+ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
- ▼
+ ▼ Р и с. 10
Y
Этот режим похож на режим SCREEN 6, но:
1) экранные страницы нумеруются от 0 до 1;
2) допускается одновременное использование 16 цветов.
+
Формула, необходимая для вычисления размера массива, принимающего дан-
ные блока экрана, та же, что и в SCREEN 5:
┌ (4·│X1-X2│+1)·(│Y1-Y2│+1)+7 ┐
└ 8 ┘ ления целой части.
-
V.13. Р е ж и м SCREEN 8 (только для компьютера MSX-2
с видеопамятью 128 Кбайтов)
-
Экран содержит 212 строк по 256 точек, как в SCREEN 5.
0 255
0┌───────────────────┐──▶X
│▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
│▨▨▨▨▨ SCREEN8 ▨▨▨▨▨│
│▨▨▨ 256╳212 точек▨▨│
- │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ Р и с. 10
+ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│
211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘
▼
- Y
+ Y Р и с. 11
Этот режим характеризуется количеством цветов, которые могут выводить-
ся одновременно. Цвет каждой точки кодируется в одном байте, и следова-
тельно, имеет значения, лежащие в пределах от 0 до 255. Они кодируются
Например, 10 SCREEN 8
20 PSET(3,0),&B11100000:PSET(5,10),&B00000011
30 GOTO 30
- Цвета изображения, фона и бордюра определяются как в режиме SCREEN 2
+ Цвета изображения, фона и бордюра определяются - как в режиме SCREEN 2,
посредством оператора COLOR (или графических операторов для цвета текста),
но значения лежат в пределах от 0 до 255.
Введенное значение и пропорции цвета соотносятся следующим образом:
ц в е т = 32*G+4*R+B
В SCREEN 8 палитры не используются: желаемые оттенки задаются непосред-
ственно.
-
П р и м е р. NEW
─────────── Ok
10 SCREEN 8:FOR I=0 TO 255:COLOR,I:CLS
40 FOR J=0 TO 300:NEXT J,I
-
Имеются только д в е экранные страницы, как и в режиме SCREEN 7.
Формула, необходимая для вычисления размера массива, принимающего ко-
пию блока экрана, имеет следующий вид:
дает запрос на ввод координат, которые будут задаваться в операторе COPY,
а также просит указать,какой режим графического вывода будет использовать-
ся.
-
П р и м е р.
───────────
NEW
Ok
-
V.14. Д о п о л н е н и е
-
1. П р и м е р простейшего г р а ф и ч е с к о г о редактора [22].
───────────
Редактор позволяет не только рисовать стрелками, но и включать-отклю-
ружности нужно нажать на клавишу "О", после чего ввести значение радиуса
(окончание ввода - нажатие на клавишу "RETURN"). Нажатие на "Z" и ввод ве-
личин R (радиус окружности, проходящей через вершины звезды), N (количест-
-во вершин) и M=2 позволяет построить звезду. Для ввода чисел использует-
+во вершин) и M=2 позволяют построить звезду. Для ввода чисел использует-
ся подпрограмма "ВВОД".
NEW
Ok
170 FOR Q=0 TO 64 STEP 16:M=M+1 ' Стирание "бяки", возникающей
180 PUT SPRITE M,(Q,175),1,0 ' на экране
190 NEXT:VDP(1)=VDP(1) XOR 64 ' Включение экрана
- 200 FOR I=0 TO 7:LOCATE I,22,1
- 210 NEXT:YW=YW+1
+ 200 FOR I=0 TO 7: LOCATE I,22,1: NEXT: YW=YW+1
220 IF YW=20 THEN LOCATE 0,22:PRINT J$(FC):FC=FC+1:YW=0 'Замена "бяки"
230 IF FC=5 THEN FC=1
240 GOTO 200
-
+ 4. Программа, позволяющая сохранять на диске заранее построенное графи-
+ческое изображение и загружать его в видеопамять с дискеты.
+ 10 OPEN "GRP:" AS #1: COLOR 10,1,1: SCREEN 2,0: PSET(128,6)
+ 40 FOR I=1 TO 101
+ 50 X=128+90*SIN(I*3.14*87/101):Y=96-90*COS(I*3.14*87/101):LINE-(X,Y)
+ 80 NEXT I
+ 90 DATA &H21,&H00,&H00,&H11,&H00,&H90,&H01,&H00,&H18,&HCD,&H59,&H00,
+ &HC9
+ 100 FOR I=0 TO 12: READ R: POKE &H8FF0+I,R: NEXT I
+ 140 DEF USR=&H8FF0: Z=USR(Z)
+ 160 POKE &H8FF2,&H20: POKE &H8FF5,&HA8: Z=USR(Z)
+ 190 BSAVE "Картинка.рис",&H9000,&HC000
+ 210 LINE(0,0)-(255,191),1,BF ' Начало воспроизведения рисунка
+ 220 DATA &H21,&H00,&H90,&H11,&H00,&H00,&H01,&H00,&H18,&HCD,&H5C,&H00,
+ &HC9
+ 230 FOR I=0 TO 12: READ R: POKE &H8F00+I,R: NEXT I
+ 270 DEF USR=&H8F00: BLOAD "Картинка.рис": Z=USR(Z)
+ 300 POKE &H8F02,&HA8: POKE &H8F05,&H20: Z=USR(Z)
+ 330 GOTO 330
К а н а - слоговая азбука японского письма
(результат графического сокращения иерогли-
- фов).Существует (с.18 в.) в двух вариантах:
- катакана (используется для записи заимство-
- ванных слов) и хирагана (используется для
- собственно японских слов).
+ фов). Существует (с XVIII в.) в двух вари-
+ антах: катакана (используется для записи
+ заимствованных слов) и хирагана (использу-
+ ется для собственно японских слов).
Советский Энциклопедический словарь
-
- 4. А теперь о "загадочном" операторе
+ 5. А теперь о "загадочном" операторе
┌────────────┐
│ PUT KANJI │ .
└────────────┘
Приведем небольшой пример:
- 10 SCREEN 5:COLOR 15,0,0
- 20 M$="National":M=LEN(M$)
- 30 FOR X=1 TO M
- 40 CD=&H2300+ASC(MID$(M$,X,1)) 'Видимо, &H2300 - адрес?!
- 50 PUT KANJI (X*16-5,20),CD,11
- 55 PUT KANJI (X*16-5,70),CD,11
- 57 PUT KANJI (X*16-8,90),CD,11
- 60 NEXT:A$=INPUT$(1):SCREEN 0:LIST
+ 10 SCREEN 5: COLOR 15,0,0: M$="National": M=LEN(M$)
+ 20 FOR X=1 TO M
+ 30 CD=&H2300+ASC(MID$(M$,X,1)) 'Видимо, &H2300 - адрес?!
+ 40 PUT KANJI (X*16-5,20),CD,11
+ 50 PUT KANJI (X*16-5,70),CD,11
+ 60 PUT KANJI (X*16-8,90),CD,11
+ 70 NEXT: A$=INPUT$(1): SCREEN 0: LIST
Выполнив эту программу на компьютере, Вы получите на экране дисплея ок-
рашенные горизонтальные полосы. Видимо (это всего лишь наше предположе-
ние!), оператор PUT KANJI позволяет выводить на экран японские иероглифы,