Сброс GetAsyncKeyState () по умолчанию

Я учусь использовать комбинацию kbhit(), GetAsyncKeyState() а также getch() построить мою консольную игру.

Я использую Visual Studio 2010 Express, заголовки c / c ++ мне подходят.

Проблемы с совместимостью (работают только на платформе Windows) для меня не имеют значения.

Взгляните на этот простой код:

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

int main()
{
printf("Welcome\n");
while(true)
{
if(_kbhit())
{
if(GetAsyncKeyState(VK_UP))
printf("UP\n");
else if(GetAsyncKeyState(VK_DOWN))
printf("DOWN\n");
else if(GetAsyncKeyState(VK_LEFT))
printf("LEFT\n");
else if(GetAsyncKeyState(VK_RIGHT))
printf("RIGHT\n");
else
printf("NOT ARROW\n");
getch();
}
}
return 0;
}

Проблема в том, что любой виртуальный ключ будет печатать ДВАЖДЫ в то время как другие бегут хорошо.

Я не знаю, в чем проблема, но я нашел решение этой проблемы.

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

int main()
{
printf("Welcome\n");
while(1)
{
if(_kbhit())
{
if(GetAsyncKeyState(VK_UP))
{
printf("UP\n");
_getch();
}
else if(GetAsyncKeyState(VK_DOWN))
{
printf("DOWN\n");
_getch();
}
else if(GetAsyncKeyState(VK_LEFT))
{
printf("LEFT\n");
_getch();
}
else if(GetAsyncKeyState(VK_RIGHT))
{
printf("RIGHT\n");
_getch();
}
else
{
printf("NOT ARROW\n");
}
_getch();
}
}
return 0;
}

Мое предположение GetAsyncKeyState() неправильно очищено до значения по умолчанию

Любое объяснение?

Также добавляем _getch() для каждого kbhit() а также GetAsyncKeyState() это своего рода избыточность, следовательно, снижает читабельность, какие-либо альтернативы?

-1

Решение

(GetAsyncKeyState (VK_UP) & 1)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]