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

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


person Naushaad Abbas    schedule 30.10.2013    source источник


Ответы (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.

person The Seanson    schedule 15.01.2014

Я предполагаю, что вы находитесь в середине какой-то программы BASIC, и вы хотели бы «выйти», выйти из этого? Нажмите ENTER, чтобы перейти на ПУСТОЕ место, и введите system, снова нажмите ENTER, и вы вышли!

person Bugle24    schedule 19.01.2015

Для будущих искателей этот ответ предоставляет дополнительный контекст для информирования о разработке механизмов выхода из программ 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-код. Кажется, что подпрограммы-обработчики часто не очень строги в обработке escape-кода и просто отбрасывают его, поэтому Ctrl-ScrollLock в конечном итоге работает так же, как Ctrl-Break.

person Royce Williams    schedule 07.06.2017

Этот фрагмент кода завершает работу программы при нажатии функциональной клавиши в 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
person eoredson    schedule 09.06.2017