我想使用getch()或类似的东西来记录while()函数中的击键。
while()
{
.
.
.
if(kbhit()) k=getch();
else cout<<"no input";
cout<<k<<endl;
k=0;
Sleep(1200);
.
.
.
}
如果我按住某个键,该功能将持续显示该键一段时间。我将使用类似的代码来实现蠕虫游戏的移动。如果没有按下按键,蠕虫就会继续朝向它面向的方向(但我不需要帮助,我已经把它整理好了)。
我只需要知道如何在一段时间内只注册一次按键。使用代码块。
答案 0 :(得分: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 66
bool 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 :(得分:0)
我个人会使用这样的内容:
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),因此您可以轻松地以这种方式实现它。如您所见,每个密钥只会“注册”一次。
(适用于到目前为止我编写的所有游戏)