Как без останова получать код клавиши,key=getch();
Работает, но на нем происходит останов ((((((((
Ну в смысле, программа ждет пока клавишу не нажмешь,
А надо, чтобы без останова программы получить, код и обработать,
> Ну в смысле,
> А надо, чтобыТак бы сразу и написал!
Это не просто тетрис, это верх тетрисостроения ...)))
А нашел .....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;
}}
}
Следующий фрагмент является циклом, выход из которого осуществляется по нажатию клавиши:while(!kbhit ()); /* ожидание нажатия клавиши */
Вот еще нашел, но .... но пока никак .....
Можь кто подскажет ?, не пойму в чем дело,
Не работает, у меня TURBO C 3.2 ...
Не так не сяк, наверное поспать нужно, пошел СПАТЬ ....
Вот так вот вроде работает , нужно остальные клавиши проверить только ...А на сегодня спать, ....
#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;
}
Методом научного тыка, выяснил, что из табличных значений совпали только ESC, и SPACE ..(27 и 32)Остальные не совпали с табличными, придется самому получить эти коды ....
#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;
}
В интернете нашел несколько вариантов таблиц скан кодов, и прогнал по программе, не с одной не совпало на 100%, наверное потому что у меня DOS через эмулятор работает ...
А С++ то вещь оказывается, а в связке с asm чудеса творить может ))) ...
Пойду я учебник С++ читать, заинтересовало ...
Вот ещё что выдернул из 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;
}