Возникли проблемы с обнаружением нажатия клавиш в C ++ - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь сделать простую игру на с ++, и для этого мне нужно обнаружить нажатие клавиш (особенно интересует вверх, вниз, влево и вправо). Чтобы добиться этого, я сделал следующее:

#include <iostream>
#include <conio.h>
using string = std::string;

const int K_UP = 72;
const int K_DOWN = 80;
const int K_LEFT = 75;
const int K_RIGHT = 77;

string get_pressed()
{
    if (K_UP == _getch());
    {
        return "UP";
    }
    if (K_DOWN == _getch());
    {
        return "DOWN";
    }
    if (K_RIGHT == _getch());
    {
        return "RIGTH";
    }
    return "LEFT";

}

int main()
{
    cout << "MOVING" << get_pressed() << endl;
}

Однако, что бы я ни нажимал, вывод «MOVING UP». Кроме того, когда я читал о том, «как определять нажатия клавиш», я читал, что 72 - это число, заданное windows для клавиши вверх, но когда я пытаюсь напечатать _getch() и нажать клавишу вверх, это дает мне 244, и он делает то же самое для правой, левой и нижней сторон. Я не понимаю, что здесь происходит, и любая помощь будет оценена. Спасибо

1 Ответ

1 голос
/ 16 марта 2020

Вы (вероятно) путаете коды клавиш с кодами ascii. Методы c / c ++ в основном поддерживают только коды ascii для ключей, тогда как документация, которую вы читаете, относится к необработанным кодам ключей.

Существуют API, которые могут считывать необработанные коды клавиш, например, на Windows, и вам, возможно, все равно придется прибегнуть к ним, в противном случае вы можете обнаружить, что страдаете от buffered-io, когда клавиши вообще не читаются, пока не нажата новая строка.

In unix или эмуляторы терминала, стрелка и ключи редактирования сгенерируют (возможно) escape-последовательность, последовательность кодов ascii, начинающуюся с кода 31, для escape. Предполагается, что библиотека termcap поможет вам их расшифровать.

...