30 часов Бейсика для начинающих 1993 г.

Урок 7 - оператор BORDER.


УРОК 7

7. 1 Вступление.

До сих пор ны использовали только способность "Спектруна"
работать с числами и текстами и ограничивались черно-белым
изображением. Тем не менее, наиболее эффективное использование
этого микрокомпьютера предполагает
широкий спектр возможных
цветов, графику и звуковые эффекты. Так. если компьютер исполь-
зуется для аркадных игр, ену. очевидно, необходим цвет и
при-
личный звук
. Но и в деловых и в обучающих программах рациональ-
ное использование цвета и графики позволяют сделать материал
более
доступным и понятным.

7. г Оператор BORDER.

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

10 REH ««««««««««««««««•»*««»««
20 REH «• Цвет бордюра ««
30 REH «*««««»««»««•««««»««»•»«

40 FOR Х=0 ТО 7
50 BORDER X

60 REH ««Пауза нужна для

70 REH замедления программы,

80 REH чтобы цвета были различимы»«

90 PAUSE 50

100 HEXT X

110 STOP

Оператор PAUSE в строке 90 замедляет скорость переключения
цвета. Без него все
происходило бы слишком быстро и трудно было
бы разобрать, что там происходит. Вы видите, как цвет меняется
в следующем порядке: черный, синий, красный,
пурпурный, зеле-
ный. голубой, желтый и белый.

Оператор BORDER требует при себе числа от О до 7 для зада-
ния одного из этих указанных цветов, цифровые клавиши, располо-
женные по верхнену ряду клавиатуры (рт 1 до 7 и О) связаны с
одним из этих цветов.

7. 3 Оператор PAPER.

В пределах, ограниченных бордюром, расположен основной
экран. В этой области изображаются результаты работы Ваших
9й
программ. Здесь же располагаются и текста программ.
Оператор
paper задает цвет Фона при печати на экране. Если же на нем
ничего пока не напечатано, то весь экран окрашивается в пвет
Фона
(paper). Вот программа, которая нарисует на экране полосы
цвета
paper.

Программа 7. 1

10 for х=0 то 7
20 paper x

30 priht " (32 пробела)

40 нехт x
50 stop

Обратите внимание на то отличие, которое есть у команды
paper от команды border, при подаче команды border цвет бордюра
меняется
тут же, немедленно, по команде paper ничего не проис-
ходит
до тех пор. пока Вы что-либо не напечатаете и тогда дей-
ствие оператора
paper проявится.

Если Вы немного измените приведенную программу 7. 1 для
того, чтобы она повторила печать цветных полос десять раз. то
увидите картину их движения по экрану вниз, пока не будет до-
стигнута нижняя строка и не появится сообщение "scroll?".
Про-
должить
печать Вы можете любой клавишей, а прервать - клавишами
"н" и "BREAK".

10 FOR f=l ТО 10
20 FOR Х = 0 ТО 7
30 PAPER X

40 priht " (32 пробела)

50 нехт X
60
нехт f
70 stop

7. 4 Оператор ihk.

Следующая программа использует эти же цветовые полосы и
напечатает на них некоторую информацию, цвет символов, появляю-
щихся на экране, и является цветом IHK.

До сих пор в программах этой книги мы использовали черный
цвет символов (INK) на белом Фоне (PAPER). Ны их нигда не зада-
вали, это те цвета, которые установлены
при включении компьюте-
ра или после стирания программы из памяти с поношью команды
NEW. П
ринято говорить: "Эти цвета установлены по умолчанию",
ю FOR у-1 ТО Ю
20 FOR Х-1 ТО 7
30 LET 2=7-Х
40 PAPER X
50 INK
г

60 PRIHT "Привет нашим читателям"
70 HEXT X
80 hext у
90 STOP

Ны выбрали цвет INK-7-х, так что когда цвет PAPER <х= 3)
пурпурный, цвет IHK получается 7-3=4 (зеленый).

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

Вам также следует помнить, если № производите программы,
которыми будут пользоваться другие люди, что не у всех есть
цветной монитор или телевизор. Так, необходимо учитывать, что
различимость цветов может отличаться. Так. например, красный и
синий различимы на цветном мониторе, но они почти не различимы
на черно-белом. Для справки Вам поможет тот Факт, что все цвета
изображаются на черно-белом экране в виде оттенков серого таким
образом, что плотность серого тона постоянно убывает с ростон
номера цвета от
о до 7. Поскольку красный цвет имеет номер 2, а
синий - 1, то они находятся на шкале серого цвета рядом и пото-
му плохо различаются.

7. 5 Смешение цветов.

Давайте рассмотрим, как образуются цвета в Вашем телевизо-
ре или мониторе, а разобраться с этим нам поможет следующая
программа.

50 BORDER О
60 PAPER О

65 CLS

70 REH «.в»»»»»»»»»»*»»»»»»»»»»»»»»»»»»»
80 REH ««Нигаюший заголовок»»
85 IHK 7
90 FLASH 1

95 PRIHT AT О.5;"Смешение цветов"
100 FLASH О
105 PRIHT

110 REH ................................

115 FOR Х=0 ТО 1

120 PRIHT IHK 2;" " (10 пробелов)

125 NEXT X

130 REM o»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»

135 FOR X--0 TO 3

140 priht ihk 2; 'hsb'; ihk 6;"еши"; ihk 4; "ёш^шшг
145 нехт x

150 REH ««и»»»»»»»»»»»»»»»»»»»»»*»»»»»»»

