URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10209
[ Назад ]

Исходное сообщение
"Получить код клавиши, в фоне ..."

Отправлено redd , 05-Апр-18 15:52 
Как без останова получать код клавиши,

key=getch();

Работает, но на нем происходит останов ((((((((


Содержание

Сообщения в этом обсуждении
"Получить код клавиши, в фоне ..."
Отправлено redd , 05-Апр-18 15:57 
Ну в смысле, программа ждет пока клавишу не нажмешь,
А надо, чтобы без останова программы получить, код и обработать,

"Ещё одна тнема про тетрис.  В той лимит исчерпался."
Отправлено Andrey Mitrofanov , 05-Апр-18 18:25 
> Ну в смысле,
> А надо, чтобы

Так бы сразу и написал!


"Ещё одна тнема про тетрис.  В той лимит исчерпался."
Отправлено redd , 05-Апр-18 19:00 
Это не просто тетрис, это верх тетрисостроения ...)))

"Получить код клавиши, в фоне ..."
Отправлено redd , 05-Апр-18 16:35 
А нашел .....

void input()
{

    if(_kbhit())
    {
        switch(_getch())
        {
            case 'a':
            dir = LEFT;
            break;
        case 'w':
            dir = UP;
            break;
        case 'd':
            dir = RIGHT;
            break;
        case 's':
            dir = DOWN;
            break;
        case 'x';
            gameover = true;    
        }

    }
}


"Получить код клавиши, в фоне ..."
Отправлено redd , 05-Апр-18 16:59 
Следующий фрагмент является циклом, выход из которого осуществляется по нажатию клавиши:

while(!kbhit ()); /* ожидание нажатия клавиши */

Вот еще нашел, но .... но пока никак .....

Можь кто подскажет ?, не пойму в чем дело,


"Получить код клавиши, в фоне ..."
Отправлено redd , 05-Апр-18 17:18 
Не работает, у меня TURBO C 3.2 ...


"Получить код клавиши, в фоне ..."
Отправлено redd , 05-Апр-18 17:20 
Не так не сяк, наверное поспать нужно, пошел СПАТЬ ....

"Получить код клавиши, в фоне ..."
Отправлено redd , 05-Апр-18 18:46 
Вот так вот вроде работает , нужно остальные клавиши проверить только ...

А на сегодня спать, ....

#include <stdio.h>
#include <conio.h>

#define ESC 27

int main(void)
{
    int cnt = 0;

    while (1) {

    if (kbhit() && getch() == ESC) {
        cputs("\r\nYou Hit Esc-Key!!\r\n");
        break;
    }

    printf("%d\r", ++cnt);
    }

    return 0;
}


"Получить код клавиши, в фоне ..."
Отправлено redd , 05-Апр-18 19:40 
Методом научного тыка, выяснил, что из табличных значений совпали только ESC, и SPACE ..(27 и 32)

Остальные не совпали с табличными, придется самому получить эти коды ....


"Получить код клавиши, в фоне ..."
Отправлено redd , 06-Апр-18 17:29 
#include <stdio.h>
#include <ctype.h>
#include <conio.h>

union CODE
{
    struct
    {
        unsigned char ascii;
        unsigned char scan;
    } c;
    unsigned int i;
};


int main()
{
    clrscr();
    CODE code;
    printf("Press key to get scan and ascii codes. Press ESC to exit\n\n");
    do
    {
        asm mov ah, 0x10
        asm int 0x16
        asm mov code.i, ax
        printf("scan code  : %x\nascii code : %x\n\n", code.c.scan, code.c.ascii);
    }
    while (code.c.ascii != 27);

    return 0;
}

"Получить код клавиши, в фоне ..."
Отправлено redd , 06-Апр-18 17:39 
В интернете нашел несколько вариантов таблиц скан кодов, и прогнал по программе, не с одной не совпало на 100%, наверное потому что у меня DOS через эмулятор работает ...

"Получить код клавиши, в фоне ..."
Отправлено redd , 06-Апр-18 17:42 
А С++ то вещь оказывается, а в связке с asm чудеса творить может ))) ...

"Получить код клавиши, в фоне ..."
Отправлено redd , 06-Апр-18 17:48 
Пойду я учебник С++ читать, заинтересовало ...

"Получить код клавиши, в фоне ..."
Отправлено redd , 06-Апр-18 18:09 
Вот ещё что выдернул из tetris ASCII for Linux ....

while ((cmd=getchar())>0) {
            switch (cmd) {
                case 'q':
                    t.x--;
                    if (tetris_hittest(&t))
                        t.x++;
                    break;
                case 'd':
                    t.x++;
                    if (tetris_hittest(&t))
                        t.x--;
                    break;
                case 's':
                    tetris_gravity(&t);
                    break;
                case ' ':
                    tetris_rotate(&t);
                    break;
            }