4.不卡死控制台的输入检测

4.必备知识点-不卡死控制台的输入检测


4.1 知识点

知识回顾:不显示输入内容在控制台上,直接获取单键输入

  • 引用一个系统写好的程序文件

    #include <conio.h>
    
  • 其中有一个写好的方法 _getch()

    • 可以通过它获取到输入的字符
    • 无需按回车键,输入内容也不会显示在控制台上
  • 这种方法会等待玩家输入,输入完毕后才能继续执行后面的逻辑

/* int input = _getch();
cout << "后面的逻辑执行"; */
  • 存在的问题:如果卡死了,贪吃蛇动不了了

不卡死控制台的输入检测

  • #include <conio.h> 中还有一个系统写好的方法 _kbhit()

    • 返回值类型为 int
    • 当玩家有输入时返回 1,没有输入时返回 0
  • 可以将其和 _getch() 方法配合使用,达到不卡死控制台的效果

while (true)
{
    if (_kbhit())
    {
        int input = _getch();
        switch (input)
        {
            case 'W':
            case 'w':
                cout << 'W' << endl;
                break;
            case 'S':
            case 's':
                cout << 'S' << endl;
                break;
            case 'A':
            case 'a':
                cout << 'A' << endl;
                break;
            case 'D':
            case 'd':
                cout << 'D' << endl;
                break;
        }
    }
   
    cout << "执行逻辑" << endl;
}

4.2 知识点代码

必备知识点4_不卡死控制台的输入检测.cpp

#include <iostream>
using namespace std;
#include <conio.h>
int main()
{
    #pragma region 知识回顾 不显示输入内容在控制台上,直接获取单键输入
    //引用一个系统写好的程序文件
    //#include <conio.h>
    //其中有一个写好的方法 
    // _getch()
    //可以通过它获取到输入的字符,并且无需按回车键,输入内容也不会显示在控制台上

    //这种方法会等待玩家输入,输入完毕后才能继续执行后面的逻辑
   /* int input = _getch();
    cout << "后面的逻辑执行";*/

    //存在的问题 如果卡死了 贪吃蛇动不了了

    #pragma endregion

    #pragma region 知识点 不卡死控制台的输入检测

    //在#include <conio.h>
    //中还有一个系统写好的方法
    // _kbhit()
    //它的返回值是int
    //作用是当玩家有输入时才会返回1,没有输入时返回0
    //我们可以将其和_getch()方法配合使用
    //达到不卡死控制台的作用
    while (true)
    {
        if (_kbhit())
        {
            int input = _getch();
            switch (input)
            {
                case 'W':
                case 'w':
                    cout << 'W' << endl;
                    break;
                case 'S':
                case 's':
                    cout << 'S' << endl;
                    break;
                case 'A':
                case 'a':
                    cout << 'A' << endl;
                    break;
                case 'D':
                case 'd':
                    cout << 'D' << endl;
                    break;
            }
        }
       
        cout << "执行逻辑" << endl;
    }

    #pragma endregion

}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