====== Глава V ====== |{{..author_files:005.msx|}}|{{..author_files:005.txt|}}|[[..005|]]| [[msx:basic_dialogue_programming_language:files:005_del|]] @@ -1,12 +1,10 @@ -c1E +\/d ГЛАВА V. ГРАФИЧЕСКИЕ СРЕДСТВА MSX-BASIC - - +\/d- Лучше один раз увидеть, чем сто раз услышать. Пословица - До появления цветной машинной графики результаты работы компьютера бы- ли трудны для восприятия. Важная информация терялась среди второстепенной. Машинные игры, например, больше напоминали утомительную работу. Одной из @@ -31,12 +29,9 @@ В разделах V.1-V.8 мы будем говорить о графических средствах ПЭВМ се- рии MSX-1, которые для компьютеров серии MSX-2 изменениям не подверглись! - - V.1. ОПЕРАТОР SCREEN В ПРОСТЕЙШЕМ СЛУЧАЕ (для компьютера MSX-1) - На компьютерах серии MSX-1 существуют четыре режима работы дисплея:два т е к с т о в ы х (символьных) режима и два г р а ф и ч е с к и х, служа- щих для индикации соответственно текстовой (символьной) и графической ин- @@ -46,7 +41,7 @@ тем высвечивания точек различным цветом. Переключение с одного режима работы на другой (или, как говорят, "с од- ного экрана на другой") осуществляется оператором - SCREEN n + SCREEN n , где: SCREEN("screen"-"экран") - служебное слово; n - арифметическое выражение, целая часть значения которого должна принадлежать отрезку [0,3]; этот параметр указывает режим работы дисплея: @@ -62,7 +57,7 @@ SCREEN0. Этот режим обычно используется для ввода программ или для работы с программами редактирования текстов. Ясно,что в режиме высокого разрешения экран разбивается на большее чис- -ло точек, чем в режиме низкого разрешения. Вследствие этого, в первом слу- +ло точек, чем в режиме низкого разрешения. Вследствие этого в первом слу- чае точки оказываются гораздо меньшего размера,благодаря чему изображение может содержать существенно большее число деталей. Отметим, что т о л ь к о в символьных режимах допустимо применение @@ -73,12 +68,11 @@ Любая пара целых чисел (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 │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ @@ -87,10 +81,8 @@ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ 191│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ 47│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ ▼ Y ▼ Y - - Р и с. 1 - - Отметим, что система координат, изображенная на рис.1, используется + Р и с. 3 + Отметим, что система координат, изображенная на рис.3, используется также в таких микроЭВМ, как APPLE, TRS-80, IBM, ATARI. В любой момент времени одна из точек (α,β) экрана находится в особом состоянии или, как говорят, отмечена г р а ф и ч е с к и м к у р с о - @@ -101,26 +93,22 @@ Заметим, что текущие координаты 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] для ре- @@ -132,7 +120,6 @@ ─────────── 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 . @@ -142,38 +129,30 @@ мент оператора 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 - арифметическое выражение,целая часть значения которого задает но- мер экранного столбца, в котором находится курсор (столбцы нумеруются сле- @@ -190,7 +169,7 @@ "Illegal function call" ("Н е п р а в и л ь н ы й в ы з о в ф у н к ц и и"). Любой параметр оператора LOCATE может быть опущен,но запятые(запятая!), -определяющие его позицию, обязательно должны присутствовать. Если X,или Y, +определяющие его позицию, обязательно должны присутствовать. Если X или Y, или α опущены, то сохраняются их предыдущие значения.Примеры записи опера- тора: LOCATE 25,10,1 LOCATE 15,,1 LOCATE 9 LOCATE ,,1 @@ -198,14 +177,11 @@ Оператор 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'Вначале очистим экран! @@ -217,10 +193,8 @@ ·····█ ◀── 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 @@ -230,27 +204,23 @@ ···· 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 важен! @@ -258,9 +228,7 @@ X,X^2 30 NEXTX:FORI=(22-CSRLIN)*POS(0)TO(23-CSRLIN)*39:?CHR$(32);:NEXT:A$= INPUT$(1) - - - Функция POS(α) + Функция POS(α) , где: POS("POSition"-"позиция") - служебное слово; α - числовая константа (при выполнении функции не используется, но обязательно должна быть указана при обращении); возвращает в символьных @@ -275,19 +243,13 @@ Например: 25 IF LPOS(0)>10 THEN LPRINT X ELSE LPRINT TAB(10):LPRINT X - - V.4. БАЗОВЫЕ ГРАФИЧЕСКИЕ ОПЕРАТОРЫ MSX-BASIC - - Я думаю, что чертежи очень полезное средство - против неопределенности слов. - Г.В.Лейбниц - - + Я думаю, что чертежи - очень полезное сред- + ство против неопределенности слов. + Г.Лейбниц V.4.1. О п е р а т о р COLOR д л я к о м п ь ю т е р а MSX-1 - На экране дисплея можно выделить три отдельные области: передний план, фон и бордюр. П е р е д н и й п л а н (изображение) - область,где распо- лагаются цифровые и текстовые данные и графические изображения,которые на- @@ -304,7 +266,7 @@ Оператор COLOR позволяет задавать различные цвета фона, бордюра и изо- бражения,выводимого на передний план. Его синтаксис: - COLOR [I],[F][,B] + COLOR [I],[F][,B] , где: COLOR("color"-"цвет") - служебное слово; I - арифметическое выражение, целая часть значения которого задает код цвета изображения (по умолчанию I=15); @@ -316,14 +278,12 @@ Приведем коды 15 возможных цветов для многоцветных дисплеев. Для моно- хроматических (от греч."μоvoσ"-"один") дисплеев эти коды задают различные оттенки черного и зеленого цветов. - 0:прозрачный; 5:светло-голубой; 10:темно-желтый; 1:черный; 6:темно-красный; 11:светло-желтый; 2:зеленый; 7:голубой; 12:темно-зеленый; 3:светло-зеленый; 8:красный; 13:васильковый; 4:темно-голубой; 9:светло-красный; 14:серый; 15:белый. - - Отметим, что объект прозрачного цвета всегда преобретает цвет бордюра, + Отметим, что объект прозрачного цвета всегда приобретает цвет бордюра, а бордюр "нулевого" цвета - черный (поэтому возможных цветов не 16, а 15)! Полное отсутствие параметров в операторе COLOR приводит к появлению на экране дисплея сообщения об ошибке @@ -352,18 +312,15 @@ пую" в непосредственном режиме наберите, например, команду 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)! @@ -396,7 +353,7 @@ α) во время выполнения оператора COLOR в режиме SCREEN 2 изменяется только цвет бордюра, а не цвет изображения или фона; β) цвет фона изменится только в том случае,если после выполнения опера- -тора COLOR будет выполнен оператор CLS (см. ниже раздел 4.3); +тора COLOR будет выполнен оператор CLS (см. ниже раздел V.4.3); Для проверки вышесказанного сравните следующие программы: 10 SCREEN 2:COLOR 1,15,6 @@ -413,23 +370,18 @@ фона и бордюра соответственно можно получить, выполнив в непосредственном режиме команду 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 │ ├───────┼───────────────┼───┼───┼───┤ @@ -450,15 +402,14 @@ │ 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 различных оттенков каждого цвета. @@ -466,7 +417,7 @@ л и т р ы" вместо термина "номер цвета", принятого на компьютерах серии MSX-1. Отметим, что оператор SCREEN устанавливает палитры в начальное положе- -ние. Однако, для установки палитры без стирания экрана используйте опера- +ние. Однако для установки палитры без стирания экрана используйте опера- тор: COLOR=NEW или COLOR ┌────────────────────────────────────────────────────────────────┐ │ Обратите внимание на то, что палитра не может быть изменена │ @@ -476,13 +427,11 @@ здесь являются запрещенными! - V.4.3. О п е р а т о р CLS - Существует быстрый способ получить чистый(свободный от изображения) эк- ран дисплея определенного цвета. Оператор - CLS + CLS , где CLS("to CLear Screen"-"очищать экран") - служебное слово; окрашивает весь экран цветом фона,не меняя положения графического курсора в графичес- ких режимах (в символьных режимах после действия CLS курсор помещается в @@ -503,11 +452,11 @@ ного" программирования! Так оратор откашливается перед выступлением, забо- тясь о том, чтобы все слова донести до слушателей. - V.4.4. О п е р а т о р PSET . О п е р а т о р PRESET + V.4.4. О п е р а т о р PSET . О п е р а т о р PRESET Первая форма записи оператора PSET: - I. PSET[@](Х,У)[,С] + I. PSET[@](Х,У)[,С] , где: PSET("to SET Point"-"установить точку") - служебное слово; X - арифметическое выражение, целая часть значения которого опреде- ляет x-координату точки (номер колонки); @@ -519,7 +468,7 @@ выполнение; он используется только для совместимости с другими версиями языка BASIC. При попытке использовать оператор PSET в символьных экранах SCREEN 0 и -SCREEN 1, компьютер сообщает об ошибке: +SCREEN 1 компьютер сообщает об ошибке: "Illegal function call" . Целые части значений X и Y должны принадлежать отрезку [-32768,32767], а целая часть значения C должна находиться на отрезке [0,15];по умолчанию @@ -539,11 +488,11 @@ 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 создает на экране изображение одной"точки", поэтому любое изменение цвета"маленькой" точки в этом блоке @@ -551,17 +500,14 @@ Итак, вследствие неизбежного побочного эффекта "перетекания цветов",Вы должны быть очень аккуратны, применяя оператор 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 @@ -570,16 +516,14 @@ :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) задает смещение координат изображаемой @@ -596,14 +540,12 @@ 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 @@ -619,30 +561,24 @@ 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) за- @@ -662,34 +598,29 @@ цветом, код которого определяется значением 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 @@ -698,7 +629,6 @@ 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") @@ -717,7 +647,6 @@ 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 @@ -725,7 +654,6 @@ 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)), можно "подхватить"линию с точки, где "остановился" предыдущий оператор, т.е.,например, связать прямые линии между собой в ломаную линию. @@ -734,19 +662,16 @@ сования был приостановлен! Если же в операторе указан параметр 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 @@ -757,10 +682,8 @@ 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 @@ -770,14 +693,12 @@ 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 @@ -791,7 +712,6 @@ 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 @@ -812,23 +732,20 @@ 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 @@ -838,18 +755,16 @@ 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' Вложенные прямоугольники @@ -858,26 +773,20 @@ 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, никак не влияющий на его выполнение; @@ -912,7 +821,7 @@ Заметим, что если любой из параметров α,β является отрицательным,то ис- пользуется его абсолютное значение; при этом соответствующий конец дуги соединяется с центром линией радиуса (это необходимо при построении сек- -торных диаграмм); к сожалению компьютер "не различает" значения парамет- +торных диаграмм); к сожалению, компьютер "не различает" значения парамет- ров α и β,равные (-0) и 0, однако его можно "обмануть",если вместо -0 ука- зать, например, -0.001; γ - арифметическое выражение, значение которого задает коэффициент @@ -927,7 +836,7 @@ b) вертикальную полуось эллипса, если γ>1; c) горизонтальную полуось эллипса, если γ<1. Отметим, что любой необязательный параметр (STEP,C,α,β,γ) может быть -опущен - однако, соответствующие запятые в записи оператора должны указы- +опущен, однако соответствующие запятые в записи оператора должны указы- вать на его отсутствие. После последнего параметра запятая не нужна. В результате выполнения оператора CIRCLE компьютер нарисует эллипс(или его дугу), после чего графический курсор переместится в точку (R,Y)! Одна- @@ -961,20 +870,17 @@ │ 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 @@ -983,7 +889,6 @@ ,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 @@ -992,7 +897,6 @@ CIRCLE STEP(10,0),50,4,,,.5: 30 GOTO 30 CIRCLE STEP(0,0),50,15,,,.5: NEXT:GOTO20 - 8) NEW Ok 5 '"Вороне где-то бог послал кусочек сыру..." @@ -1004,7 +908,6 @@ 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 @@ -1012,7 +915,6 @@ 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]. @@ -1022,7 +924,6 @@ 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 @@ -1030,11 +931,9 @@ 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) @@ -1048,16 +947,15 @@ 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 всегда возвращает н у л ь . @@ -1074,7 +972,6 @@ β) определения цвета границы; γ) определения, было ли столкновение движущегося на графическом экране объекта с другим объектом, также находящимся на графическом экране. - П р и м е р ы: ───────────── 1) NEW @@ -1084,10 +981,8 @@ 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 @@ -1098,7 +993,6 @@ 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) принадлежит ф о н у! Другой способ закраски точки на гра- @@ -1161,7 +1055,6 @@ ляется частью "глубоко" вложенных друг в друга циклов FOR...NEXT или под- программ, или же если контур, ограничивающий закрашиваемую область, имеет достаточно сложную форму. - П р и м е р ы: ───────────── 1) NEW 2) NEW @@ -1173,7 +1066,6 @@ 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 @@ -1181,10 +1073,8 @@ (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 @@ -1194,21 +1084,17 @@ V.4.8. В ы в о д р и с у н к о в на п р и н т е р - - ...Вы печатаете на клавиатуре заклинание, и вот экран дисплея - оживает, показывая объекты, которых не было и не может быть ни- - когда. Ф.П.Брукс - Твердая копия - зафиксированное на бумажном носителе изображение - на экране дисплея. - Толковый словарь по вычислительной технике и программированию - + ...Вы печатаете на клавиатуре заклинание, + и вот экран дисплея оживает, показывая + объекты, которых не было и не может быть + никогда. + Ф.Брукс А сейчас мы научим Вас выводить на печатающее устройство (принтер) ри- сунки, изображенные компьютером на экране дисплея. Для этого используем вспомогательную подпрограмму, записанную в двоичных кодах, загрузка кото- рой в оперативную память компьютера осуществляется подпрограммой с именем HARDCOPY.BAS . - П р и м е р 1 [14]. Восстановим облик хищного тираннозавра (ящера-раз- ───────────────── бойника), жившего в мезозойскую эру (он достигал высоты 5 м, длины 14 м). @@ -1263,19 +1149,17 @@ 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]. В пространстве берется некоторый исходный треугольник и над ним выпол- няется следующая процедура. Находятся средние точки всех сторон треуголь- ника и переносятся (не обязательно в одной плоскости) на расстояние, про- @@ -1321,7 +1205,6 @@ 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 - Заметим, что вместо треугольников в алгоритме могут рассматриваться и четырехугольники, при этом процедура деления лишь незначительно изменится. Разбиение четырехугольника показано на рисунке: @@ -1333,8 +1216,8 @@ │ │ │ │ │ │ - │ │ Р и с. 2 └───────────────────────────────────────────────────┘ + Р и с. 4 Четыре ребра первоначального (закрашенного) четырехугольника разбивают- ся с применением случайной функции, в результате чего вычисляются коорди- наты точек P1, P2, P3 и P4. С помощью этих точек, а также случайной функ- @@ -1342,7 +1225,6 @@ Таким образом, из начальной аппроксимации получается множество четырех- угольников. Наконец, производится удаление скрытых поверхностей и применя- ется соответствующая модель закраски. - П р и м е р 3 [14]. ───────────── NEW @@ -1377,10 +1259,9 @@ 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 @@ -1433,9 +1314,8 @@ 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"Для вывода полученного графика на принтер на @@ -1481,7 +1361,7 @@ ··· ··· ··· 1030 DATA 36,FF,1B,4E,0F,1B,41,1B,3C,0D,0A,FF - П р и м е р 6. Обратите внимание на подпрограмму вывода на принтер + П р и м е р 6. Обратите внимание на подпрограмму вывода на принтер - ───────────── она написана на "чистом" MSX-BASIC ! NEW Ok @@ -1539,12 +1419,11 @@ V.5. ГРАФИЧЕСКИЙ МАКРОЯЗЫК GML - В MSX-BASIC входит оператор DRAW, который позволяет изображать на экра- не дисплея рисунки, составленные из различных комбинаций прямых линий. На- чиная с последней высвеченной на экране точки, с помощью оператора DRAW можно провести линию любой длины и в любом из 8 заданных направлений (см. -рис.2). После этого можно провести еще одну линию, снова любой длины и в +рис.5). После этого можно провести еще одну линию, снова любой длины и в любом из тех же восьми направлений и т.д. Каждая проводимая линия может быть окрашена в любой из 15 допустимых цветов. Кроме того,можно проводить отрезок, соединяющий текущую точку с любой точкой, заданной абсолютными @@ -1553,13 +1432,12 @@ Оператор DRAW - мощный оператор, являющийся по существу настоящим мини -языком в MSX-BASIC. Этот язык называется графическим м а к р о я з ы - к о м GML("Graphics Macro Language"). - Записывается оператор в виде - DRAW β + Записывается оператор в виде: DRAW β , где: DRAW("to draw"-"рисовать") - служебное слово; β - строковое выражение, значение которого определяет рисунок. Значение β составляется из последовательности команд GML. Обратите вни- мание на то, что значение параметра β всегда заключено в кавычки, посколь- -ку это обычная строка MSX-BASICa, состоящая из команд языка GML, констант +ку это обычная строка MSX-BASIC, состоящая из команд языка GML, констант и строковых переменных. Длина β не должна превышать 255 символов.Для удоб- ства чтения текста программы команды можно разделять пробелами. Каждая ко- манда GML представлена одиночной ключевой буквой, за которой следует один @@ -1571,7 +1449,7 @@ Ключевая буква Аргумент Ключевая буква Аргументы Команды GML в основном предназначены для перемещения графического кур- сора из одних точек экрана в другие с одновременным вычерчиванием соединя- -ющих их отрезков. Однако, они могут модифицироваться следующим образом. +ющих их отрезков. Однако они могут модифицироваться следующим образом. 1. Перед командой перемещения ставится п р е ф и к с (приставка) B.Тог- да положение курсора изменяется, но линия не рисуется. 2. Перед командой перемещения ставится префикс N.Тогда курсор возвраща- @@ -1581,7 +1459,6 @@ α) какова текущая позиция графического курсора; β) в какую позицию Вы собираетесь его перевести; γ) хотите ли Вы провести линию при его перемещении. - 1. Команда перемещения βn служит для перемещения графического курсора по направлению β с рисованием прямой линии. Здесь: β - указатель одного из 8 возможных направлений: β ∈ {R,E,U,H, @@ -1592,8 +1469,9 @@ "Left"-"левый" \ │ ╱ "Right"-"правый" L◀── ──▶ R ╱ │ \ - G ▼ F Рис.3 - "Down"-"вниз" D ───── + G ▼ F + "Down"-"вниз" D + Р и с. 5 n - целое положительное число, задающее величину смещения курсора (выраженную в точках экрана). При выполнении команды курсор смещается от своего текущего положения @@ -1602,11 +1480,9 @@ последней упомянутой точки на 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 - абсолютные координаты. @@ -1614,7 +1490,6 @@ ку (160,100), оставляя при этом след в виде закрашенных точек. Оператор DRAW"BM160,100" перемещает графический курсор в ту же позицию (160,100), но префикс B делает это перемещение невидимым! - П р и м е р [6]. Изображение картины взрыва. ─────────── 5 COLOR 1,15,4:SCREEN2:LINE(105,65)-(225,146),1,BF @@ -1623,7 +1498,6 @@ 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 - относительные коорди- @@ -1633,29 +1507,26 @@ на 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 на все последую- @@ -1695,22 +1566,18 @@ 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 @@ -1723,7 +1590,6 @@ 1c1d3c15d1c1r2l5c15e3r6u2c1d5g3l8g2d3l5g8u18l5d30e15d25r15l15g15d18 l3d2" 90 IF XCHR$(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. Фильм (чередование спрайтов на одном и том же месте эк- ────────────── рана дисплея). @@ -2030,7 +2175,6 @@ 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 можно сделать некоторые выводы о назначе- нии "экранного" номера спрайта. α) "Экранный" номер показывает нам номер "пятна" (спрайта) на экране. @@ -2048,7 +2192,6 @@ давать" цветные спрайты,накладывая их образы друг на друга.При этом важно отметить,что спрайт с меньшим экранным номером "накладывается" на спрайты, имеющие большие экранные номера. - П р и м е р 13. Цветные спрайты. ────────────── NEW @@ -2077,7 +2220,6 @@ 85 PUTSPRITE 3,(141,94),11,1 87 PUTSPRITE 4,(141,94),1,2 90 GOTO 90 - П р и м е р 14. Движение цветных (!) спрайтов. ────────────── NEW @@ -2090,7 +2232,6 @@ 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 строки) можно разместить не более ч е т ы р е х спрайтов, а осталь- ные спрайты с более высокими "экранными" номерами останутся невидимыми! @@ -2134,8 +2275,8 @@ Экран 0┌──────────┐ │ · │ │─┘ Фоновый экран Образ │ │ │· │─┘ Основной экран спрайта с │ ██ │ │───┘◀── для спрайта 31 - "экранным" ────────▶ ██ │ │ Р и с. 5 - номером 0 │ │─┘◀── для спрайта 1 ──────── + "экранным" ────────▶ ██ │ │ + номером 0 │ │─┘◀── для спрайта 1 └──────────┘◀── для спрайта 0 На рисунке изображен ряд параллельных прозрачных пластинок, которые мы будем называть э к р а н а м и. Экраны введены для того, чтобы: @@ -2165,15 +2306,10 @@ Сквозь незанятые позиции основного экрана "просвечивают" ф о н о в ы й экран и окаймляющая его цветная рамка. - - V.6.3. С т о л к н о в е н и е с п р а й т о в - "Да сделайте же, наконец, CALL NETEND !", - крик, вырвавшийся из уст пользователя MSX-2. - - С т о л к н о в е н и е м с п р а й т о в мы считаем: α) для п р о г р а м м и с т а - наложение на экране одной или не- скольких точек их образов. Следует отметить,что столкновение спрайтов про- @@ -2182,7 +2318,7 @@ β) для к о м п ь ю т е р а - совпадение е д и н и ч н ы х битов в об- разах спрайтов, за исключением тех случаев, когда цвет хотя бы одного спрайта установлен в 0 (тогда столкновение не обнаруживается!). - Оператор ON SPRITE GOSUB n + Оператор ON SPRITE GOSUB n , где: ON ("по"), SPRITE, GOSUB - служебные слова; n - номер программной строки, приводит в состояние готовности режим передачи управления подпрограмме, @@ -2202,7 +2338,6 @@ кновение спрайтов произошло, то этот факт "запоминается", но никаких дей- ствий не происходит; однако,если позже компьютер встретит оператор SPRITE ON, то будет обработано ранее зафиксированное прерывание. - П р и м е р 1. Сравните, пожалуйста,результаты работы приведенных ниже ───────────── программ. NEW NEW @@ -2219,7 +2354,6 @@ 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 не поможет!). Укажем один из способов определения, какие именно спрайты столкнулись: @@ -2229,7 +2363,6 @@ Предлагаем Вам пример простейшей программы, позволяющей определить, спрайт какого цвета "пострадал" при столкновении! Разумеется,задача значи- тельно усложняется в случае, когда спрайты имеют одинаковые цвета! - П р и м е р 2. ───────────── Ok @@ -2248,14 +2381,12 @@ 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 @@ -2338,9 +2469,8 @@ V.7. ОПЕРАТОР SCREEN В ОБЩЕМ СЛУЧАЕ - Общая форма записи оператора SCREEN следующая: - SCREEN [n],[s],[z],[d],[p],[m] + SCREEN [n],[s],[z],[d],[p],[m] , ──▲─ └ только для MSX-2 ! где: SCREEN("screen"-"экран") - служебное слово; @@ -2365,7 +2495,7 @@ если p=0, то принтер совместим со стандартом MSX (будет распечатывать каж- дый символ из набора символов стандарта MSX); если же p≠0, то принтер при выводе преобразует графические символы в пробелы (по умолчании p=0). - 7) m - арифметическое выражение,целая часть значения которого принад- + m - арифметическое выражение, целая часть значения которого принад- лежит отрезку [0,3], причем: если m=0, то изображение устойчивое (по умолчанию); если m=1, то изображение "дергающееся"; @@ -2377,9 +2507,8 @@ с нечетным номером. Отметим, что неиспользуемые параметры в операторе можно не указывать, но если они не последние в записи, то ограничивающие их запятые обязатель- -ны. При этом, каждый назначенный параметр действует до тех пор,пока не по- +ны. При этом каждый назначенный параметр действует до тех пор, пока не по- лучит новое значение в последующем операторе SCREEN. - П р и м е р ы: SCREEN 1,2,0,2,0 SCREEN X,Y ───────────── SCREEN 3,,0 SCREEN 2,3,,,0 Если какой-либо из параметров выходит за допустимый диапазон,то компью- @@ -2387,15 +2516,11 @@ Запомните, что основное назначение оператора SCREEN - это определение типа экрана и размера спрайтов! - - -V.8. ПОНЯТИЕ ФАЙЛА [5]. ВЫВОД ТЕКСТОВОЙ ИНФОРМАЦИИ НА ГРАФИЧЕСКИЕ ЭКРАНЫ - + V.8. ПОНЯТИЕ ФАЙЛА [5]. ВЫВОД ТЕКСТОВОЙ ИНФОРМАЦИИ + НА ГРАФИЧЕСКИЕ ЭКРАНЫ Я случайно уничтожил все свои файлы! Крик души - - Термин ф а й л происходит от английского слова file, переводящегося на русский язык как "дело" или "досье". В информатике под ф а й л о м понимают совокупность в некотором смыс- @@ -2422,16 +2547,15 @@ Компоненты файла последовательного доступа называются с т р о к а м и. Каждая строка имеет специальную концевую метку и, как и запись,состоит из отдельных значений. Однако строки не нумерованы и обрабатывать их можно -лишь последовательно друг за другом. Причем, запись организуется от нача- -ла или конца файла, а чтение - только от его начала. - Теперь перейдем к делу! +лишь последовательно друг за другом. Причем запись организуется от нача- +ла или конца файла,а чтение -только от его начала. Теперь перейдем к делу! Схемы, графики, рисунки или их отдельные фрагменты, выводимые на графи- ческие экраны, обычно нуждаются в обозначениях и поясняющих сообщениях. Сформировать их оператором PRINT невозможно! В режимах SCREEN2 ÷ SCREEN8 последний не действует. Однако эту процедуру можно осуществить путем совместного применения в программе четырех операторов: - α) MAXFILES=α + α) MAXFILES=α , где: MAX ("MAXimum"-"наибольший") и FILES ("файлы") - служебные слова; α - арифметическое выражение, целая часть значения которого принадле- жит отрезку [1,15]. @@ -2441,7 +2565,8 @@ При выполнении оператора MAXFILES= кроме резервирования буферов произ- водится "чистка" значений переменных и закрытие всех ранее открытых фай- лов данных. - β) OPEN"GRP:"[FOR OUTPUT]AS[#] N + + β) OPEN"GRP:"[FOR OUTPUT]AS[#] N , где: OPEN("открыть"), FOR("для"), OUTPUT("вывод"), AS("как") - служебные слова; "GRP:" - имя устройства вывода,которое передает информацию на гра- @@ -2454,7 +2579,7 @@ ошибке: "File already open in ..." ("Ф а й л у ж е о т к р ы т в с т р о к е ...") - γ) PRINT #N,A + γ) PRINT #N,A , где: A - список арифметических и строковых выражений (разделенных запяты- ми или точками с запятой), значения которых выводятся на графические экра- ны; @@ -2463,8 +2588,9 @@ Применение оператора PRINT#... без оператора OPEN приводит к сообщению об ошибке: "File not open in ..." ("Ф а й л не о т к р ы т в с т р о к е ...") - Напомним также, что "обычный" оператор PRINT (без указания параметра -н о м е р ф а й л а) в графических экранах игнорируется! + Напомним также, что "обычный" оператор PRINT (без указания параметра N) +в графических экранах игнорируется! + δ) CLOSE [[#] N] , где: 1) CLOSE ("закрыть") - служебное слово; 2) N - номер файла, "открытого" оператором OPEN. @@ -2477,7 +2603,6 @@ Таким образом, последовательность операторов при выводе текстовой или цифровой информации на графический экран может выглядеть, например, следу- ющим образом: - П р и м е р 1. ───────────── NEW @@ -2489,7 +2614,6 @@ 50 CLOSE #1 60 GOTO 60 'Данная программа позволяет вывести на графический экран те кущий цвет изображения, фона и бордюра - П р и м е р 2. ───────────── NEW @@ -2501,7 +2625,6 @@ 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 указывают то место экрана, с которого начинается текст, т.к. текст позиционируется так, что первый символ размещается с верхней левой точки позиции графичес- @@ -2515,15 +2638,14 @@ чтобы уничтожить строку символов,либо нарисуйте прямоугольник и закрасьте его цветом фона, либо выведите оператором 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'──▶ @@ -2531,16 +2653,14 @@ 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 @@ -2550,7 +2670,6 @@ 30 FOR T=0 TO 500:NEXT 'Задержка 40 PRESET(90,90):PRINT#1,"раму" 50 GOTO 50 - П р и м е р 5. ───────────── NEW @@ -2563,11 +2682,10 @@ ·150··90 ·70··90 Ok - Эта программа позволяет узнать координаты (X,Y) графического курсора и координаты (α,β) т.н. графического а к к у м у л я т о р а . Когда мы ри- суем точку (или линию), графический курсор и графический аккумулятор сов- -падает. Различия возникают лишь при выводе текстовой информации. Графиче- +падают. Различия возникают лишь при выводе текстовой информации. Графиче- ский курсор устанавливается в ту точку, которую мы вывели последний раз (оператором PSET, LINE, CIRCLE,...). Графический аккумулятор устанавлива- ется на то место, с которого должна быть напечатана очередная буква (убе- @@ -2575,7 +2693,6 @@ суем точку (PSET,LINE,...), графический курсор сразу же переходит в пози- цию графического аккумулятора, и далее они действуют совместно до нового оператора PRINT#. - П р и м е р 6 [ 76 ]. Сочетание текста и иллюстраций. ──────────────────── 40 COLOR 15,15,15:SCREEN 2:OPEN"GRP:"AS#1 @@ -2590,7 +2707,6 @@ 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 @@ -2612,20 +2728,22 @@ 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$ предоставляет Вам возможность изображать @@ -2633,10 +2751,10 @@ В режиме SCREEN 2 для получения такого же результата обычно накладыва- ются несколько спрайтов (см. раздел V.6.2). Оператор, с которым мы хотим Вас познакомить, имеет следующий формат: - COLOR SPRITE$(NS)=A$ + COLOR SPRITE$(NS)=A$ , где: COLOR, SPRITE - служебные слова; NS - арифметическое выражение, целая часть значения которого опреде- -ляет номер сформированного в оперативной памяти спрайта; +ляет э к р а н н ы й номер спрайта; A$ - строковое выражение, причем значение А$ должно содержать не бо- лее 16 символов (LEN(A$)≤16). Каждый символ значения строки A$ воздействует на одну линию спрайта @@ -2678,12 +2796,11 @@ спрайта с номером NS с другими спрайтами не будет обнаружено. Правило при- оритета (если "накладываются" два спрайта, то спрайт с меньшим "экранным" номером перекрывает спрайт с большим "экранным" номером) более не соблюда- -ется. Оказывается область пересечения спрайтов имеет цвет,определяемый ре- -зультатом логической операции OR, примененной к цветам "наложенных" спрай- -тов. +ется. Оказывается, область пересечения спрайтов имеет цвет, определяемый +результатом логической операции OR, примененной к цветам "наложенных" +спрайтов. Более того, спрайтовые линии, отмеченные в операторе COLOR SPRITE$ и не "затронутые" пересечением, исчезают! - П р и м е р 3. Пример, иллюстрирующий "работу" бита 6 спрайтовой линии. ───────────── NEW @@ -2700,7 +2817,6 @@ 5) б и т 7 (крайний левый).Если этот бит равен 1,то спрайтовая линия отображается на 32 точки левее координаты Х, заданной в операторе PUT SPRITE; - П р и м е р 4. Сдвиг двух верхних спрайтовых линий с изменением цвета. ───────────── NEW не используется @@ -2713,30 +2829,28 @@ 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 @@ -2749,10 +2863,9 @@ 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 @@ -2766,10 +2879,9 @@ 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 - арифметическое выражение, целая часть значения которого опреде- ляет номер сформированного в оперативной памяти спрайта; @@ -2782,7 +2894,6 @@ COLOR SPRITE$(0)=STRING$(8,B) COLOR SPRITE(0)=B эквивалентны! - П р и м е р 8. Исчезновение спрайта с меньшим экранным номером при ───────────── COLOR SPRITE(0)=127 и изменение цвета области пересече- ния спрайтов при COLOR SPRITE(0)=63 . @@ -2793,7 +2904,6 @@ 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 @@ -2809,7 +2919,6 @@ н ы, однако, если значение B находится в диапазоне от 128 до 255, или ког- да необходимо воздействовать на отдельные линии спрайта, следует восполь- зоваться первым оператором. - П р и м е р 10. Столкновение спрайтов для оператора COLOR SPRITE(NS)=B ────────────── NEW @@ -2822,24 +2931,21 @@ 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 в Вашем распоряжении имеется несколько так называе- @@ -2852,12 +2958,11 @@ 2) страницу для в о з д е й с т в и я (а к т и в н у ю страницу). На активной странице можно "рисовать" с помощью графических операторов. Формат этого интересного оператора: - SET PAGE [M],[N] + SET PAGE [M],[N] , где: SET, PAGE - служебные слова; M, N - арифметические выражения, целые части значения которых при- надлежат отрезку [0,3]. Первый аргумент SET PAGE указывает номер отобража- емой страницы, а второй - номер активной страницы. - П р и м е р 1. ───────────── NEW @@ -2870,16 +2975,14 @@ тивизируется; рисуются 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 @@ -2890,7 +2993,6 @@ 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 @@ -2910,7 +3012,6 @@ 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] и по умолчанию равна нулю. @@ -2925,7 +3026,6 @@ этом случае на страницу с номером 3 накладывается изображение 2-й страни- цы). Взгляните на следующий пример: - П р и м е р 4. ───────────── NEW @@ -2935,7 +3035,6 @@ 30 A$=INPUT$(1) 'Задержка до нажатия клавиши 40 SCREEN ,,,,,2 'Обратите внимание на величину последнего параметра! 50 A$=INPUT$(1) - Обратим Ваше внимание на то, как можно осуществить к о п и р о в а - н и е изображения из одной области экрана в другую на компьютерах серии MSX-1. @@ -2945,7 +3044,6 @@ бражения, которые находятся с помощью функции POINT. Затем эти данные ис- пользуются в операторе PSET для переноса отмеченных точек в другое место экрана. - П р и м е р 5 [ 76 ]. Копирование участка экрана ───────────────────── 20 CLEAR:DEFINT A-Z @@ -2989,11 +3087,11 @@ 530 DATA 30,28,80,28 Заметим, что в массиве чтение и запись данных выполняются невыносимо медленно, поэтому нужно запастись терпением! + Ниже мы познакомим Вас еще с одним весьма мощным оператором MSX-BASIC - оператором COPY, который пересылает блок экрана в другое место экрана (на этой же или другой странице). Фактически, имеется ш е с т ь вариантов этого оператора. - В а р и а н т 1 ┌───────────────────────────────────────────────────────────────┐ │ { [T]XOR } │ @@ -3032,7 +3130,7 @@ │ AND │ SC = C AND S │ │ PSET │ SC = C │ │ PRESET │ SC = 16+(NOT C) │ - └────────┴─────────────────┘ + └────────┴─────────────────┘ , где S, SC, C - арифметические выражения, целые части значений которых оп- ределяют: S - цвет изображения или фона до копирования; @@ -3127,7 +3225,6 @@ го прямоугольника окрашивается в тот цвет, который она имела до копирова- ния, а при выполнении оператора COPY с параметром PRESET каждая точка ко- пируемого прямоугольника окрашивается в "противоположный" цвет. - П р и м е р ы: ───────────── 6) NEW 7) NEW @@ -3143,10 +3240,8 @@ 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 @@ -3157,7 +3252,6 @@ 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 @@ -3180,8 +3274,8 @@ быстрее осуществляется смена изображений и чем меньше расстояние между двумя "кадрами", тем эта иллюзия полнее. Если осуществлять смену кадров с достаточно высокой скоростью, то можно добиться исчезновения эффекта ми- -гания изображения. Однако, учтите, что скорость смены кадров ограничена -производительностью компьютера. +гания изображения. Однако учтите,что скорость смены кадров ограничена про- +изводительностью компьютера. П р и м е р 10. ────────────── @@ -3212,10 +3306,8 @@ 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 @@ -3227,7 +3319,9 @@ 70 PRESET(90,120):PRINT #1,"Цвет прямоуг. :";Y ' Вывод цвета 80 I$=INPUT$(1) + В а р и а н т 2 + Этот оператор позволяет запоминать цвета всех точек заданной прямо- угольной области экрана дисплея и хранить их номера в виде числового мас- сива (или в файле данных); далее этот оператор по Вашему желанию может @@ -3235,10 +3329,12 @@ COPY изображение воспроизводится достаточно быстро для того, чтобы можно было синтезировать движение объектов на экране. Формат оператора: + ┌──────────────────────────────────────────────────────┐ │ COPY (X1,Y1)-(X2,Y2), stri ТО {И м я массива} │ - │ {И м я файла } │ + │ {И м я файла } │ , └──────────────────────────────────────────────────────┘ + где: (X1,Y1)-(X2,Y2) - параметры, указывающие позицию копируемого блока и "работающие" точно так же,как в операторе LINE (X1,Y1)-(X2,Y2),C,BF (наличие этих параметров обязательно); @@ -3276,7 +3372,7 @@ │ { [T]OR } │ │ COPY {И м я массива} [,napr] ТО (X3,Y3), strp,{ [T]AND } │ │ {И м я файла } { [T]PSET } │ - │ { [T]PRESET} │ + │ { [T]PRESET} │ , └───────────────────────────────────────────────────────────────┘ где: napr - необязательный параметр, дающий возможность "поворачивать" блок изображения. Он может принимать следующие значения: @@ -3300,7 +3396,6 @@ └ 8 ┘ ления целой части. На языке MSX-BASIC это "звучит" как INT( (4* (ABS(X1-X2)+1) * (ABS(Y1-Y2)+1) +7)/8 )+4 - П р и м е р 15. ────────────── Ok @@ -3310,17 +3405,14 @@ 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 @@ -3332,7 +3424,6 @@ 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 @@ -3342,7 +3433,6 @@ 35 A$=INPUT$(1) ▼ 40 COPY(100,100)-(190,130) TO (100,0),,PRESET 50 GOTO 50 - П р и м е р 19. ───────────── Ok @@ -3365,7 +3455,6 @@ ┌──────────────────────────────────────────┐ │ COPY и м я файла ТО и м я массива │ └──────────────────────────────────────────┘ - П р и м е р 20. ────────────── Ok @@ -3378,6 +3467,7 @@ 60 COPY "Dima" TO AB:COPY AB TO (40,40) 70 GOTO 70 + В а р и а н т 6 Давайте все-таки обсуждать вкус ананаса с теми, кто его не ел! @@ -3396,7 +3486,7 @@ щим от внешнего источника видеосигнала. Для этой цели имеется оператор ┌──────────────────────────────┐ - │ SET VIDEO R,Y,C,S,A,V,R │ + │ SET VIDEO R,Y,C,S,A,V,R │ , └──────────────────────────────┘ где: SET, VIDEO - служебные слова; R - числовой параметр, значение которого определяет источник видео- @@ -3435,7 +3525,6 @@ │ Отметим, что оператор COPY можно использовать в режимах │ │ SCREEN 5, SCREEN 6, SCREEN 7, SCREEN 8 │ └───────────────────────────────────────────────────────────┘ - П р и м е р 19. ────────────── NEW @@ -3459,19 +3548,19 @@ с о б). - 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 @@ -3502,10 +3591,10 @@ + V.12. Р е ж и м SCREEN 7 (только для компьютера MSX-2 с видеопамятью 128 Кбайтов) - ┌─────────────────────────────────────────────────────────────┐ │ Этот режим максимально удобен для многоцветных рисунков! │ └─────────────────────────────────────────────────────────────┘ @@ -3514,13 +3603,14 @@ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ │▨▨▨▨▨ SCREEN7 ▨▨▨▨▨│ │▨▨▨ 512╳212 точек▨▨│ - │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ Р и с. 9 + │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ 211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ - ▼ + ▼ Р и с. 10 Y Этот режим похож на режим SCREEN 6, но: 1) экранные страницы нумеруются от 0 до 1; 2) допускается одновременное использование 16 цветов. + Формула, необходимая для вычисления размера массива, принимающего дан- ные блока экрана, та же, что и в SCREEN 5: ┌ (4·│X1-X2│+1)·(│Y1-Y2│+1)+7 ┐ @@ -3528,21 +3618,19 @@ └ 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. Они кодируются @@ -3557,19 +3645,17 @@ Например, 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. Формула, необходимая для вычисления размера массива, принимающего ко- пию блока экрана, имеет следующий вид: @@ -3586,7 +3672,6 @@ дает запрос на ввод координат, которые будут задаваться в операторе COPY, а также просит указать,какой режим графического вывода будет использовать- ся. - П р и м е р. ─────────── NEW @@ -3610,10 +3695,8 @@ Ok - V.14. Д о п о л н е н и е - 1. П р и м е р простейшего г р а ф и ч е с к о г о редактора [22]. ─────────── Редактор позволяет не только рисовать стрелками, но и включать-отклю- @@ -3622,7 +3705,7 @@ ружности нужно нажать на клавишу "О", после чего ввести значение радиуса (окончание ввода - нажатие на клавишу "RETURN"). Нажатие на "Z" и ввод ве- личин R (радиус окружности, проходящей через вершины звезды), N (количест- -во вершин) и M=2 позволяет построить звезду. Для ввода чисел использует- +во вершин) и M=2 позволяют построить звезду. Для ввода чисел использует- ся подпрограмма "ВВОД". NEW Ok @@ -3753,34 +3836,49 @@ 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 позволяет выводить на экран японские иероглифы, {{tag> }}