【说明】友友们好,今天来讲一下键盘消息函数。(其实这个本来准备和鼠标消息函数放在一起的,但是上一篇三个放在一起,内容就有点多了,只写一个又太单调了,所以键盘消息函数的内容就放在这一篇了 (^~^) )
一:键盘消息函数的介绍
键盘消息函数是非 EasyX 函数,用于获取键盘按键消息
二:键盘信息函数
用于获取鼠标消息的函数有两个:getch(),GetAsyncKeyState(键值)。
getch()——头文件 conio.h,需要使用返回值来判断
与非 ASCII 表字符的按键比较 | 需要使用虚拟键值: 上—72;下—80;左—75;右—77 |
与字母比较 | 直接写字母,比如 'A' |
GetAsyncKeyState(键值)——需要传入一个键值,如果按下返回真,
上 | VK_UP |
下 | VK_DOWN |
左 | VK_LEFT |
右 | VK_RIGHT |
三:代码1
#include <graphics.h>
#include <stdio.h>
#include <conio.h>//使用_getch()
int main()
{
initgraph(400, 300);
setbkcolor(WHITE);
cleardevice();
//键盘消息
int x = 0, y = 0;
while (1)
{
setfillcolor(RED);//做一个填充圆,下面通过键盘消息让它移动
//setlinecolor(BLACK);
fillcircle(x, y, 20);
char ch = _getch();
printf("%d,%c\n", ch, ch);
switch (ch)
{
case 72://第22行代码和第23/24行代码缺少其中一个,圆是不会移动的
case 'w'://字母默认的w表示上键…当然,随你喜欢了
//case 'W':
y-=2;
printf("上键\n");
break;
case 80:
case 's':
//case 'S':
y+=2;
printf("下键\n");
break;
case 75:
case 'a':
//case 'A':
x-=2;
printf("左键\n");
break;
case 77:
case 'd':
//case 'D':
x+=2;
printf("右键\n");
break;
}
}
closegraph();
return 0;
}
左图就是上面代码运行出的,变化程度为5 右图是加上linecolor后变化程度为1的结果
不加linecolor,且变化程度为1,是没有痕迹的。很奇怪
注意,要使这个圆运动,需要打开你的控制台。
我发现了一个好奇怪的点,就是当我x,y 变化程度为1时(也就是 x++,x--,y++,y--),没有上面这个图中圆的移动痕迹 (・ω・),但是当我设置上线条颜色后就有了,这……,先不管了,如果想要消除这个痕迹,用 cleardevice()即可,注意放在循环中。
上面的圆球是只能上下左右移动的,不能斜着移动,当换成 GetAsyncKeyState 就可以了,但是我这里的运行结果出现了问题,就暂时不想写了ヾ(T(エ)Tヽ),如果友友想试一下,可以仿照下面的。
if (GetAsyncKeyState(VK_UP))//上键
{
y -=5;
}
if (GetAsyncKeyState(VK_DOWN))//下键
{
y +=5;
}
if (GetAsyncKeyState(VK_LEFT))//左键
{
x -=5;
}
if (GetAsyncKeyState(VK_RIGHT))//右键
{
x +=5;
}