Я пытаюсь написать игру для DOS с помощью командной строки Windows. У меня здесь упрощенный исходный код:
#include <windows.h>
#include <stdio.h>
HANDLE hStdin;
VOID KeyEventProc(KEY_EVENT_RECORD);
int main(VOID) {
DWORD cNumRead, fdwMode, i;
INPUT_RECORD irInBuf[128];
hStdin = GetStdHandle(STD_INPUT_HANDLE);
while(true) {
ReadConsoleInput(hStdin, irInBuf, 128, &cNumRead);
for (i = 0; i < cNumRead; i++) {
switch(irInBuf[i].EventType) {
case KEY_EVENT:
KeyEventProc(irInBuf[i].Event.KeyEvent);
break;
default:
break;
}
}
}
return 0;
}
VOID KeyEventProc(KEY_EVENT_RECORD ker) {
if(ker.bKeyDown) {}
else printf("key released\n");
}
Проблема в том, что при нажатии нескольких кнопок в определенных комбинациях они больше не регистрируются!
Например, запустите эту программу и нажмите a, затем отпустите. Он скажет вам, что вы отпустили кнопку.
Теперь нажмите j, k и l. Когда вы отпустите любую из этих кнопок, она сообщит вам
СЕЙЧАС нажмите j, k, l и i. Когда вы отпустите меня, он больше не будет регистрировать, что кнопка была отпущена !!! o.0
ОДНАКО, если вы нажмете j, k, l и d, затем отпустите кнопку d, и вы узнаете. Так что, похоже, это не проблема «максимальных депрессивных состояний», поскольку она может обрабатывать все 4, когда вы нажимаете эти буквы.
Теперь, если вы нажмете j, k, l, i, а затем d и отпустите кнопку d, это не даст вам знать, что кнопка была отпущена. Похоже, что некоторые буквы портят.
Я очень растерялся, и я был бы очень признателен за любую помощь, которую кто-либо готов оказать.
Моя цель состоит в том, чтобы иметь возможность проверить любую комбинацию нажатий кнопок, даже если игрок нажимает все кнопки одновременно (переверните клавиатуру и одновременно нажмите все) Я хочу иметь возможность проверить это.
Если у кого-то есть лучший способ сделать это в Windows API, я открыт для предложений