如何使程序只使用getch或不同的功能注册一个按键?

时间:2013-11-26 21:26:13

标签: c++ for-loop while-loop getch

我想使用getch()或类似的东西来记录while()函数中的击键。

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

如果我按住某个键,该功能将持续显示该键一段时间。我将使用类似的代码来实现蠕虫游戏的移动。如果没有按下按键,蠕虫就会继续朝向它面向的方向(但我不需要帮助,我已经把它整理好了)。

我只需要知道如何在一段时间内只注册一次按键。使用代码块。

2 个答案:

答案 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),因此您可以轻松地以这种方式实现它。如您所见,每个密钥只会“注册”一次。

(适用于到目前为止我编写的所有游戏)