Вводим две переменных (допустим): текстовую/численную
menu и флаг
game. Текстовые переменные удобно использовать что бы не запутаться какой пункт меню за что отвечает.
Вот примерный код основного цикла с меню (как делаю я и мне это кажется вполне удобным и понятным):
...
menu$ = "main;
game% = false;
while (условие выхода из основного цикла)
select menu$
case "main":
; Рисуем и делаем то что нужно в основном меню.
; Допустим по клавише "Enter" мы загружаем игру,
; по клавише "Esc" мы выходим из игрового меню,
; а по клавише "q" выгружаем ресурсы игры из памяти.
if (keyhit(28)) then ;нажатие "Enter"
if (game = false) then
menu = "load";
end if
else if (keyhit(1)) then ;нажатие "Esc"
if (game = true) then
menu = "game";
end if
else if (keyhit(16)) then ;нажатие "q"
if (game = true) then
menu = "unload";
end if
end if
case "load":
; загружаем ресурсы
game = true;
menu = "game"
case "game":
; выполняем все нужные действия игры
if (keyhit(1)) then
menu = "main";
end if
case "unload":
; выгружаем ресурсы игры
game = 0;
menu = "main";
end select
wend
...
Как это работает.
При запуске приложения
game = 0, т.е. игра не загружена. Мы попадаем в основное меню (
menu = "main").
Полазили по основному меню, нажали на "Esc" - ничего не произошло, т.к. сейчас
game = false.
Захотелось поиграть - нажали клавишу "Enter". По условию попадаем в меню загрузки (
menu = "load"). В этом меню пользователь ничего не делает, игра загружает все ресурсы. После того как загрузились все ресурсы ставим флаг
game = true и переходим в игру.
Поигрались, захотели в меню, жмём "Esc", переходим в
menu = "main". Теперь если мы нажмём клавишу "Enter" - ничего не произойдёт, т.к.
game = true и загружать нам ничего ненадо. Для возврата к игре жмём "Esc", при этом вернёмся в меню
menu = "game".
Захотели выгрузить ресурсы игры (допустим хотим начать заново), жмём "q". приложение переходит в
menu = "unload", выгружает все нужные (точнее уже ненужные) нам ресурсы, ставит флаг
game = false и возвращется в menu = "main". Теперь у нас заработает загрузка игры по нажатию клавиши "Enter" и не будет ничего происходить по нажатию клавиш "Esc" и "q", т.к. флаг
game = false.
Вот как то так. Грубый набросок, но основную мысль вроде бы донёс