Как выйти из базовой программы gw в любое время?

Я создаю игру, и я хочу, чтобы, если пользователь нажал клавишу F10 или любую другую функциональную клавишу, программа должна завершиться.

4 ответа

Вроде плохо, что ты не ответил на это...

Хорошо, чтобы начать, вам нужно будет найти значение ASCII любого ключа, который вы хотели бы иметь для выхода.

Для этого либо создайте простую программу, чтобы понять это с помощью chr$,asc() и ввода. Или просто найдите его очень быстро.

То, что вы хотите сделать, это в вашей игровой зоне, где вы используете inkey$(что, я полагаю, так и есть, потому что в большинстве игр есть движение, а это почти необходимо), и просто проверяйте нажатие клавиши вместе с каждым другой ключ. Например:

Простая игра движения:

10 cls
20 K$=inkey$
30 if K$="a" then REM move left
40 if K$="d" then REM move right
50 if K$= EXITKEY then REM EXIT
60 goto 20

-Также извините, если это неправильный метод, но это должно работать... Я все еще немного заржавел на GW

Я предполагаю, что вы находитесь в центре какой-то программы BASIC, и вы хотели бы "выйти", выйти из этого? Нажмите ENTER чтобы добраться до пустого пространства и введите system, удар ENTER снова и вы вышли!

Для будущих поисковиков этот ответ предоставляет дополнительный контекст для информирования разработчиков механизмов выхода из программ BASIC.

Для некоторых упрощенно разработанных программ на языке BASIC единственным способом выхода является Control-C или Control-Break. Но некоторые эмуляторы (такие как DOSBox) не обрабатывают Control-C таким образом, который представляет его основной программе.

В некоторых системах вы можете нажать Ctrl-ScrollLock в качестве обходного пути:

У меня есть небольшая хитрость для тех, кто заинтересован: используйте Ctrl-ScrollLock, он ведет себя как Ctrl-Break со многими интерпретаторами BASIC, работающими в DOSBox. Он работает с GW-BASIC, BASICA (часто в комплекте с совместимыми DOS, такими как Compaq), QBasic, QuickBasic и, возможно, с другими "инструментальными средствами" разработки.

Причина, по которой это работает, немного сложна, поэтому продолжайте читать, только если вы заинтересованы в знании. DOSBox не имеет настоящей обработки Ctrl-Break, как настоящая DOS, которая представляет собой комбинацию аппаратных и программных прерываний и внутренних флагов. Однако обработчик DOS Ctrl-Break является только обработчиком по умолчанию, который начинается с INT 9, аппаратного прерывания клавиатуры. Многие из приложений для разработки программ перехватывают INT 9 и перехватывают ключи до того, как DOS их видит, поэтому они могут выполнять свою собственную обработку. В конце концов, поведение по умолчанию в DOS для Ctrl-Break заключается в прекращении работы приложения, а это часто не то, что нужно. Код обработчика INT 9 ищет нажатую клавишу Control, проверяя байт состояния сдвига в данных BIOS, а затем считывает коды сканирования из порта данных клавиатуры 60h. Скан-код для ScrollLock равен 46h, а скан-код для Ctrl-Break представляет собой 2-байтовую "экранированную" последовательность E0h 46h, где E0h - код перехода. Кажется, что процедуры обработчика часто не очень строги в обработке escape-кода, и просто отбрасывают его, поэтому Ctrl-ScrollLock работает так же, как Ctrl-Break.

Этот фрагмент кода выходит из программы при нажатии функциональной клавиши в Qbasic:

DO
    DO
        ' read keyboard
        X$ = INKEY$
        IF LEN(X$) THEN
            EXIT DO
        END IF
    LOOP
    IF LEN(X$) = 2 THEN
        x = ASC(RIGHT$(X$, 1))
        ' exit program on F1 to F10
        IF x >= 59 AND x <= 68 THEN
            END
        END IF
    END IF
LOOP
Другие вопросы по тегам