155 FOR x=0 to 3

160 priht ihk 2; "в"; ihk 3; ihk 7; "вния"; ihk 5;

"ш"; ihk 4; "вши"

170 нехт x

175 REH «n»»*»***»»*»»»»»»»»»***»*»»»*»»

180 for x=0 to 1

190 priht ihk о; "■■"; ihk li-hbw; ihk 5; "ss^sa"; ink 4:

"МНЯ

200 нехт x

205 REH »«»»»«.»»»»»»»«»»»«»»»*»»»»«»•»»

210 FOR 8=1 TO 3

220 priht ink о; "НИ"; ink и'жшяи'
230 нехт x

235 REH ««Напечатали Фон»»

240 REH и»»»»»»»»»»»»»»»»...............

250 REH ««Печать текста»»
255 IHK 7

260 priht at 2.17;"Основные цвета"
270 priht at 4. 19; "Красный"
280 priht at 5, 19; "синий"
290 priht at 6,19; "Зеленый"
300 priht at 8.17;"дополнительные"
310 priht at 9.25,- "цвета"
320 priht at 10. 19; "Красный+Синий"
330 priht at 11.19; "=пурпурный"
340 priht at 12. 19;"Синий+Зеленый"
350 priht at 13. 19; "=голубой"
360 priht at 14. 19; "Зеленый+КРасный"
370 priht at 15. 19; "--желтый"
380 priht at 18. 17;"и, наконец"
390 priht at 20. 19; "Все цвета"
400 priht at 21, 19; "дают белый"
410 stop

420 reh ««»«««***•«««««««»««»««»«»»»««»«

В этой програнме вы видите еше один спсоб использования
оператора INK. Он входит составной частью в оператор PRINT
(строка 120). В этом случае после него должен стоять раздели-
тель!; ). Прямоугольные полосы в строках 140,160,190,220 набира-
ются в графическом режиме (
курсор G) с помошью символов блочной
графики Чтобы помочь Вам правильно набрать эти
строки, мы

привели раскладку символов в них:
120 ю

140 6 4 6

160

2

4

4

2 4

190

2

4

6

4

220

2

10

Запустите эту программу пару раз. чтобы хорошо к ней при-
выкнуть.

Вы увидите, что программа изображает три пересекающиеся
цветные пятна. Слева - красное, справа - зеленое и снизу -
синее. Там. где красный
луг персекается с зеленым, возникает
желтое пятно. Синий и зеленый производят голубой, а синий и
красный -
пурпурный. Там же, где пересекаются все три круга,
образуется белый цвет.

Точно так же дело обстоит и в кинескопе Вашего телевизора.
Он
покрыт веществами, которые при попадании на них электронного
луча, светятся красным, синим и зеленым цветами. Другие цвета
получаются в результате смешения этих трех основных.

теперь взглянем на клавиатуру "Спектруиа". Цвета располо-
жены на цифровых клавишах и Вы сейчас увидите, что те номера,
которые закреплены за цветами, имеют полезное свойство:

Синий цвет (1) и красный (2) дают пурпурный (3).

1 + 2 = 3

Красный (2) ♦ зеленый(4) = желтый (б)
Зеленый (4) + синий (1) = голубой (5)
Синий (1) ♦ красный (2) + зеленый (4) = белый (7)

Черный при смешении с любым цветом даст сам этот цвет.
Поэтому черный неминуемо должен иметь номер О.

пурпурный (3) ♦ зеленый (4) = белый (7)
голубой (5) + красный (2) = белый (7)

ВСК-7. 1

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

Какие цвета будут созданы следующими командами?
(a) BORDER б <Ь> PAPER 1
 (с) INK 3

ПРИНЕР-7. 1 Возьмем типовую программу-экзаменатор, проверяющую

-знание таблицы умножения и добавим к ней цвета

так, чтобы сделать ее более эффективной.

Программа 7. 2

5 RASDOHIZE
10 LET C=0
15 LET d=0

20 priht at 7.о:"проверка знания таблицы умножения"

30 priht at 11.9;'наберите ответ"

40 priht at 12.в;"и нажните ekter"

50 PRIHT AT 16. 5; "НАЙМИТЕ ЛЮБУЮ КЛАВИШУ. "

60 PRIHT AT 17,6;"КОГДА БУДЕТЕ ГОТОВЫ. "

65 LET а«=1НКЕУ*

70 IF а»>="0" АНЮ at<-'Z" ТНЕН GO ТО 90
75 IF а»=". ■ ТНЕН GO ТО 90
80 GO ТО 65
90 LET Я-IHT <RRD»13)
100 LET b=IHT (RHD*13)
105 LET
е=0
110 LET d=d+l
120 CLS

130 priht at 7. и; a;" X m;b:" - ?"
140 priht at 14. 9; "наберите ответ"

150 IHPUT f*

151 IF f»=-" THEH GO TO 150

152 for k=1 TO leh «

154 IF f»(K)<-0- OR f»(K)>"9" THEH GO TO 150

156 HEXT К

158 LET f^VAL f»

160 CLS

170 PRIHT AT 7, ll;a; - X -;b; • = -;f
180 IF foa*b THEH GO TO 300
185 IF e>0 THEH GO TO 200
190 LET
c = c + 1

200 PRIHR AT 14. 2;-ОТВЕТ ВЕРНЫЙ СЧЕТ: ";c;-/";d

210 PAUSE 150

230 IF d<10 THEH GO TO 90

237 cls

240 PRIHT AT 5,3; "ВАШ СЧЕТ - "ic;" ИЗ 10"

