windy_0311 2024-08-25 13:29 采纳率: 100%
浏览 12
已结题

怎么才能让一个键不输入,而直接感应并返回?

最近在整自制游戏,然后发现每次选选项都要输入,想做一个不要显示出来的输入,就像一些游戏里面直接按下某某键,弹出某某画面的样子。(比如mc按下e键,出现工作台,按下esc键,出现菜单?)
下面是游戏代码:

#include<bits/stdc++.h>
#include<Windows.h>
using namespace std;
struct aka{//玩家信息 
    int iq;//智商 
    int eq;//情商
    int xb;//性别 
    int wj=80;//死亡距离 
    int yq; 
    string name; 
}a; 
char ZZ;
void G_B(){//忘记是用来干嘛的了,好像也是颜色 
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cursor_info = {1,0};
SetConsoleCursorInfo(hOut,&cursor_info); 
}
int sj(int n,int m){//产生n~m间的随机数(包括m和n)
    srand((unsigned) time(NULL));
    int rand_num=rand();
    int range=m-n+1;
    int result=n+rand_num % range;
    return result;
}
void SetFont(int size=30){//颜色真是好文明(没用过) 
    CONSOLE_FONT_INFOEX cfi;
    cfi.cbSize=sizeof cfi;
    cfi.nFont=0;
    cfi.dwFontSize.X=0;
    cfi.dwFontSize.Y=size;
    cfi.FontFamily=FF_DONTCARE;
    cfi.FontWeight=FW_NORMAL;
    SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE),FALSE,&cfi);
} 
void S_CLS(){//清空当前屏幕 
    system("cls");
}
void S_SLEEP(int SUMBER_F_ONE){//等待 0.083为一帧,0.038好用! 
    Sleep(SUMBER_F_ONE);
}
string wa="";

