c语言如何调用方向键

case 27:exit(0);break;//结束游戏
case 38:move(a, -1, 0);break; //上移
case 37:move(a, 0, -1);break; //左移
case 40:move(a, 0, 1);break; //右移
case 39:move(a, 1 , 0);break; //下移
为什么27的ESC就能正常使用,而下面的上下左右方向键就不能使用

在C代码中可设置如下自编的intokey(  )函数,用以接收方向键值。库函数kbhit( )是检测是否有按键被按下,库函数getch(  )是读取键盘按键值的,不需按回车,也不回显。dir是代表方向的变量,根据不同的方向键值,让dir取1到4这四个不同的值。其它的程序段就可根据dir的值让东西朝某个方向移动。方向键按下后会产生2个值,第一个是224,另一个分别为上下左右的72、80、75、77,因此要读取2次值来判断。要包含#include<conio.h> .

void  intokey(  )

  { int  flag;

    if ( kbhit(  ) )    //判断有键按下时才执行下面的操作

     { flag = getch(  );    //用flag来获取键值

       if (flag==224)

         { flag = getch(  );  //值为224时表示按下了方向键,要再次获取才行

        if (flag==72 && dir != 2)  dir = 1; //方向键为“上”且原方向不为下时,让dir=1.

       if (flag==80 && dir != 1) dir = 2; //方向键为“下”且原方向不为上时,让dir=2.

        if (flag==75 && dir != 4)  dir = 3; //方向键为“左”且原方向不为右时,让dir=3.

        if (flag==77 && dir != 3)  dir = 4; //方向键为“右”且原方向不为左时,让dir=4.

        }

      if (flag==13)

         {  while( 1 )  if ( ( flag=getch( ) )==13 )  break ;  }

    }

}

注:这个函数来源于某些“贪吃蛇”的代码,略有修改,足可获取方向键值。其中的1、2、 3、4分别对应着上下左右。当flag获得键值后,分两种情况:一是flag=224,此时再次获取键值以判断输入的是4个方向中的哪一个;二是flag=13,表示按下回车键,我们就执行循环,程序暂停,等待再次输入回车,程序继续运行。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-15
1、调win32api函数SendMessage实现模拟按键
#include <windows.h>
SendMessage(hWnd,WM_KEYDOWN,键值,0);
其中hWnd是目标窗口的句柄
值是被宏定义过的,VK_ENTER回车,VK_ESC是ESC,VK_A是A键等
目标窗口句柄可以通过HWND hwnd=FindWindow("窗口名");获得

2、SendMessage
Windows API宏,在WinUser.h中根据是否已定义Unicode被定义为SendMessageW或SendMessageA,这两个函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而和函数PostMessage不同,PostMessage是将一个消息寄送到一个线程的后就立即返回。
该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而和函数PostMessage不同,PostMessage是将一个消息寄送到一个线程的消息队列后就立即返回。本回答被网友采纳
第2个回答  2020-02-24
在贪吃蛇中定义了intokey( )函数[你也可以改成别的],整个函数体中的代码就是获取键盘
的方向键值,倒数第2-5行是获取回车键值,用于起暂停作用。这里用direction表示方向,
程序中UP、DOWN、LEFT、RIGHT分别固定代表1、2、3、4这四个值。第三行判断获得
了向上的键值,第四行在direction不等于DOWN值(就是2)时执行else {direction = UP; }
第(5、6);(7、8);(9、10)等行的意思,与这第(3、4)行类似,只是取值不同。
要包含文件 #include<conio.h> 。
void intokey()
{
if (GetAsyncKeyState(VK_UP) && 0x8000)
{ if (direction == DOWN) { } else {direction = UP; } }
if (GetAsyncKeyState(VK_DOWN) && 0x8000)
{ if (direction == UP) { } else {direction = DOWN; } }
if (GetAsyncKeyState(VK_RIGHT) && 0x8000)
{ if (direction == LEFT) { } else {direction = RIGHT; } }
if (GetAsyncKeyState(VK_LEFT) && 0x8000)
{ if (direction == RIGHT) { } else {direction = LEFT; } }
if (GetAsyncKeyState(VK_RETURN) && 0x0D)
{ while (1)
{ if (GetAsyncKeyState(VK_RETURN) && 0x0D) { break; } }
}
}
第3个回答  推荐于2016-06-12
方向键,按1个键,有2个信号。数值与操作系统键盘设置有关。判断方向键需要2个键值。我的win-7 键值如下:
int key1,key2; key1 = getch(); key2 =getch();
上移 224,72 (0xe0,0x48)
左移 224,75 (0xe0,0x4b)
右移 224,77 (0xe0,0x4d)
下移 224,80 (0xe0,0x50)
ESC 是单信号,27 (0x1b)本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网