250 PRIHT AT 9.3; "ЧТОБЫ ПРОДОЛЖИТЬ. НАЖНИТЕ"

260 PRIHT AT lit 14;"RUH"

270 PRIHT AT 13.4; "И НАЖНИТЕ EHTER"

291 STOP

300 LET e=e+i

310 IF e>=3 THEH GO TO 350

320 PRIHT AT 14.О;-ОТВЕТ НЕВЕРЕН ПОПРОБУЙТЕ ЕЩЕ РАЗ"

330 PAUSE 150

340 GO ТО 120

350 PAUSE 150

360 PRIHT AT 7,0;"

370 PRIHT AT 7, 11; a; - X ";b;" = -;a«b
375 PRIHT AT 14,6; "ВОТ ПРАВИЛЬНЫЙ ОТВЕТ"

360 PAUSE 500
390 LET e=o

адозвопюяаю

Эта программа создает набор из десяти вопросов по таблице
умножения в диапазоне от (0x0) до (12x12). Если учащийся дает
неверный ответ, ему предоставляется еще одна попытка. После
трех неверных ответов высвечивается правильный ответ. Это хоро-
шая, добротная программа, но ее можно сделать еше лучше, доба-
вив цвет.

Во-первых, введем цветной бордюр:

7 BORDER 4

8 CLS

Бордюр станет зеленый.

Следующие строки:

235 BORDER 7

237 CLS

239 BORDER 1

очищают зеленый бордюр после ответов на 10 вопросов и устанав-
ливают синий бордюр.

280 FOR а=1 ТО 10

282 FOR Ь=1 ТО 2

284 BORDER Ь

285 PAUSE б

286 НЕХТ Ь

288 PAUSE б

290 НЕХТ а

Эти строки сделают бордюр мигающим (синий/красный) для
высвечивания итогового результата.

Сделайте эти добавления к программе, запустите ее и посмо-
трите, лучше стала выглядеть программа или нет? Независимо от
приговора, подумайте сами, как можно
улучшить программу с помо-
шью цвета. Поэкспериментируйте с разными цветами в поисках наи-
лучшего решения. НЫ же еше вернемся к этой программе, когда бу-
дем обсуждать использование звука.

7. 6 Операторы FLASH И BRIGHT.

Эта очень маленькая программа покажет результат работы
оператора FLASH.

5 FLASH 1

10 PRIHT "Привет читателям"
15 FLASH О

Текст сначала печатается черным по белому, а потом начина-
ет мигать. Пвет символов (IHK) становится цветом Фона (PAPER)
и. соответственно, наоборт. оператор FLASH 1 включает режим
мигания, а оператор FLASH О - выключает, когда мы говорим, что
режим мигания выключается, то имеем в виду, что все, что Вы
бУдете печатать после этого, уже мигать не будет, но надпись
■Привет читателям" остается мигаюией навсегда, пока Вы ее не
сотрете или не напечатаете на ее месте что-либо иное.

Аналогичное свойство имеет и оператор BRIGHT, хотя у него
несколько иное назначение.

bright 1 - включает режим повышенной яркости.
bright о - выключает этот режим.

В исходном состоянии по умолчанию после включения мы имеем
режим BRIGHT
о - нормальная яркость.

7. 7 Двигающаяся графика.

Давайте рассмотрим пример того, как в программах делают
двигающуюся графику.

ПРИМЕР-7. г

Эта программа изобразит несколько грубоватый авто-
бус;

90 LET х=0

100 PRIHT AT 12. Xi "

110 PRIHT AT 13.x;" ■■■■■"

120 PRIHT AT 14. x: " о o-

Автобус получится Черным на белом Фоне. Теперь изменим
строку 90:

90 FOR Х=0. ТО 24

и добавим строку:

130 НЕХТ X

Теперь запустите программу (RUH) и Вы увидите, как авто-
бус очень быстро поехал по экрану слева направо. Все
происходит
потому
, что всякий раз, как программа исполняет цикл FOR-НЕХТ ,
к значению х добавляется единица и новое изображение автобуса
печатается на экране
чуть правее, чем было напечатано старое.
Очень важно, чтобы в изображении автобуса присутствовал один
пробел слева. Это
нужно для того, чтобы стиралось Старое изо-
бражение (иначе за автобусом Потянется черная полоса через весь
экран).

*Так и делается анимация (у нас принят давно принят термин
"мультипликация"). Печать нового изображения с незначительным
смешением от старго создает эффект движения.

Если скорость движения автобуса слишком велика, то ее мож-
но подрегулировать. Для этого достаточно ввести в программу за-
держку оператором
pause.

90 for х=0 to 24

loo priht at 12. x;- швшащ

110 priht at 13, x; " вшм"
120 priht at 14, x; " 0 0"
125 pause 2
130 hext x

Чем больше число, которое стоит в операторе PAUSE, тем
медленнее будет двигаться автобус, но тем менее плавным будет
это движение. Попробуйте поэкспериментировать с оператором
PAUSE, подбирая число, которое
устроит Вас наилучшим образом.

Поскольку черные автобусы встречаются редко, попробуем
покрасить его в красный цвет оператором 95 IHK 2. а для шин
сделаем 115 IHK О.

Программа 7. 3

90 FOR Х=0 ТО 24
95 IHK 2

100 PRIHT AT 12. Xi "

110 PRIHT AT 13, xi" IffiBESSi"

115 IHK 0

120 PRIHT AT 14,Xi" 0 0"
125 PAUSE !
130 HEXT X