void one_second1(){
    wa="你:艹你妈的,老子不干了!图图图,图你大爷的!";
    for(int i=0;i<wa.size();i++){
        _sleep(0.038*1000);
        cout<<wa[i];
    }
    cout<<endl;
    wa="你:";
}
void one_first(){
    _sleep(0.5*1000);
    S_CLS();
    _sleep(0.5*1000); 
    wa="你:啊,老板,您要哪个图,矢量图还是标量图!那什么老板您别着急!让我...";
    for(int i=0;i<wa.size();i++){
        _sleep(0.03*1000);
        cout<<wa[i];
    } 
    cout<<endl;
    wa="老板:我说!我的图!我的图在哪!";
    for(int i=0;i<wa.size();i++){
        _sleep(0.03*1000);
        cout<<wa[i];
    } 
    cout<<endl;
    wa="(听上去有点瘆人呢,老板桑的声音听上去像电视里面的大丧尸一样,没有理智了呢!)" ;
    for(int i=0;i<wa.size();i++){
        _sleep(0.03*1000);
        cout<<wa[i];
    } 
    cout<<endl;
}
void one(){
    wa="这已经是你加班的第23天了......";
    for(int i=0;i<wa.size();i++){
        _sleep(0.038*1000);
        cout<<wa[i];
    }
    cout<<endl<<endl;_sleep(0.38*1000);
    wa="你:MD这个傻逼老板!特码的加班不给加班费!生产队的驴都比我休息得多吧!";
    for(int i=0;i<wa.size();i++){
        _sleep(0.038*1000);
        cout<<wa[i];
    } 
    cout<<endl;
    _sleep(0.38*1000);
    wa="(电话响了,你骂骂咧咧地接起了电话)";
    for(int i=0;i<wa.size();i++){
        _sleep(0.038*1000);
        cout<<wa[i];
    }
    cout<<endl; 
    _sleep(0.38*1000);
    wa="电话对面:图!我的图呢!我的图呢!";
    for(int i=0;i<wa.size();i++){
        _sleep(0.038*1000);
        cout<<wa[i];
    }
    cout<<endl;
    _sleep(0.1*1000);
    wa="(你看了一眼,是老板的来电)";
    for(int i=0;i<wa.size();i++){
        _sleep(0.038*1000);
        cout<<wa[i];
    }
    cout<<endl;
    _sleep(0.083*1000);
    wa="老板:我的图呢!我的图在哪!我的图……";
    for(int i=0;i<wa.size();i++){
        _sleep(0.038*1000);
        cout<<wa[i];
    }
    _sleep(0.083*1000);
    cout<<endl<<"此时你会选择回答:"; 
    _sleep(0.083*1000);
    cout<<endl;
    cout<<"[A]为了不扣工资,勤勤恳恳  [B]脾气火爆,老子不干了  [C]什么都不说";
    
    cout<<endl;
    cin>>ZZ;
    _sleep(0.1*1000);
    if(ZZ=='A'||ZZ=='a'){
        _sleep(0.1*1000);
        one_first(); 
    } else if(ZZ=='B'||ZZ=='b'){
        if(a.yq>=90){
            a.wj-=3;
            one_second1();
        }else if(a.yq>=60){
            a.wj-=5;
            one_second1();
        }else if(a.yq>=15){
            a.wj-=10;
        }else {
            a.wj-=15;
        }
        _sleep(0.1*1000);
    }else{
        
    }
}
int main(){
    a.yq=sj(1,100);
    //加载环节 
    _sleep(1*1000);
    cout<<endl<<"正";_sleep(0.2*1000);cout<<"在";_sleep(0.23*1000);cout<<"加";_sleep(0.15*1000);
    cout<<"载";_sleep(0.2*1000);cout<<"中...";_sleep(5*1000);cout<<endl<<endl;
    S_CLS();
    system("mode con cols=70 lines=30");
    cout<<"检测到玩家登入,即将弹出《用户协议》3s";
    _sleep(1*1000);
    S_CLS();
    cout<<"检测到玩家登入,即将弹出《用户协议》2s";
    _sleep(1*1000);
    S_CLS();
    cout<<"检测到玩家登入,即将弹出《用户协议》1s";
    _sleep(1*1000);
    S_CLS();
     
          cout<<"               《用户协议》" ;
    cout<<endl<<"    因游戏运行中容易有玩家恶意卡bug,导致游戏不能顺利运行,所以游戏推出以下几项协议";
    cout<<endl<<"1.请玩家做选择时,规规矩矩地输入选项序号,否则极有可能没有存档就直接退出游戏,后果 ";
    cout<<endl<<"  自负!请不要直接尝试!";  
    cout<<endl<<"2.知识产权,未经允许,不可随意转载!";
    cout<<endl<<"3.游戏不行请不要喷,转载要标明原出处,作者玻璃心,会骂人的。";
    cout<<endl<<endl<<"    同意[Y]  不同意[N]";
    if(A=='N'){
        return 0;
    } else{
        S_CLS();
        cout<<"用户同意,开始跳转游戏界面!"; 
        G_B();
        srand(time(NULL));
        int NUMber_ONE_FIRST = rand()%50+1;
        int i;
        for(i=1;i<=NUMber_ONE_FIRST;i++){
        cout<<"正在下载新资源……"<<i<<"%";
        S_SLEEP(0.1);
        S_CLS();
        }
        int NUMber_TWO_SECOND = rand()%20+i+1;
        for(;i<=NUMber_TWO_SECOND;i++){
        cout<<"正在下载新资源……"<<i<<"%";
        S_SLEEP(3);
        S_CLS();
        }
        int NUMber_THREE_THIRD = rand()%25+i+1;
        for(;i<=NUMber_THREE_THIRD;i++){
        cout<<"正在下载新资源……"<<i<<"%";
        S_SLEEP(8);
        S_CLS();
        }
        i++;
        for(;i<=99;i++){
        cout<<"正在下载新资源……"<<i<<"%";
        S_SLEEP(20);
        S_CLS();
        }
        cout<<"正在下载新资源……"<<99<<"%";
        S_SLEEP(50);
        S_CLS();
        cout<<"正在下载新资源……"<<100<<"%";
        S_SLEEP(1000);
        S_CLS();
        cout<<"加载成功!!!";
        S_SLEEP(2000);
        S_CLS();
    }
     
    //玩家信息载入
    wa="请输入玩家名(暂时不支持中文系统):";
    for(int i=0;i<wa.size();i++){
        _sleep(0.038*1000);
        cout<<wa[i];
    }
    cin>>a.name;
    S_CLS();
    cout<<"欢迎!玩家 "<<a.name<<" 进入游戏!" ;
    _sleep(1*1000);
    _sleep(0.75*1000);
    S_CLS();
    _sleep(3*1000);
    cout<<endl<<endl;
    cout<<"时间:午夜      运气:"<<a.yq;
    cout<<endl<<endl; 
    one();//正式进入主线!
    /* 
    S_CLS();
    cout<<"游戏结束,你的人生还在继续!祝您生活愉快!"<<endl<<endl<<endl; 
    _sleep(3*1000);
    */
    return 0;
}

