13.键盘交互

  • 学习人数 15K+
  • 适合有C语言基础人群学习
avatar
林耿亮

你好编程主讲老师

本节中,我们来讨论,如何用键盘控制窗体上的图形运动。

本节中的所有代码窗体大小均为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;
}

窗体中心圆形

现在,我们希望,通过键盘控制这个圆形的移动。

  1. 按下w键,向上移动50像素。
  2. 按下s键,向下移动50像素。
  3. 按下a键,向左移动50像素。
  4. 按下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;
}

运行后,发现按下一个键后,必须再按回车键,圆形才会移动。并且,连续按下多个键后再按回车键,圆形会连续运动多次。这是为什么呢?