hcnak.blog

posted at 2015-10-19 23:56:56 +0000

Windows下C++判断键盘上的方向键是否被按下

我在使用C++做一个贪吃蛇程序的时候,卡在了如何利用C++判断方向键这里。

我原本想的是:直接用getch()判断按下按键的ASCII码是否为方向键的。可是我在维基百科的ASCII页面上并没有找到 几个按键的ASCII码。在经过一番搜索后得到答案:http://bbs.csdn.net/topics/40312175 答案如下:

#define VK_LEFT 0x25 //=37
#define VK_UP             0x26  //=38
#define VK_RIGHT          0x27  //=39
#define VK_DOWN           0x28  //=40

然后我在我的程序里用switch语句 case了 37,38,39,40.然而却发现,在windows下,这样不可用。

按下相应按键后根本没有反应。

然后我想到了输出下getchar()得到的值,结果令我大吃一惊,输出值如下:

C++_dectect_dir

我们可以看到,每次按下方向键的时候,实际上是读入了2个数据,比如 224n75代表的是左方向键(←)。

所以有了以下这个方法:先判断第一个读入的数据,再用getchr()得到一次,这次再用switch语句判断。代码如下:

//by Kanch 
if(kbdown == 224) { 
//determine which action to perform 
kbdown = getch(); 

//due to up/down/left/right no ASCII code,it print out as 224n75 
switch (kbdown) { 
    case VK_LEFT: //← pressed 
      cout << "left pressed" << endl; 
      break; 
    case VK_UP: //↑ pressed 
      cout << "up pressed" << endl; 
      break; 
    case VK_RIGHT: //→ pressed 
      cout << "right pressed" << endl; 
      break; 
    case VK_DOWN: //↓ pressed 
      cout << "down pressed" << endl; 
      break; 
    default: 
      break; 
  } 
}

这样,我们便用C++实现了判断方向键是否被按下。

**<转载请注明出处>**



© kanchzl AT kanchz DOT com

last updated on 2022-07-27 01:57:54 +0000