zoukankan      html  css  js  c++  java
  • 让键盘输入不影响界面的动态效果(C++)

    输入语句,当代码运行到它的时候就要等待输入,才能执行下一行代码,如果不输入的话,就相当于在这里暂停了(程序设计老师讲过通过这样的方式以达到暂停(pause)的效果),但如果我们想要如果没输入仍然可以运行,比如,玩坦克大战的时候不按方向键,游戏画面依旧在变动(还比如以前我想在我一个小软件中做一点美化:标题文字颜色在深蓝与浅蓝间随时间不断变化,结果最后的效果是颜色随鼠标移动变化,鼠标不动,颜色就不变),那如果要改变这一问题,怎么办?

    头文件: conio.h
    函数:
            _kbhit()    :无阻塞函数,当运行到这里检测键盘是否有输入,有则返回1,无则返回0 
            _getch()   :不回显输入函数,作用同getchar(),区别在于_getch()输入时输入的内容不会被显示。

    下面来一个简单的例子示范一下:
        假如你让一个人帮你数天上的星星,然后他数了十多分钟后累了,又不能停下,就只好问你:还要继续数吗?你说:要。他继续数了一颗,又问你要不要继续数,就一直这样不断的数一颗问一遍,数一遍问一遍,是不是很烦?那你会怎么办?当然是告诉他:我没叫你停,你就一直数!对吧,下面用代码实现一下。

    #include<conio.h>
    #include<iostream>
    using namespace std;
    int main() {
    	int i = 0;
    	char ch;
    	while (1) {
    		cout << ++i << "颗星星" << endl;
    		if (_kbhit()) {			//如果键盘有输入
    			ch = _getch();			//且输入k
    			if (ch == 'k')			
    				break;
    		}
    	}
    	return 0;
    }

    这样我们就达到了一个动态的效果:如果不输入k,就一直“数星星”。

    下面再将代码进行一个简单的完善:

    #include<conio.h>
    #include<iostream>
    #include<Windows.h>
    using namespace std;
    int main() {
    	int i = 0;
    	while (1) {
    		cout << ++i << "颗星星" << endl;
    		if (_kbhit()&&toupper(_getch())=='K') 		//如果键盘有输入且输入K键(即k,K)		
    				break;
    		Sleep(1000);			//不能数得太快,不然太夸张容易被看出来是假的,所以1000ms(1s)数一次
    		system("cls");			//清屏,过去的都让它过去吧
    	}
    	return 0;
    }
  • 相关阅读:
    Promise 对象
    [转] LVM分区在线扩容
    [转] 打开 CMD 时自动执行命令
    [转] FFmpeg常用基本命令
    systemd 之 journalctl
    systemd 之 systemctl
    关于用户权限的加强与理解(上)
    [转] 测试环境下将centos6.8升级到centos7的操作记录
    [搞机] 双网卡做数据均衡负载
    [转] 网络基础知识1:集线器,网桥,交换机
  • 原文地址:https://www.cnblogs.com/F-itachi/p/9974345.html
Copyright © 2011-2022 走看看