-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbas05-09.txt
250 lines (227 loc) · 15.8 KB
/
bas05-09.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
П р и м е р ы:
─────────────
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