Нам осталось только добавить фрагмент дороги, по которой
этот автобус едет. Это можно сделать в шасле FOR... НЕХТ в стро-
ках 40... 60

40 FOR Х=0 ТО 31
50 PRIHT AT 15, х; "■"
60 НЕХТ X

Принципы, которые мы здесь рассмотрели, позволят Ван со-
здавать и раскрашивать много более сложные изображения. Поэкс-
периментируйте
с символами блочной графики, чтобы добиться луч-
ших
результатов. Так. Ван не доставит большого труда сделать в
этой автобусе окна, если использовать некоторые из имеющихся
символов. И, пожалуйста, не забывайте о том, что самым левым
символом в изображении должен быть пробел (для стирания, если
объект движется слева направо). Если же объект движется справа
налево, то пробелон должен быть самый правый символ.

В этом примере мы попробуем рисовать с помошью
блочного 'символа "■". Но сначала остановимся на
одной очень полезной функции - IHKEY*. Она проверяет, какая
клавяаа (только одна) была нажата пользователем и не требует

ПРИЯЕР-7. з

нажатия EHTER. IHKEY$ обычно используется, когда требуется
немедленная реакция от компьютера после касания клавиши.

Эта "реакция" обычно бывает трех типов:

- нажата одна из рабочих клавиш и программа исполняет те
действия, которые ей и положено исполнять по нажато этой клави-
ши:

- нажата не та клавиша. - можно выдать сообщение типа:"Эта
клавиша не работает -
повтори действие";

- нажата не та клавиша и программа снова возврашается к
проверке того, какая клавиша нажата.
V пользователя создается
полное ощущение того, что его нажатие никак не сработало. Он
может нажимать на какие
угодно клавиши, пока не нажнет на одну
из рабочих.

В нижеследующей програнне рабочими являются только клавиши
5.6.7,8. Если будет нажата любая другая, то никаких действий
предпринято не будет и строка
150 переправит програнну вновь на
строку 90 в ожидании нажатия новой клавиши. В этой программе
клавиша
5 используется для движения влево, клавиша 6 - вниз. 7
- вверх. 8 - вправо, ничто не мешает Вам здесь задать свои,
иные клавиши, но клавиши
5,б,7.8 удобны хотя бы потому, что это
стандартные клавиши для управления крсорон в "Спектруме" и
очень мнгие
игры используют их для упрвления.

Строки 115.125,135 и 145 обрабатывают тот случай, когда
наш
прямоугольник, с помощью которого мы рисуем, достиг границ
экрана. Поскольку
при движении прямоугольник не стирается, он
оставляет на экране след и с его помошью можно что-то рисовать.
Вы. конечно, можете использовать команды IHK и PAPER, чтобы
подстроить цвета по своему вкусу.

10 LET у=0
20 LET Х=0

90 REM ««рисование блоками»•

100 PRIHT AT У. х; "■"

110 IF IHXEY*="5" ТНЕН LET Х=Х-1

115 IF S<=0 ТНЕН LET Х=0

120 IF IHKEY$="6" THEH LET У=У*1

125 IF У> = 21 THEH LET У=21

130 IF IHKEY*="7" THEH LET у=у-1

135 IF У<=0 THEH LET У=0

140 IF INXEY*="8" THEH LET x=x+1

145 IF x>=31 THEH LET x=31

150 GO TO 90

Примерный результат работы показан на рис. 30.

ПРИНЕР-7. 4

В рамки данной книги не входит создание сложных
компьютерных
игр, поскольку они требуют немного
более высого
уровня программирования, но мы делаем первые шаги
в нужном направлении и Вы уже видите по предыдущей программе,
что мы можем управлять движением какого-то объекта на экране.
Правда, он оставляет после себя след на экране, но если мы
хотим, чтобы объект выглядел более реалистично, то можем сти-
рать его изображение перед тем, как печатать новое. Это можно
сделать, если окружить наш символ пробелами со всех четырех
сторон.

Кроне того, в этой программе сделано так, что можно изме
нять пределы "окна", в которой происходит движение,
ю LET Y-1
20 LET X=l

90 REH »«двигающийся блок»»

95 PRIHT AT y-1, x; " "

100 PRIHT AT У. X-l; " ■ "

105 PRIHT AT УМ. x; " "

110 IF IHKEY$-"5" THEN LET X = X-1

115 IF X< =1 THEN LET X=1

120 IF IHKEY*="6" THEH LET У=УМ

125 IF У> = 20 THEH LET y=20

130 IF INKEY»="7" THEN LET у у-1

135 IF у<=1 THEH LET у=1

140 IF IHKEY$ = "6" THEN LET X = XM

145 IF X>=30 THEN LET x=30

150 GO TO 90

7. 6 операторы plot и draw.

До сих пор ны печатали на экране с низкой разрешающей
способностью, Ны имели 22 экранных строки по 32 знакоместа в
каждой. Но "Спектрун" позволяет также работать и с графикой
высокого разрешения. Каждое знакоместо состоит из точек, их
называют пикселами. В одном знакоместе 8 пикселов по горизон-
тали и 8 по вертикали, т. е. всего каждое знакоместо состоит из
64-х пикселов.

таким образом, экран имеет 32x8=256 пикселов в ширину и
22x8=176 пикселов в ВЫСОТУ.

