Установка маркера на позицию горизонтального меню



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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!