П р и м е р ы: ───────────── 6) NEW 7) NEW Ok Ok 10 COLOR15,3:SCREEN5 10 SCREEN 5:SET PAGE 0,0 20 OPEN"GRP:"AS#1:SET PAGE 0,0 30 FOR K=0 TO 50: 30 LINE (100,0)-(130,30),7,BF CIRCLE(127,106),K,K/4:NEXT 40 LINE (100,40)-(130,70),6,BF 40 COPY(77,56)-(177,156),0 TO 50 IF INKEY$="" THEN 50 (10,10),1,PRESET:L$=INPUT$(1) 60 SETPAGE 0,1:CLS:SETPAGE 1,1 50 SET PAGE 1,1:L$=INPUT$(1) 70 COPY (0,0)-(255,100),0 TO 60 SET PAGE 0,0:L$=INPUT$(1) (100,0),1,PSET 70 GOTO 50 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 30 LINE(100,0)-(130,30),0,BF:LINE(100,40)-(130,70),2,BF 50 IF INKEY$="" THEN 50 60 SET PAGE 0,1:CLS:SET PAGE 1,1 70 COPY (0,0)-(255,100),0 TO (100,0),1,TPSET 'Подставьте TAND! 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 COLOR 15,4,15 ' Начальная установка 20 SCREEN 5 ' экрана 30 LINE(40,60)-(80,110),3,BF ' Рисуем прямоугольник 40 COPY (40,60)-(80,110) TO (100,60),,TAND ' Копия прямоугольника 50 Y=POINT (110,70) ' Цвет точки из копии 60 I$=INPUT$(1) ' 70 PRESET(90,120):PRINT #1,"Цвет копии равен ";Y 'Вывод цвета копии 80 I$=INPUT$(1) С помощью оператора COPY, изменяя координаты (X3,Y3), можно перемещать изображение в любое место экрана. Это позволяет имитировать на экране дис- плея движение объектов. Для имитации движения необходимо выполнить следующие действия: 1) поместить изображение объекта на экран с помощью оператора COPY; 2) вывести изображение объекта в новом месте. Если эти действия повторять, то будет создаваться иллюзия движения;чем быстрее осуществляется смена изображений и чем меньше расстояние между двумя "кадрами", тем эта иллюзия полнее. Если осуществлять смену кадров с достаточно высокой скоростью, то можно добиться исчезновения эффекта ми- гания изображения. Однако, учтите, что скорость смены кадров ограничена производительностью компьютера. П р и м е р 10. ────────────── NEW Ok 10 COLOR 15,0,0 20 SCREEN 5:DIM A(1000):VDP(1)=VDP(1)XOR64 'Отключение экрана 30 CIRCLE (80,80),3,13:PAINT (80,80),13 40 COPY (74,74)-(86,86) TO A:CLS:VDP(1)=VDP(1)XOR64'Включение экрана 50 FOR I=0 TO 256 ' Попробуйте оператор FOR I=0 TO 256 STEP 4 60 COPY A TO (I,80) 70 NEXT:GOTO 50 З а м е ч а н и е. Эти же параметры (XOR,OR,AND,PSET,PRESET) могут ис- ───────────────── пользоваться в операторах PSET, PRESET и LINE в ре- жимах SCREEN 5, SCREEN 6, SCREEN 7 и SCREEN 8. Они имеют тот же смысл,что и в операторе COPY. П р и м е р 11. ────────────── 10 OPEN "GRP:"AS#1:COLOR 1,3,4:SCREEN 7:PSET (73,63),13,XOR 20 PRINT #1,POINT(73,63) ─▲─ 30 GOTO 30 │ П р и м е р 12. ────────────── 10 OPEN "GRP:"AS#1:COLOR 1,3,4:SCREEN 7 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 10 COLOR 15,4,15 ' Начальная установка 20 SCREEN 5 ' экрана 30 LINE(40,60)-(80,110),3,BF,TAND ' Рисуем прямоугольник 50 Y=POINT (50,70) ' Цвет точки 60 I$=INPUT$(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 (наличие этих параметров обязательно); stri - арифметическое выражение,указывающее на номер копируемой стра- ницы; значение stri должно принадлежать [0,3]. По умолчанию используется активная страница; И м я массива (И м я файла) - параметр, который позволяет Вам копи- ровать блок изображения в цифровой форме в массив заданного размера или в указанный файл на дискете. Для выполнения оператора COPY необходимо задать достаточно большой од- номерный числовой массив для того, чтобы вместить данные о расцветке всех точек рассматриваемой области экрана. Количество элементов массива в режиме SCREEN 5 определяется формулой: ┌ (4·│X1-X2│+1)·(│Y1-Y2│+1)+7 ┐ │ ─────────────────────────── │ + 4 , где [ ] - символ операции выделения └ 8 ┘ целой части. На языке MSX-BASIC это "звучит" как INT( (4* (ABS(X1-X2)+1) * (ABS(Y1-Y2)+1) +7)/8 )+4 Используя операторы COPY и DATA, можно воспроизводить изображения,кото- рые закодированы в форме последовательности чисел. Значение числового мас- сива, хранящего изображение, может быть выведено на экран или память,а за- тем вставлено в д р у г у ю программу при помощи операторов DATA. П р и м е р 14. ────────────── Ok 10 SCREEN 5 20 FOR I=1 TO 10:CIRCLE (125,95),10+I,I:NEXT 30 COPY (40,40)-(180,180),0 TO "OKR" 'Изображение записывается 40 GOTO 40 'на дискету под именем "ОКR". В а р и а н т 3 ┌───────────────────────────────────────────────────────────────┐ │ { [T]XOR } │ │ { [T]OR } │ │ COPY {И м я массива} [,napr] ТО (X3,Y3), strp,{ [T]AND } │ │ {И м я файла } { [T]PSET } │ │ { [T]PRESET} │ └───────────────────────────────────────────────────────────────┘ где: napr - необязательный параметр, дающий возможность "поворачивать" блок изображения. Он может принимать следующие значения: 0 - преобразование симметрии отсутствует (по умолчанию); 1 - преобразование симметрии относительно прямой, проходящей через точ- ку (X3,Y3) и параллельной оси Oy; 2 - преобразование симметрии относительно прямой, проходящей через точ- ку (X3,Y3) и параллельной оси Ox; 3 - ц е н т р а л ь н а я симметрия относительно точки (X3,Y3). strp - арифметическое выражение, указывающее на номер копируемой страницы; значение strp должно принадлежать [0,3]. По умолчанию использу- ется страница-источник; И м я массива (И м я файла) - дает возможность копировать блок изображения в цифровой форме в массив заданного размера или в указанный файл на дискете; (X3,Y3) - координаты верхнего левого угла места,в которое будет ско- пирован блок (наличие этого параметра обязательно!); Размер массива в режиме SCREEN5 определяется следующей формулой: ┌ (4·│X1-X2│+1)·(│Y1-Y2│+1)+7 ┐ │ ─────────────────────────── │ + 4 , где [ ] - символ для операции выде- └ 8 ┘ ления целой части. На языке MSX-BASIC это "звучит" как INT( (4* (ABS(X1-X2)+1) * (ABS(Y1-Y2)+1) +7)/8 )+4 П р и м е р 15. ────────────── Ok 10 SCREEN 5:DIM A%(2900) 20 FOR K=0 TO 50:CIRCLE(127,106),K,15:NEXT K 30 COPY (77,56)-(177,156),0 TO A% 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"... Пожалуйста, проанализируте полученный результат! П р и м е р 16. ────────────── Ok 10 SCREEN 5 20 COPY "okr" TO (25,30),0 'Вывод информации с диска на экран 30 GOTO 30 П р и м е р 17. Пример копирования изображения на экране дисплея в ───────────── массив, а из массива - в новое место экрана. NEW Ok 10 DIM AK(INT((4*(ABS(41-71)+1)*(ABS(41-71)+1)+7)/8)+4) 20 SCREEN 5:SET PAGE 0,0 30 LINE(40,40)-(70,70),15,BF 35 COPY(41,41)-(71,71),0 TO AK 'Скопировали изображение в массив AK 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 10 SCREEN 5 20 LINE(100,100)-(110,110),8,BF 30 LINE(120,120)-(190,130),3,BF │ 35 A$=INPUT$(1) ▼ 40 COPY(100,100)-(190,130) TO (100,0),,PRESET 50 GOTO 50 П р и м е р 19. ───────────── Ok 10 SCREEN 5:DIM A(INT((4*(ABS(100-190)+1)*(ABS(100-130)+1)+7)/8)+4) 20 LINE(100,100)-(110,110),8,BF 30 LINE(120,120)-(190,130),3,BF !!! 40 COPY(100,100)-(190,130) TO A │ 50 A$=INPUT$(1):CLS ▼ 60 COPY A,3 TO (100,100) 65 A$=INPUT$(1):CLS 70 COPY A TO (100,100) 80 GOTO 50 В а р и а н т 4 ┌─────────────────────────────────────────┐ │ COPY и м я массива ТО и м я файла │ └─────────────────────────────────────────┘ В а р и а н т 5 ┌──────────────────────────────────────────┐ │ COPY и м я файла ТО и м я массива │ └──────────────────────────────────────────┘ П р и м е р 20. ────────────── Ok 10 DIM AK(INT((4*(ABS(41-71)+1)*(ABS(41-71)+1)+7)/8)+4) 20 SCREEN 5:SET PAGE 0,0 30 LINE(40,40)-(70,70),15,BF 35 COPY(41,41)-(71,71),0 TO AK 40 COPY AK TO "Dima" 50 CLS:DIM AB(485) 60 COPY "Dima" TO AB:COPY AB TO (40,40) 70 GOTO 70