У меня есть следующий код, который работает нормально.
int x = 0;
int main()
{
while(true) {
if (GetKeyState('A') & 0x8000 && x == 0) {
Sleep(500);
x = 1;
}
else if (GetKeyState('B') & 0x8000 && x == 1) {
Sleep(500);
x = 2;
}
else if (GetKeyState('C') & 0x8000 && x == 2) {
Sleep(500);
x = 0;
//Do Something
}
}
}
Для того, чтобы выполнить //Do Something
часть кода, пользователь должен сначала нажать A
, затем B
а потом C
в этой последовательности. Однако пользователь может нажать любую клавишу между ними, и она все равно будет работать. Так в дополнение кA
+B
+C
«следующее также будет работать.
A
+C
+B
+C
A
+Q
+B
+C
A
+F11
+B
+8
+LSHIFT
+Spacebar
+Tab
+C
Я хочу только A
+B
+C
сочетание для работы. Ни один из вышеперечисленных.
Код, который я пытаюсь реализовать, выглядит примерно так
int x = 0;
int main()
{
while(true) {
if (GetKeyState('A') & 0x8000 && x == 0) {
Sleep(500);
x = 1;
}
else if (GetKeyState('B') & 0x8000 && x == 1) {
Sleep(500);
x = 2;
}
else if (GetKeyState(/*Any keyboard input other than 'B' or 'A'*/) & 0x8000 && x == 1) {
Sleep(500);
x = 0;
}
else if (GetKeyState('C') & 0x8000 && x == 2) {
Sleep(500);
x = 0;
//Do Something
}
else if (GetKeyState(/*Any keyboard input other than 'C' or 'B'*/) & 0x8000 && x == 2) {
Sleep(500);
x = 0;
}
}
}
Итак, вы видите, я понимаю логику требуется. Я просто не знаю правильный код, необходимый для замены закомментированной части моего кода. Обратите внимание, что причина, по которой я ввел две клавиши в комментариях, заключается в том, что пользователь может случайно нажать клавишу дважды или трижды, для чего ему / ей нужно извиниться, а код должен работать.
Я думаю, что изо всех сил старался сделать этот вопрос максимально понятным. Если не можете предложить изменения.
В Windows для простоты вы можете использовать _kbhit () если нет конкретной причины, которую вы хотите использовать GetKeyState
#include <iostream>
#include <conio.h>
int main()
{
int x = 0;
while (true)
{
if (!_kbhit())
continue;
switch (_getch())
{
case 'A':
x == 0 ? ++x : x = 0;
break;
case 'B':
x == 1 ? ++x : x = 0;
break;
case 'C':
x == 2 ? ++x : x = 0;
break;
default:
x = 0;
}
if (x == 0)
std::cout << "Oops!" << std::endl;
else if (x == 3)
{
std::cout << "Bingo!" << std::endl;
break;
}
}
}
Других решений пока нет …