Как на Qbasic сделать вертикальное меню

Узнай цену своей работы

Формулировка задачи:

Нужно вывести на экран в столбец пункты меню, примерно так: Пункт 1 Пункт 2 ... Пункт 10 Пункт 1 выделить другим цветом. И ждать нажатия клавиш стрелок вверх и вниз. При нажатии стрелки вниз Пункт i закрашивается фоновым цветом, а Пункт i+1 выделяется Если сейчас выделен первый пункт, то выделяется последний. При нажатии стрелки вверх Пункт i закрашивается фоновым цветом, а Пункт i-1 выделяется Если сейчас выделен последний пункт, то выделяется первый. И все это в текстовом режиме SCREEN 0 ! Как всё это сделать? Только не надо общих слов, дайте конкретные команды, хотя бы основные.

Решение задачи: «Как на Qbasic сделать вертикальное меню»

textual
Листинг программы
  1. Vib% = 0   ' Текущий выбор
  2. Drw% = 1   ' Нарисуем меню в самом начале
  3. DO   '  Это бесконечный цикл с постусловием
  4.  
  5.  
  6.    Kb$ = INKEY$    '  Это получение кодов нажатых клавиш
  7.                    '  т.е. если клавиша была нажата, её
  8.                    '  код в строковом выражении запишется
  9.                    '  в строковую переменную Kb$, а если
  10.                    '  не было нажатий клавиш, то соотв.
  11.                    '  переменная будет пустым значением.
  12.  
  13.      '  Это мы проверяем нажата ли клавиша вверх(смотрим Kb$)
  14.      '  и отнимаем единицу от значения выбранного пункта, если
  15.      '  его значение больше нуля, т.е. не даём выйти за ноль.
  16.      '  После изменения значения, ставим флаг отрисовки меню
  17.  
  18.    IF Kb$ = CHR$(0) + "H" AND Vib% > 0 THEN Vib% = Vib% - 1: Drw% = 1
  19.  
  20.      '  Это мы проверяем нажата ли клавиша вниз
  21.      '  и прибавляем единицу к значению выбранного пункта, если
  22.      '  его значение меньше двух, т.е. мы ограничиваем кол-во
  23.      '  пунктов тремя значениями: 0, 1, 2
  24.      '  Также после изменения значения, ставим флаг отрисовки меню
  25.  
  26.    IF Kb$ = CHR$(0) + "P" AND Vib% < 2 THEN Vib% = Vib% + 1: Drw% = 1
  27.  
  28.      '  Тут будет выбор пункта меню ENTER'ом
  29.    IF Kb$ = CHR$(13) THEN
  30.           '  Пусть надпись выводится вверху, жёлтым цветом
  31.       LOCATE 1, 1: COLOR 14
  32.           '  Селект кейзу скармливаем переменную,
  33.           '  по значению которой нужно произвести выбор
  34.           '  Далее пишем CASE, номер пункта и код для выполнения
  35.           '  Двоеточие равносильно переводу на другую строку, т.е.
  36.           '  если бы мы писали код на следующей строке.
  37.       SELECT CASE Vib%
  38.          CASE 0: PRINT "Punkt 1"
  39.          CASE 1: PRINT "Punkt 2"
  40.          CASE 2: PRINT "Punkt 3"
  41.       CASE ELSE     ' Этой строчки требуют некоторые компиляторы
  42.                     ' по сути это исключающее условие, т.е. если
  43.                     ' ни один пункт не выбран, то выполнится код
  44.                     ' между CASE ELSE и END SELECT(однако этого
  45.                     ' никогда не произойдёт).
  46.       END SELECT
  47.    END IF
  48.  
  49.          '  Это условие отрисовки меню
  50.          '  после изменения выбранного пункта
  51.          '  оно единоразово выполняется
  52.  
  53.          IF Drw% = 1 THEN
  54.  
  55.                       '  Сбросим флаг отрисовки, чтобы не
  56.                       '  выполнять мног раз. Нам нужно
  57.                       '  перерисовывать меню только тогда,
  58.             Drw% = 0  '  когда выбранный пункт изменился.
  59.  
  60.           '  Тут ставим позицию печати в заданную точку(LOCATE)
  61.           '  и проверяем ровняется ли значение выбранного пункта
  62.           '  значению пункта который в тек. момент отрисовываем.
  63.           '  Если ровняется, значит это и есть выбранный пункт,
  64.           '  помечаем его особым цветом(11), в противном случае ставим
  65.           '  ему обычный цвет(8).
  66.           '  Цвет задаётся оператором COLOR
  67.  
  68.           '  Пункт 1
  69.           LOCATE 5, 10: IF Vib% = 0 THEN COLOR 11 ELSE COLOR 8
  70.  
  71.                '  Печатаем наш пункт
  72.                PRINT "Punkt 1"
  73.  
  74.           '  Пункт 2
  75.           LOCATE 6, 10: IF Vib% = 1 THEN COLOR 11 ELSE COLOR 8
  76.                '  Печатаем наш пункт
  77.                PRINT "Punkt 2"
  78.  
  79.           '  Пункт 3
  80.           LOCATE 7, 10: IF Vib% = 2 THEN COLOR 11 ELSE COLOR 8
  81.                '  Печатаем наш пункт
  82.                PRINT "Punkt 3"
  83.  
  84.          END IF  '  Конец отрисовки меню
  85.  
  86.      '  Тут код цикла заканчивается
  87.      '  Заодно поставим постусловие на выход из цикла
  88.      '  по нажатию клавиши ESCAPE
  89. LOOP UNTIL Kb$ = CHR$(27)
  90. CLS  '  Очистим экран, дальше никаких END'ов не надо
  91.      '  интерпретатор и так поймёт что это конец программы.

Объяснение кода листинга программы

  1. Переменная Vib% инициализируется значением 0 и используется для отслеживания текущего выбранного пункта меню.
  2. Переменная Drw% инициализируется значением 1 и используется для управления отрисовкой меню.
  3. Код в бесконечном цикле выполняется до тех пор, пока не будет нажата клавиша ESCAPE.
  4. В каждой итерации цикла проверяется, была ли нажата клавиша вверх (код H). Если это так, то значение переменной Vib% уменьшается на 1, если оно больше 0, и флаг Drw% устанавливается в 1 для перерисовки меню.
  5. Затем проверяется, была ли нажата клавиша вниз (код P). Если это так, то значение переменной Vib% увеличивается на 1, если оно меньше 2, и флаг Drw% устанавливается в 1 для перерисовки меню.
  6. Если нажата клавиша ENTER (код 13), то выполняется код для выбора пункта меню.
  7. В этом коде используется оператор CASE для определения, какой пункт меню был выбран, и соответствующий код выполняется для каждого пункта.
  8. После выбора пункта меню или нажатия клавиши ENTER, экран очищается командой CLS.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы