Я учусь использовать комбинацию 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()
это своего рода избыточность, следовательно, снижает читабельность, какие-либо альтернативы?
(GetAsyncKeyState (VK_UP) & 1)
Других решений пока нет …