发现全程都需要输入,无法感应,查了一个https://blog.csdn.net/m0_62645280/article/details/120802768?ops_request_misc=&request_id=&biz_id=102&utm_term=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-120802768.142^v100^pc_search_result_base4&spm=1018.2226.3001.4187#define%20dn()%20((GetAsyncKeyStat&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-120802768.142^v100^pc_search_result_base4,但是完全不会用,感觉和我想要的效果不一样(想要注释),希望有人指点一下(可判断的)

  • 写回答

3条回答 默认 最新

  • jiayuqicz 2024-08-25 18:45
    关注

    以下代码在win 11和visual studio 2022上测试通过。
    只需要增加头文件conio.h,然后使用_getch()读取字符即可。
    该函数不仅不会显示输入的字符,而且不需要回车结束,就能完成键盘读取。
    .

    #include <stdio.h>
    #include <Windows.h>
    #include <conio.h>
    
    #include <iostream>
    
    using namespace std;
    
    struct aka {//玩家信息 
        int iq;//智商 
        int eq;//情商
        int xb;//性别 
        int wj = 80;//死亡距离 
        int yq;
        string name;
    }a;
    
    char ZZ;
    
    void G_B() {//忘记是用来干嘛的了,好像也是颜色 
        HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_CURSOR_INFO cursor_info = { 1,0 };
        SetConsoleCursorInfo(hOut, &cursor_info);
    }
    int sj(int n, int m) {//产生n~m间的随机数(包括m和n)
        srand((unsigned)time(NULL));
        int rand_num = rand();
        int range = m - n + 1;
        int result = n + rand_num % range;
        return result;
    }
    void SetFont(int size = 30) {//颜色真是好文明(没用过) 
        CONSOLE_FONT_INFOEX cfi;
        cfi.cbSize = sizeof cfi;
        cfi.nFont = 0;
        cfi.dwFontSize.X = 0;
        cfi.dwFontSize.Y = size;
        cfi.FontFamily = FF_DONTCARE;
        cfi.FontWeight = FW_NORMAL;
        SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
    }
    void S_CLS() {//清空当前屏幕 
        system("cls");
    }
    void SSleep(int SUMBER_F_ONE) {//等待 0.083为一帧,0.038好用! 
        Sleep(SUMBER_F_ONE);
    }
    string wa = "";
    
    void one_second1() {
        wa = "你:艹你妈的,老子不干了!图图图,图你大爷的!";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.038 * 1000);
            cout << wa[i];
        }
        cout << endl;
        wa = "你:";
    }
    void one_first() {
        Sleep(0.5 * 1000);
        S_CLS();
        Sleep(0.5 * 1000);
        wa = "你:啊,老板,您要哪个图,矢量图还是标量图!那什么老板您别着急!让我...";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.03 * 1000);
            cout << wa[i];
        }
        cout << endl;
        wa = "老板:我说!我的图!我的图在哪!";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.03 * 1000);
            cout << wa[i];
        }
        cout << endl;
        wa = "(听上去有点瘆人呢,老板桑的声音听上去像电视里面的大丧尸一样,没有理智了呢!)";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.03 * 1000);
            cout << wa[i];
        }
        cout << endl;
    }
    void one() {
        wa = "这已经是你加班的第23天了......";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.038 * 1000);
            cout << wa[i];
        }
        cout << endl << endl; Sleep(0.38 * 1000);
        wa = "你:MD这个傻逼老板!特码的加班不给加班费!生产队的驴都比我休息得多吧!";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.038 * 1000);
            cout << wa[i];
        }
        cout << endl;
        Sleep(0.38 * 1000);
        wa = "(电话响了,你骂骂咧咧地接起了电话)";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.038 * 1000);
            cout << wa[i];
        }
        cout << endl;
        Sleep(0.38 * 1000);
        wa = "电话对面:图!我的图呢!我的图呢!";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.038 * 1000);
            cout << wa[i];
        }
        cout << endl;
        Sleep(0.1 * 1000);
        wa = "(你看了一眼,是老板的来电)";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.038 * 1000);
            cout << wa[i];
        }
        cout << endl;
        Sleep(0.083 * 1000);
        wa = "老板:我的图呢!我的图在哪!我的图……";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.038 * 1000);
            cout << wa[i];
        }
        Sleep(0.083 * 1000);
        cout << endl << "此时你会选择回答:";
        Sleep(0.083 * 1000);
        cout << endl;
        cout << "[A]为了不扣工资,勤勤恳恳  [B]脾气火爆,老子不干了  [C]什么都不说";
    
        cout << endl;
        ZZ = _getch();
        Sleep(0.1 * 1000);
        if (ZZ == 'A' || ZZ == 'a') {
            Sleep(0.1 * 1000);
            one_first();
        }
        else if (ZZ == 'B' || ZZ == 'b') {
            if (a.yq >= 90) {
                a.wj -= 3;
                one_second1();
            }
            else if (a.yq >= 60) {
                a.wj -= 5;
                one_second1();
            }
            else if (a.yq >= 15) {
                a.wj -= 10;
            }
            else {
                a.wj -= 15;
            }
            Sleep(0.1 * 1000);
        }
        else {
    
        }
    }
    int main() {
        a.yq = sj(1, 100);
        //加载环节 
        Sleep(1 * 1000);
        cout << endl << "正"; Sleep(0.2 * 1000); cout << "在"; Sleep(0.23 * 1000); cout << "加"; Sleep(0.15 * 1000);
        cout << "载"; Sleep(0.2 * 1000); cout << "中..."; Sleep(5 * 1000); cout << endl << endl;
        S_CLS();
        system("mode con cols=70 lines=30");
        cout << "检测到玩家登入,即将弹出《用户协议》3s";
        Sleep(1 * 1000);
        S_CLS();
        cout << "检测到玩家登入,即将弹出《用户协议》2s";
        Sleep(1 * 1000);
        S_CLS();
        cout << "检测到玩家登入,即将弹出《用户协议》1s";
        Sleep(1 * 1000);
        S_CLS();
    
        cout << "               《用户协议》";
        cout << endl << "    因游戏运行中容易有玩家恶意卡bug,导致游戏不能顺利运行,所以游戏推出以下几项协议";
        cout << endl << "1.请玩家做选择时,规规矩矩地输入选项序号,否则极有可能没有存档就直接退出游戏,后果 ";
        cout << endl << "  自负!请不要直接尝试!";
        cout << endl << "2.知识产权,未经允许,不可随意转载!";
        cout << endl << "3.游戏不行请不要喷,转载要标明原出处,作者玻璃心,会骂人的。";
        cout << endl << endl << "    同意[Y]  不同意[N]";
        ZZ = _getch();
        if (ZZ == 'N') {
            return 0;
        }
        else {
            S_CLS();
            cout << "用户同意,开始跳转游戏界面!";
            G_B();
            srand(time(NULL));
            int NUMber_ONE_FIRST = rand() % 50 + 1;
            int i;
            for (i = 1; i <= NUMber_ONE_FIRST; i++) {
                cout << "正在下载新资源……" << i << "%";
                SSleep(0.1);
                S_CLS();
            }
            int NUMber_TWO_SECOND = rand() % 20 + i + 1;
            for (; i <= NUMber_TWO_SECOND; i++) {
                cout << "正在下载新资源……" << i << "%";
                SSleep(3);
                S_CLS();
            }
            int NUMber_THREE_THIRD = rand() % 25 + i + 1;
            for (; i <= NUMber_THREE_THIRD; i++) {
                cout << "正在下载新资源……" << i << "%";
                SSleep(8);
                S_CLS();
            }
            i++;
            for (; i <= 99; i++) {
                cout << "正在下载新资源……" << i << "%";
                SSleep(20);
                S_CLS();
            }
            cout << "正在下载新资源……" << 99 << "%";
            SSleep(50);
            S_CLS();
            cout << "正在下载新资源……" << 100 << "%";
            SSleep(1000);
            S_CLS();
            cout << "加载成功!!!";
            SSleep(2000);
            S_CLS();
        }
    
        //玩家信息载入
        wa = "请输入玩家名(暂时不支持中文系统):";
        for (int i = 0; i < wa.size(); i++) {
            Sleep(0.038 * 1000);
            cout << wa[i];
        }
        cin >> a.name;
        S_CLS();
        cout << "欢迎!玩家 " << a.name << " 进入游戏!";
        Sleep(1 * 1000);
        Sleep(0.75 * 1000);
        S_CLS();
        Sleep(3 * 1000);
        cout << endl << endl;
        cout << "时间:午夜      运气:" << a.yq;
        cout << endl << endl;
        one();//正式进入主线!
        /*
        S_CLS();
        cout<<"游戏结束,你的人生还在继续!祝您生活愉快!"<<endl<<endl<<endl;
        Sleep(3*1000);
        */
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月8日
  • 已采纳回答 8月31日
  • 创建了问题 8月25日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?