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 ( Скачать )