Как сделать так, чтобы программа регистрировала только одно нажатие клавиши с помощью функции getch или другой функции?

Я хочу использовать getch () или что-то подобное, чтобы зарегистрировать нажатие клавиши в функции while ().

    while()
{
.
.
.
if(kbhit()) k=getch();
else cout<<"no input";
cout<<k<<endl;
k=0;
Sleep(1200);
.
.
.
}

Если я удерживаю клавишу, функция будет отображать ее некоторое время. Я буду использовать подобный код для реализации движения для игры-червя. Если клавиша не будет нажата, червь будет продолжать двигаться в том направлении, в котором он стоит (но мне не нужна помощь с этим, я уже разобрался с ним).

Мне просто нужно знать, как мне зарегистрировать всего 1 нажатие клавиши на некоторое время. Использование кодовых блоков.

1

Решение

Просто. Как это!!!.

#include <iostream>
#include <windows.h>

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std;#define KB_UP 72
#define KB_DOWN 80
#define KB_LEFT 75
#define KB_RIGHT 77
#define KB_ESCAPE 27
#define KB_F8 66bool QuitGame=false;

char KB_code;

void simple_keyboard_input();int main(void)
{while(!QuitGame)
{
/* simple keyboard input */
simple_keyboard_input();}return 0;
}void simple_keyboard_input()
{
if (kbhit())
{
KB_code = getch();switch (KB_code)
{

case KB_ESCAPE:

QuitGame=true;

break;}

}

}
1

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

Лично я бы использовал что-то вроде этого:

int support_code = 0;      //global variable

void input()
{
if (GetKeyState('W') & 0x8000)
{  int helpful_button = "1";    // unique number for every button!
if (helpful_button != support_code)
{  support_code = helpful_button;
// do something
}
}
else if (...)
...
// End of "key registering" "if's"}

// And then somewhere else in your code you can "reset" 'support_code' for it to be 0
// (so you can use the same button again)
// But if you don't want a worm to be able to change direction from "UP" to "UP"// Then you don't even have to implement "support_code = 0" part from it

int main()
{
...
while (!gameover)
{
input();
calculate();
draw();
...
support_code = 0;
}
...
}

Для «червячной игры» вам, вероятно, не понадобится много нажатий клавиш (я думаю, <10) так что вы можете легко реализовать это таким образом. И, как вы можете видеть, он будет «регистрировать» каждый ключ только один раз.

(Работал для всех игр, которые я до сих пор кодировал)

0

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