Каждый пиксел задется двумя координатами - х и у. Коорди-
ната х - по горизонтали, она измеряется слева направо, коорди-
ната
у - по вертикали и измеряется снизу вверх. Сначала зада-
ется координата х. а потом координата у. Об этом следует пом-
нить, поскольку этот порядок противоположен тому, который был в
графике низкого разрешения
при использовании оператора
priht at.

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

Есть и еше одно важное отличие от графики низкого разреше-
ния. Там ны вели отсчет нонеров
строк (координата у) сверху
вниз. Здесь же отсчет координаты у
производится снизу вверх.

Оператор PLOT х, у ставит точку на экране с координатани
х. у. Пояснение изображено на рис. 31.

Попробуйте сани, задавая разные значения х в диапазоне от
о до 255 и у в диапазоне о...175. № увидите, насколько налы
пикселы. Нан еше надо понять, в какой цвет будет окрашен пик-
сел. Здесь все очень
просто. Он окрашивается в текущий цвет
IHK
(который был включен последний раз).

Если мы захотим нарисовать длинную линию, то было бы слиш-
кон утомительнын рисовать ее по пикселан. Нан на поношь прихо-
дит оператор
draw. Для рисования прямых он инеет следующую

форну.

DRAW х. у

Линия начинается с последней поставленной на экране точки.
Неважно, каким операторон ны ее ставили - PLOT или DRAW. Такие
конанды. как HEW. RUH. CLEAR
и CLS устанавливают эту точку в
исходное положение (0.0).

Заканчивается наша линия в другой точке, которая отстоит
от исходной на х пикселов по горизонтали и
у пикселов по верти-
кали. Такин образон. паранетры х и у в операторе DRAW задают не
начальные и не конечные координаты концов линии, а на сколько
конец отстоит от начала, т. е. - "снешение". вы ножете исполнить
линию и цветной, но здесь нужна внинательность. Дело в тон. что
цвета в "Спектруне" задаются не для пикселов, а для знаконест.
Поэтону желая покрасить один пиксел в цвет IHK, Вы покрасите
также и все прочие включенные пикселы в этон знаконесте.

Следующая програнна нарисует французский Флаг в полный
цвет, флаг состоит из трех вертикальных полос. Слева направо:
синяя, белая, красная, для контраста сделаен черный бордюр,
во
rem ««французский триколор»»
90 BORDER О
100 CLS

110 FOR у=0 ТО 175
115 PLOT О,
у
120 IHK 1

125 REM »»Синяя полоса»»
130 DRAW 85.0
140 IHK 7

145 REM »«Белая полоса»•
150 DRAW 85,0
160 IHK 2

165 REH ««Красная полоса»«
170 DRAW 85.0
180 НЕХТ
у
190 STOP

ВСК-7. 2

1) Переделайте эту програнна так. чтобы она рисовала
бельгийский Флаг (черная - желтая - красная верти-
кальные полосы). Примечание: цвет бордюра придется изменить,
поскольку одна из полос использует черный цвет.

2) Переделайте эту программу так. чтобы она рисовала
итальянский Флаг (зеленая - белая - красная вертикальные поло-
сы).

Ны можем применять оператор draw не только для рисования
прямых, но и для кривых линий:

draw х, у, а

Здесь х.у - как обычно "смешение" координат конца относи-
тельно начала, а параметр "а" - это угловая мера соединяющей
дуги, он измеряется не в градусах, а в радианах.

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

Для изображения полной окружности "Спектрум" имеет еше
один оператор - CIRCLE. Его формат

circle х, у. г

где х, у - координаты центра, а г - радиус будущей окружности.

Вот принер программы, которая изобразит серию концентри-
ческих окружностей путем увеличения радиуса в цикле FOR. . . НЕХТ.
100 FOR
г О ТО 70 STEP 5
110 CIRCLE 100, 75. Г
120 NEXT
г
130 STOP

Вы можете расцветить изображение, как обычно оператором
IHK, ножете это сделать с использованием случайно выбранного
цвета, как в следующей программе:

100 FOR г=0 то 70 STEP 5
110
CIRCLE 100. 75. г
120
IHK IHT(RHD«7)
130 нехт г
140
STOP

Непривычное рспределение цветов на экране по спиралям выз-
вано тем фактом, что цветовые атрибуты "привязаны* не к пик-
сельным координатан. а к знакоместам

УПРАЖНЕНИЕ-7. 1 Ны показали, как рисуется любой Флаг, состоя-

-ший из вертикальных полос. Попробуйте сани

написать программу, которая нарисует Флаг, состоящий из трех

горизонтальных полос, например, флаг России:

верхняя полоса - белая
средняя полоса - синяя
нижняя полоса - красная

Обратите внимание на то, что цвета на Российском флаге
слабо насыщенные, поэтому лучше включить повышенную яркость -
BRIGHT-1, тогда Флаг
получится более натуральным.

7. 9 Графика пользователя.

В рамки данной книги не входит разбор того, как самому за-
давать дополнительные символы. Пока достаточно сказать только,
что в графическом режиме (
курсор "G") программист может задать
21 символ (от А до U) такими, какими пожелает, даже если они не
входят в стандартный символьный набор "Спектрума". Символ обра-
зуется из восьми рядов, по восемь пикселов в ряду для каждого
знакоместа. И один восьмипиксельный ряд может быть представлен
двоичным числом от О до 255. Поэтону с поношью команды РОКЕ и
функции USR любой пиксел в ряду может быть включен или выклю-
чен. Включенный пиксел окрашен в цвет INK, а выключенный - в
цвет PAPER. Если чередовать включенные и выключенные пикселы,
то в знакоместе может происходить смешивание цвета INK и PAPER
и тогда возножно (хотя это и зависит от качества настройки Ва-
шего телевизора) в определенной степени получение новых цветов,
давайте с помошью следующей программы попробуем получить раду-

