Установка маркера на позицию горизонтального меню
rem горизонтальное меню из трех пунктов (окон) с установкой маркера в поле color 2, 14 ‘ 14 – светло-коричневый фон экрана, 2 – зеленые буквы заголовка cls locate 1, 20: print “программа построения горизонтального меню” locate 2, 25: print “с установкой маркера в поле окна” dim menu$ (3) ‘ массив наименований пунктов меню for i=1 to 3 read menu$(i) next i data “сортировка”, “печать”, “выход” rem формирование первичного меню rem маркер устанавливается в первое (левое) поле i0=5 ‘ i 0 – номер строки с которой формируются окна for i=i0 to i0+2 ‘ размер окна по вертикали – три строки for j=1 to 3 ‘ внутренний цикл по количеству окон (пунктов) меню if j=1 then ps=10 ‘ ps – начальный номер позиции первого окна – 10 с=3 ‘ 3 – цвет маркера в первом поле (голубой) else if j=2 then ps=35 ‘ 35 – начальный номер позиции второго окна с=7 ‘ 7 – цвет второго окна – белый (без маркера) else ps=60 c=7 end if color 1, с locate i, ps: print “ “ ‘ расположение первого/второго окна меню locate i0, ps: print chr$(201); string$(10, chr$(205)); chr$(187) ‘ верхняя кромка двойной рамки с уголками locate i0+1, ps: print chr$(200); menu$(j); chr$(186) ‘ заполнение окон меню названиями с двойной вертикальной рамкой locate i0+2, ps: print chr$(200); string$(10, chr$(205)); chr$(188) ‘ нижняя двойная рамка с уголками next j flag=1 777 rem часть повторяющегося фрагмента программы c$=”” do on key (12) gosub levo ‘ переход в п/п levo от нажатия клавиши <влево> key (12) on on key (13) gosub pravo ‘ переход в п/п pravo от нажатия клавиши <вправо> key (13) on color 2, 14 locate 20, 28: print “установите маркер на нужный пункт меню” locate 21, 25: print “клавишами управления курсора и нажмите <Enter>” if instat then c$=inkey$ loop until c$=chr$ (13) if flag=1 then gosub sort ‘ переход в п / п сортировки if flag=2 then gosub pechat ‘ переход в п/п вывода результатов if flag=3 then goto konec ‘ переход на конец программы goto 777 konec: rem завершение программы cls locate 12, 30 print “до свидания” stop sort: rem п/п сортировки color 2, 5 ‘ 5 – фиолетовый фон окна, 2 – зеленые цифры и буквы for k=10 to 16 ‘ цикл построения окна – тени locate k, 26: print string$ (22, chr$ (176)) ‘ 176 – код редких точек next k for k=9 to 15 ‘ номера строк ниспадающего меню в п/п сортировки locate k, 26: print chr$(179)” “chr$(179) ‘ печать строк ниспадающего меню с одинарной рамкой delay 0.05 if k=9 then locate k, 25 print chr$ (218) “печать сортировки” chr$(191) if k=15 then locate k, 25: print chr$(192)string$(20,chr$(196))chr$(217) next k return pechat: rem п/п печати результатов в ниспадающем меню с наложением на предыдущий вывод color 7, 4 ‘ 7 – белые цифры (буквы), 4 – красный фон окна вывода for k=12 to 19 ‘ построение окна со смещением по отношению к окну вывода с последующей закраской редкими точками для придания эффекта тени locate k, 36: print string$(22, chr$(176)) ‘ 176 – код редких точек next k for k=11 to 18 locate k, 35: print chr$(179) string$(20,” “)chr(179) ‘ печать ниспадающего меню Delay 0.05 If k=11 then locate k, 35: print chr$(218)”печать результатов”chr$(191) If k=18 then locate k, 35: print chr$(192) string$(20, chr$(196))chr$(217) next k return levo: rem перемещение маркера влево ps1=10 ‘ установка начального номера позиции первого (левого) окна меню зы2=35 зы3=60 flag=flag-1 ‘ flag – признак работы функции перемещение влево (уменьшение на 1) if flag<1 then flag=3 if flag=1 then c1=3;c2=3;c3=7 ‘ 3 - установка фона маркера (голубой цвет) в первом окне, 7 – установка белого фона во втором окне, 7 – установка белого фона в третьем окне if flag=2 then c1=7;c2=3;c3=7 if flag=3 then c1=7;c2=7;c3=3 ‘print “flaf=”flag gosub menu return menu: rem п/п установка маркера в нужном окне от нажатия клавиш <влево>/<вправо> for i=i0 to i0+2 for j=1 to 3 if j=1 then c=c1 ps=ps1 else if j=2 then c=c2 ps=ps2 else c=c3 ps=ps3 end if color 1,c locate i, ps: print “ ” locate i0, ps: print chr$(201); string$(10, chr$(205)); chr$(187) locate i0+1, ps: print chr$(186): menu$(j); chr$(168) locate i0+2, ps print chr$(200); string$ (10, chr$(205)); chr$(188) next j next i return |
МУЗЫКАЛЬНЫЕ СРЕДСТВА ТБ
|
|
|
|
ПК снабжаются, как правило, встроенными динамиками, используя которые можно генерировать как простой тон, так и сложные музыкальные звукоряды. Для этого используются операторы BEEP, SOUND и PLAY.
|
|
Основные «музыкальные» операторы
Простейшим звуковым оператором является оператор beep. Он может генерировать звуковой сигнал длительностью 0.25 с и частотой 800 Гц. Этот оператор используется для извещения пользователя (привлечения внимания) о начале работы той или иной подпрограммы, процедуры, либо о возникновении ошибки и т. п.:
…………..
If x<0 then
Beep
gosub a
else
beep:beep
gosub b
end if
………….
Оператор sound позволяет воспроизводить различные звуковые сигналы и их последовательные комбинации. Формат оператора:
sound <частота>,<длительность>
где
<частота> - числовое выражение, определяющее частоту звучания сигнала (Гц). Диапазон частот составляет 37 - 32767 Гц.
<длительность> - числовое выражение, определяющее длительность звучания сигнала во внутренних квантах времени ПЭВМ. Диапазон задаваемых длительностей составляет 0 – 65535 квантов, что соответствует временному диапазону от доль секунды до получаса. Для расчета длительности звучания сигнала следует использовать соотношение: 1с=18.2 внутреннего кванта или 1 мин =1092 внутренних квантов.
Например, sound 392, 36.4
Этот оператор генерирует звук частотой 392 Гц в течение 2 с (36.4/18.2=2)
ТБ не предусматривает ожидания окончания работы оператора sound для перехода к выполнению очередного оператора. Например:
|
|
10 cls: screen 1: key off
15 color 2, 2
20 sound 440, 36.4
25 paint (1, 1), 2
30 if inkey$ = “” then goto 30
Программа генерирует ноту «ля» первой октавы с длительностью 2с. Пока ПЭВМ «держит» эту ноту, закрашивается экран.
Частоты звучания музыкальных нот сведем в таблицу соответствия
Таблица 1
нота | частота звучания нот | |||
октавы | ||||
малой | первой | второй | третей | |
до | 130,810 | 261,620 | 1046,250 | 1046,500 |
ре | 146,830 | 293,660 | 587,330 | 1174,700 |
ми | 164,800 | 329,630 | 659,260 | 1318,500 |
фа | 174,610 | 349,230 | 698,460 | 1396,500 |
соль | 196,000 | 392,000 | 783,990 | 1568,000 |
ля | 220,000 | 440,000 | 880,000 | 1760,000 |
си | 246,940 | 493,880 | 987,770 | 1975,000 |
Длительность звучания отдельных нот, задаваемых оператором sound, можно сопоставить с типичными темпами исполнения музыкальных произведений и эквивалентным каждому из них числом тактов в минуту. Таблица соответствия основных музыкальных темпов исполнения числу внутренних квантов (параметр <длительность>) и количества тактов в минуту.
Таблица 2
№ | Темп исполнения в минуту | Количество внутренних квантов времени такта | Число тактов в минуту |
1 | Largo (очень медленно) | 27,3 | 40 |
2 | Grave (тяжеловесно) | 18,2 | 60 |
3 | Lento (медленно) | 16,55 | 66 |
4 | Adagio (медленно) | 14,37 | 76 |
5 | Andante (умеренно) | 12,24 | 92 |
6 | Andantino (умеренно) | 10,11 | 108 |
7 | Moderato (спокойно) | 9,65 | 114 |
8 | Allegretto (оживленно) | 9,10 | 120 |
9 | Allegro (быстро) | 7,80 | 144 |
10 | Vivace (скоро, живо) | 6,50 | 168 |
11 | Presto (стремительно) | 5,25 | 208 |
12 | Prestissimo (очень быстро) | 5,00 | 220 |
Как видно из приведенных таблиц, воспроизведение музыкальных мелодий оператором sound чрезвычайно затруднено. Для разработчика программ необходимо под рукой иметь таблицы соответствия, кроме того, каждая нота в программе записывается своим оператором, поэтому даже простенькая мелодия отображается значительным по объему фрагментом программы. Однако, как видно из первой таблицы, между двумя соседними нотами (ми и фа) существует большая разница в значениях частоты (первого параметра оператора sound). Значит, можно добиться того, что оператор sound может воспроизводить такие звуки, которых нет ни на одном музыкальном инструменте. В этом и есть преимущество оператора sound перед другими операторами, он часто используется для получения специальных эффектов: скрип открывающейся двери, ступенек, падающих предметов и т. п.
Дата добавления: 2021-11-30; просмотров: 19; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!