本节中,我们来讨论,如何用键盘控制窗体上的图形运动。
本节中的所有代码窗体大小均为800 * 600。坐标系原点在窗体中心,X轴正方向向右,Y轴正方向向上。
1. 键盘控制圆形移动
首先,我们在窗体中绘制一个圆形。
#include <easyx.h>
#include <stdio.h>
int main()
{
initgraph(800, 600);
// 坐标系原点在窗体中心,X轴正方向向右,Y轴正方向向上
setorigin(400, 300);
setaspectratio(1, -1);
// 设置背景色
setbkcolor(RGB(164, 225, 202));
// 使用背景色清空窗体
cleardevice();
// 设置填充颜色为白色WHITE
setfillcolor(WHITE);
// 在(0, 0)的位置绘制一个半径为50的填充圆
solidcircle(0, 0, 50);
getchar();
closegraph();
return 0;
}
现在,我们希望,通过键盘控制这个圆形的移动。
- 按下
w
键,向上移动50像素。 - 按下
s
键,向下移动50像素。 - 按下
a
键,向左移动50像素。 - 按下
d
键,向右移动50像素。
对于输入一个字符,很快就能想到可以使用getchar
函数。使用getchar
函数获取键盘输入的字符,接收到字符后,根据不同的字符对圆形的位置做不同的修改。即可实现使用键盘输入控制圆形位置的功能。
#include <easyx.h>
#include <stdio.h>
int main()
{
initgraph(800, 600);
// 坐标系原点在窗体中心,X轴正方向向右,Y轴正方向向上
setorigin(400, 300);
setaspectratio(1, -1);
// 设置背景色
setbkcolor(RGB(164, 225, 202));
// 使用背景色清空窗体
cleardevice();
// 设置填充颜色为白色WHITE
setfillcolor(WHITE);
// 圆心x坐标,圆形y坐标
int x = 0, y = 0;
// 在(x, y)的位置绘制一个半径为50的填充圆
solidcircle(x, y, 50);
while (1)
{
char c = getchar();
switch (c)
{
case 'w':
// 向上移动50像素
y = y + 50;
break;
case 's':
// 向下移动50像素
y = y - 50;
break;
case 'a':
// 向左移动50像素
x = x - 50;
break;
case 'd':
// 向右移动50像素
x = x + 50;
break;
}
// 清空并重新绘制
cleardevice();
solidcircle(x, y, 50);
}
getchar();
closegraph();
return 0;
}
运行后,发现按下一个键后,必须再按回车键,圆形才会移动。并且,连续按下多个键后再按回车键,圆形会连续运动多次。这是为什么呢?