Как я могу получить ввод, не нажимая Enter, не видя ввода на экране? - PullRequest
0 голосов
/ 14 июля 2020

Я хочу создать простую игру, в которой объект перемещается по экрану с помощью «WASD». Проблема в том, что getchar работает без нажатия клавиши ввода, но не принимает ввод, не отображая его на экране. Как я могу это решить?

PS: Программа на C языке и на Linux терминале.

//my code:
while(1){
    input = getchar();
    if(input == 'a'){/*do something*/}
    if(input == 'd'){/*do something*/}
    //...
}

1 Ответ

1 голос
/ 14 июля 2020

Поскольку вы находитесь на Linux, вы можете использовать termios.h, здесь эмуляция старого getch (conio.h):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>

static struct termios term, oterm;

static int getch(void)
{
    int c = 0;

    tcgetattr(0, &oterm);
    memcpy(&term, &oterm, sizeof(term));
    term.c_lflag &= ~(ICANON | ECHO);
    term.c_cc[VMIN] = 1;
    term.c_cc[VTIME] = 0;
    tcsetattr(0, TCSANOW, &term);
    c = getchar();
    tcsetattr(0, TCSANOW, &oterm);
    return c;
}

int main(void)
{
    puts("Press Q to exit");
    while (1) {
        int c = getch();

        switch (c)
        {
            case 'A':
            case 'a':
                puts("A was pressed");
                break;
            case 'D':
            case 'd':
                puts("D was pressed");
                break;
            /* ...*/
            case 'Q':
            case 'q':
                exit(EXIT_SUCCESS);
            default:
                break;
        }
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...