Здесь в строчках 30 и 40 задается символ в виде чередую-
щихся включенных и выключенных точек. В строке 150 этот символ
печатается 32 раза по ширине экрана.

Программа рисует семицветную радугу. Для тех цветов, кото-
рые совпадают со стандартными, INK и PAPER устанавливаются оди-
наковыми (строка 300), но, например, для получения оранжевого
цвета используется смесь INK 2 (красный) и PAPER б (желтый).
10 REH ««задаем символ»»
20 FOR Х=0 ТО б STEP 2
30 POKE USR "а"+х.85
40 POKE USR "а
"+х+1. 170
50 NEXT X

60 REH ««черное небо»»
70 BORDER О
80 PAPER О
90 CLS

юо REM ««ввод цветов»«
110 FOR f=0 ТО 6

10 - 6613

120 READ Ч, P
130 IHK 4
140 PAPER P

145 REH ««символ A - в графической режиме»«

150 PRIHT "AAAAAAAA......AAAAAA"

160 HEXT f
170 PAPER 0
180 IHK 7

190 PRIHT "цвета радуги"
200 PRIHT "цвета радуги"
210 PRIHT "красный"
220 PRIHT "оранжевый"
230 PRIHT "желтый"
240 PRIHT "зеленый"
250 PRIHT "голубой"
260 PRIHT "синий"
270 PRIHT "Фиолетовый"
280 STOP

290 REH задание цветов

300 DATA 2, 2. 2. 6, 6, 6,4. 4, 5, 5, 1, 1, 3. 3

7. 10 Звук в Ваших программах.

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

РОКЕ 23609. 255.

то при нажатии на клавишу будете слышать звуковой сигнал. Вы
можете проварьировать
высоту тона этого сигнала, если попробу-
ете задавать разные числа от О до 255 после роке 23609....
Правда. Вы быстро обнаружите, что это несколько снизило ско-
рость набора символов на клавиатуре, но зато теперь Вы можете
работать, не глядя на экран, чтобы Убедиться,
прошло ли преды
душее нажатие на клавишу.

команда РОКЕ 23609. О избавит Вас от этого звука, когда он
вам надоест.

Звук в программу вводится с помошью оператора ВЕЕР, кото-
рый имеет два параметра:

ВЕЕР а.ь

а - длительность тона;
b - высота тона.

Вот программа, которая исполнит 50 нот "до" второй октавы,
каждая из которых будет все короче и короче, их длительность
составит от 1 секунды до О. О?, сек.

5 REfL ««BEEP**
10 FOR f=l TO 50
20 BEEP 1/f,12
40 NEXT f

Следующая програнна. наоборот, оставит длительность каждой
ноты неизменной, а проварьирует высоту звука, она начнет на 60
полутонов ниже "до" первой октавы и закончит на 60 полутонов
выше "до" первой октавы.

10 REM

20 FOR f=-60 ТО 60
30 ВЕЕР О. 5, f
40 NEXT f

В европейской музыке в октаве 8 нот. но октава состоит из
12
полутонов. Нижеследующая таблица показывает высоту звука

нот:

Высота тона

Нота

0

"до" первой октавы

1

"до#" (диез)

2

" ре"

3

"ре#"

4

"ми"

5

"Фа"

6

"Фа#"

7

"соль"

й

"соль#"

9

"ля"

10

"ля#"

11

"си"

12

"до" второй октавы

Примечание: ноты ниже "до" первой октавы задаются отрица-
тельными числами.

Ноты более высоких или более низких октав могут быть зада-
ны путей прибавления числа 12 по одному разу за каждую октаву
вверх или вниз.

Вот демонстрации нот первой октавы.

Ю rem ««гамма до мажор»»

20 REM ноишпхкиищ
30 ВЕЕР 1.0: REM До
40 ВЕЕР 1,2: REM Ре
50 ВЕЕР 1,4: REM Ми
60 ВЕЕР 1.5: REM ФЙ

70 BEET 1,7: REM СОЛЬ

80 BEEF 1.9: REH ЛЯ

90 BEEP 1. 11: REH СИ

100 BEEP 1.12: REH ДО'

Интервалы между "до" и "ре", "ре" и "ми", "Фа" и "соль",
"соль" и "ля", "ля* и "си" равны
двум полутонам, в то время как
между "ми" и "Фа", а также "си" и "до" равны только
одному по-
лутону.
Поскольку "соль" на 7 полутонов выше "до", нам доста-
точно прибавить число
7 к каждой ноте предыдущей гаммы, чтобы
получить вместо гаммы, начинающейся с ноты "до" , гамму, начи-
нающуюся с ноты "соль".

10 REH ««Гамма Соль-мажор«»
20 REM •«««>«»«»««»•««•««
30 ВЕЕР 1.7: REH ДО
40 ВЕЕР 1,9: REM Ре
50 ВЕЕР 1,11: REH Ни
60 ВЕЕР 1, 12: REM Фа
70 ВЕЕР 1.14: REH СОЛЬ
80 ВЕЕР 1. 16: REH ЛЯ
90 ВЕЕР 1. 18: REH СИ
100 ВЕЕР 1. 19: REM До'

