Как получить прямой ввод с клавиатуры в C ++? - PullRequest
5 голосов
/ 17 февраля 2012

В настоящее время я пишу игру на C ++ для Windows.Пока все идет отлично, но мое меню выглядит так:

1. Перейти на север

2. Перейти на юг

3. Перейти на восток

4.Go North

5.Инвентарь

6.Выход

Выбор вставки -

Работает нормально, но я использую такие вещина какое-то время, и, скорее, вы можете перемещаться с помощью стрелок вверх и вниз.Как мне поступить так?

С уважением

Ответы [ 3 ]

4 голосов
/ 17 февраля 2012

Рассматривали ли вы использование библиотеки пользовательского интерфейса консоли, например ncurses ?

2 голосов
/ 17 февраля 2012

В Windows вы можете использовать общую функцию kbhit(). Эта функция возвращает истину / ложь в зависимости от того, есть ли нажатие клавиатуры или нет. Затем вы можете использовать функцию getch(), чтобы прочитать, что присутствует в буфере.

while(!kbhit()); // wait for input
c=getch();       // read input

Вы также можете посмотреть коды сканирования. conio.h содержит необходимые подписи.

0 голосов
/ 16 июля 2017

Вы можете использовать GetAsyncKeyState . Позволяет получать прямой ввод с клавиатуры через стрелки, функциональные кнопки (F0, F1 и т. Д.) И другие кнопки.

Вот пример реализации:

// Needed for these functions
#define _WIN32_WINNT 0x0500
#include "windows.h"
#include "winuser.h"
#include "wincon.h"

int getkey() {

    while(true) {
        // This checks if the window is focused
        if(GetForegroundWindow() != GetConsoleWindow())
            continue;

        for (int i = 1; i < 255; ++i) {
            // The bitwise and selects the function behavior (look at doc)
            if(GetAsyncKeyState(i) & 0x07)
                return i;

        }

        Sleep(250);
    }
}
...