Вывести на экран в столбец пункты меню- QBasic(Бейсик)

Vib% = 0   ' Текущий выбор
Drw% = 1   ' Нарисуем меню в самом начале
DO   '  Это бесконечный цикл с постусловием
 
 
   Kb$ = INKEY$    '  Это получение кодов нажатых клавиш
                   '  т.е. если клавиша была нажата, её
                   '  код в строковом выражении запишется
                   '  в строковую переменную Kb$, а если
                   '  не было нажатий клавиш, то соотв.
                   '  переменная будет пустым значением.
 
     '  Это мы проверяем нажата ли клавиша вверх(смотрим Kb$)
     '  и отнимаем единицу от значения выбранного пункта, если
     '  его значение больше нуля, т.е. не даём выйти за ноль.
     '  После изменения значения, ставим флаг отрисовки меню
 
   IF Kb$ = CHR$(0) + "H" AND Vib% > 0 THEN Vib% = Vib% - 1: Drw% = 1
 
     '  Это мы проверяем нажата ли клавиша вниз
     '  и прибавляем единицу к значению выбранного пункта, если
     '  его значение меньше двух, т.е. мы ограничиваем кол-во
     '  пунктов тремя значениями: 0, 1, 2
     '  Также после изменения значения, ставим флаг отрисовки меню
 
   IF Kb$ = CHR$(0) + "P" AND Vib% < 2 THEN Vib% = Vib% + 1: Drw% = 1
 
     '  Тут будет выбор пункта меню ENTER'ом
   IF Kb$ = CHR$(13) THEN
          '  Пусть надпись выводится вверху, жёлтым цветом
      LOCATE 1, 1: COLOR 14
          '  Селект кейзу скармливаем переменную,
          '  по значению которой нужно произвести выбор
          '  Далее пишем CASE, номер пункта и код для выполнения
          '  Двоеточие равносильно переводу на другую строку, т.е.
          '  если бы мы писали код на следующей строке.
      SELECT CASE Vib%
         CASE 0: PRINT "Punkt 1"
         CASE 1: PRINT "Punkt 2"
         CASE 2: PRINT "Punkt 3"
      CASE ELSE     ' Этой строчки требуют некоторые компиляторы
                    ' по сути это исключающее условие, т.е. если
                    ' ни один пункт не выбран, то выполнится код
                    ' между CASE ELSE и END SELECT(однако этого
                    ' никогда не произойдёт).
      END SELECT
   END IF
 
         '  Это условие отрисовки меню
         '  после изменения выбранного пункта
         '  оно единоразово выполняется
 
         IF Drw% = 1 THEN
 
                      '  Сбросим флаг отрисовки, чтобы не
                      '  выполнять мног раз. Нам нужно
                      '  перерисовывать меню только тогда,
            Drw% = 0  '  когда выбранный пункт изменился.
 
          '  Тут ставим позицию печати в заданную точку(LOCATE)
          '  и проверяем ровняется ли значение выбранного пункта
          '  значению пункта который в тек. момент отрисовываем.
          '  Если ровняется, значит это и есть выбранный пункт,
          '  помечаем его особым цветом(11), в противном случае ставим
          '  ему обычный цвет(8).
          '  Цвет задаётся оператором COLOR
 
          '  Пункт 1
          LOCATE 5, 10: IF Vib% = 0 THEN COLOR 11 ELSE COLOR 8
 
               '  Печатаем наш пункт
               PRINT "Punkt 1"
 
          '  Пункт 2
          LOCATE 6, 10: IF Vib% = 1 THEN COLOR 11 ELSE COLOR 8
               '  Печатаем наш пункт
               PRINT "Punkt 2"
 
          '  Пункт 3
          LOCATE 7, 10: IF Vib% = 2 THEN COLOR 11 ELSE COLOR 8
               '  Печатаем наш пункт
               PRINT "Punkt 3"
 
         END IF  '  Конец отрисовки меню
 
     '  Тут код цикла заканчивается
     '  Заодно поставим постусловие на выход из цикла
     '  по нажатию клавиши ESCAPE
LOOP UNTIL Kb$ = CHR$(27)
CLS  '  Очистим экран, дальше никаких END'ов не надо
     '  интерпретатор и так поймёт что это конец программы.

Тестирование выполнено в программе QB64 ( Скачать )

Leave a Comment