теперь давайте исполним мелодию. Возьмем, для примера
"Лондонский пожар", тактовый размер - з/4. Примем для одной
четверти п=0.
5. пусть к - это тональность. Если мы будем испол-
нять в тональности "соль", то к=7. Нелодия начинается с "ре",
которя на 2 полутона выше, чем "до",
поэтому ноту "ре" будем
задавать, как
к-5, поскольку к-5=7-5 = 2.

10 REH ««лондонский пожар»»
20 LET К--7

зо rem ««к - тональность,

в нашем случае - соль. ««
40
let 11=0. 5

50 REM ««n-длительность ноты

(в нашем случае - четверть)««
60 reh «»такт 1. »«
70 веер п/2.к-5
80 веер п/2.к-5
90 reh
««такт 2. ««
100 веер п, к
1 10 веер п, к
120 веер п/2.к-5
130 веер п/2.к-5
140 rem
««Такт 3. «»
150 веер п. к
160 веер п. к
170 ВЕЕР п/2.к+2

180 ВЕЕР П/2, К+2
190 REH ««Такт 4. »«
200 ВЕЕР П, К+4
210 ВЕЕР П. К+4
220 ВЕЕР П/2.К+2
230 ВЕЕР П/2. К+2
240 REH ««Такт 5. ««
250 ВЕЕР П. К+4
260 ВЕЕР П.К+4
270 ВЕЕР П. К+7
280 REH ««Такт 6. ««
290 ВЕЕР П«2,К+7
300 ВЕЕР П. К+7
310 REH ««Такт 7. »»
320 ВЕЕР П»2,К+7
330 ВЕЕР П/2. К+7
340 ВЕЕР П/2.К+5
350 REH ««Такт 8. ««
360 ВЕЕР П, К+4
370 ВЕЕР П. К+4
380 ВЕЕР П/2.К+7
390 ВЕЕР П/2.К+5
400 REM ««Такт 9. ««
410 ВЕЕР П. К+4
420 ВЕЕР П. К+4
430 STOP

Если Вы запустите следукшую программу, то увидите, что
можно исполнять достаточно сложные мелодии. Правда. Вы не може-
те играть многоголосие, поскольку у "Спектрума" только один
звуковой канал.

Повторы мелодии обеспечиваются с помощью циклов FOR . . .
НЕХТ. Если Вы хорошо подготовлены в музыкальной теории, то
сможете легко писать музыкальные программы. Если нет, то Вам
помогут простейшие сборники-песенникИ, в которых приводятся
ноты.

ю rem ««дарби келли»»

20 REM ншншшшпшншшш

зо rem ««темп»»

40 LET Х = 0. 35

50 REM «a*»»»*»»»*»»»»»»**»»»»»»»»»»»»»

60 REM ««Тональность соль-мажор»«

70 LET 19

80 REH ««к»»»»»»»»»»»»»»»»»»»»»»»»»»»»»

85 FOR г=0 то 1

90 ВЕЕР X/2.K-5
100 ВЕЕР X, К

110 ВЕЕР Х/2.К+4
120 ВЕЕР X. К+4
125 НЕХТ Г
130 BEEP Х/2.К-5
140 ВЕЕР Х.К
150 ВЕЕР Х/2.К+4
160 ВЕЕР Х/3,К+4
170 ВЕЕР Х/З.К+2
160 ВЕЕР Х/3. К+4
190 ВЕЕР Х.К+5
200 ВЕЕР Х/2.К+2
210 ВЕЕР Х.К+2
220 ВЕЕР Х/2.К-5
230 ВЕЕР Х.К
240
веер х/2. К+4
250 ВЕЕР Х/З.К+4
260 ВЕЕР Х/З.К+2
270 ВЕЕР Х/З.К
280 ВЕЕР Х.К-З
290 ВЕЕР Х/2.К+5
300 ВЕЕР X, К+5
310 ВЕЕР Х/2.К-3
315 FOR S=0 ТО 1
320 ВЕЕР Х.К-5
330 ВЕЕР Х/2.К+4
340 ВЕЕР X. К+4
350 ВЕЕР Х/2.К+2
360 ВЕЕР Х.К+2
370 ВЕЕР Х/2.К
380 ВЕЕР Х.К
385 FOR Г=0 ТО 1
390 ВЕЕР Х/2.К+4
400 ВЕЕР Х.К+2
410 ВЕЕР Х/2.К-5
420 ВЕЕР Х.К-5
425 НЕХТ Г
430 ВЕЕР Х/2.К+4
440 ВЕЕР Х.К+2
450 ВЕЕР Х/2.К+7
460 ВЕЕР Х/3.К+7
470 ВЕЕР Х/З.К+6
480 ВЕЕР Х/3, К+7
490 ВЕЕР X.К+7
500 ВЕВР Х/2.К-5
510 ВЕЕР Х«4,К-5
520. ВЕЕР Х/2.К+5
530 ВЕЕР X. К+4
540 ВЕЕР Х/2.К+2

550 beep x, к
560 веер х/2.к-1
570 веер ж.к-3
580 веер
Т/г. к
590 веер х/3. к
600 ВЕЕР Х/3, К-1
610 веер Х.К^З
615 нехт s
620 веер х.к-5
630 веер х/2.к
+4
640 веер x. к*4
650 веер х/2.к+2
660 веер
х, к+г
670 веер Х
680 веЕр
х/г

применение "ИНФОРКОКА". По игровым программам Вы знаете,
что многоголосие все-таки возможно и нередко используется, но
это достигается специальными приемами, для
которых требуется
программирование в машинных кодах. Стандартные процедуры, со-
держащиеся в ПЗУ. на которые опирается БЕЙСИК, этого делать не
могут. Если Вас интересуют подобные вопросы. Вы можете найти
дополнительную информацию в нашем периодическом издании
"ZX-РЕВЮ". Ны неоднократно останавливались на этих и
других
не менее интересных вопросах.

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

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

строка данных будет выглядеть так:

DATA О. 2.4. 5. 7. 9, 11. 12

7. 11 Звуковые эффекты в программах.

УПРАЖНЕНИЕ-7. 2

ВЕЕР может использоваться не только для воспроизведения
музыки, но и для создания звуковых эффектов. По аркадным играм
Вам знакомы такие
звуки, как "взрыв", "полет НЛО" и т. п.

Вернемся к нашему старому знакомому - автобусу. В старую
программу 7. 2 мы вставили строки 123. ..126, инитируюшие работу
мотора. Поскольку оператор ВЕЕР замедляет работу программы, нам

теперь не нужна пауза, создаваемая оператором PAUSE.
90 FOR Х=0 ТО 24
95 IHK 2

100 PRINT AT 12.x;" ВЯНН*
НО PRINT AT 13.x;" ШШШШ"
115 INK О

120 PRINT AT 14.х;" О О"

122 REH ««ЗВУК нотора»»

123 ВЕЕР О. 005,0
126 ВЕЕР 0.005,24
130 НЕХТ X

Следующая вариация программы производит звук только при
каждом втором перемещении автобуса, поэтому звучание отличает-
ся.

90 FOR Х=0 ТО 24
95 INK 2

100 PRIHT AT 12, х; " ■MM"
110 PRIHT AT 13, Xi" ММШ"
115 INK 0

120 PRIHT AT' 14, x; " 0 0"

121 IF X/2 = IHT (X/2) THEH GO TO 130

122 REH ««Звук мотора»»

123 BEEP 0. 005, 0
126 BEEP 0.005.24
130 HEXT X

обзор урока

Проверьте свое знание следующих вопросов:

- использование оператора BORDER;

- использование IHK и PAPER;

- смешение двух цветов для получения третьего;

- использование цветов для повышения наглядности
выводимой информации;

- создание движущихся изображений;

- графические команды plot, draw и circle;

- применение ВЕЕР для создания мелодий;

- применение ВЕЕР для звуковых эффектов.

ответы на вопросы для самоконтроля

ВСК-7.1| (а) желтый бордюр

" (в) красный Фон

(с) пурпурные символы.

ВСК-7. 2] 1. Бельгийский Флаг.

I 80 REH »«Бельгийский триколор»»

90 BORDER 7
100 CLS

110 FOR Г-о ТО 175
115 PLOT о. у
120 IKE О

125 REH »«Черная полоса»»
130 DRAW 85.0
140 IHK 6

145 REH ««Желтая полоса»»
150 DRAW 85.0
160 IHK 2

165 REH ««Красная полоса»»
170 DRAW 85.0
180
НЕХТ у
190 STOP

2. Итальянский Флаг.

80 REM »«итальянский триколор»»
90 BORDER О
100 CLS

110 FOR У=0 ТО 175
115 PLOT О. У
120 IHK 4

125 REM ««Зеленая полоса»•
130 DRAW 85.0
140 IHK 7

145 REM ««Белая полоса»»
150 DRAW 85. О
160 IHK 2

165 REH »«Красная полоса»«
170 DRAW 85,0
180 NEXT У
190 STOP

ОТВЕТЫ К УПРАЖНЕНИЯМ

УПРАЖНЕНИЕ-7. 1

Российский Флаг.
90 BORDER О: BRIGHT 1
100 CLS

110 FOR У=0 ТО 58
115 INK 7
120 PLOT О. У
1 30 DRAW 255. О

140 НЕХТ У

150 FOR У-59 ТО 117

160 IHK 1

170 PLOT О. У

180 DRAW 255.0

190 НЕХТ У

200 FOR У=116 ТО 175
210 IK 2
220 PLOT О. У
230 DRAW 255.0
240 НЕХТ Т

УПРАЖНЕНИЕ-?. 2

10 БЕН «»Нажорные гаммы»»

20 КЕН ««в»»»»»»»»»»»»»»»»»»»»»».......

25 DIH S*(39)

30 LET S*="До до* Ре Ре* Ни Фа Фа*

"Соль соль*дя дя* си до' "
40 REH ««««
42 BORDER 1

44 IHK О

45 PRIHT AT 9,8; FLASH 1; "Тональные ряды"
50 REH ................................

60 REH ««Генерация 13-ти тонов от До до До'»»
70 FOR К:1 ТО 13

75 PRIHT AT 12,4; "ЭТО тональность ";S»(K»5-4 ТО К»5)
80 FOR Х=0 ТО 7
90 READ П
100 ВЕЕР О. 75. П+К-1
НО НЕХТ X
115 RESTORE

117 REH »»одни и те же данные используются во всех

тональностях»«

118 PAUSE 50
120 НЕХТ К

130 REM ««Ноты в мажорной гамме»»
150 DATA 0.2.4,5.7.9.11.12

160 REH ...................................

165 CLS
170 STOP




  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Интерфейс - Рубрика посвящена письмам читателей. Информация к размышлению о жизни SPECCY.
Credits - Напоследок...
Открытие - POKE и читы к играм.
DiHalt`06 - Обзор и история пати.
Мысли - Ересь: Прочитал я Heresy 8, и, к своему удивлению, обнаружил там несколько моментов.

В этот день...   21 ноября