C语言使用getch()在dos上编写闪烁光点函数(界面类)

——感谢我的老师与组员们,是他们帮助我把一个想象拉到现实

一,前置准备

先贴效果图:
光标可以按‘w’,‘s’自由上下移动——光标可以闪烁、任意上下移动;
为了到达这样的效果,我们必须考虑如何对光标进行操作,这时候就需要用到一系列windows事先定义好的函数,也就是所谓的“WindowsAPI”。它在C中主要在头文件:

include <windows.h>

想要让光点能够闪烁,我的思路是程序先打印一个光点,再等待确定的一段时间,然后删除光点,再等待确定的一段时间,如此反复。按照这个思路来,就必须有一个函数能够使系统等待:

Sleep(500); //codeblock测试为等待500毫秒

考虑到界面美化,有没有什么办法可以让原来的光标在这里插入图片描述消失呢?这里需要改变光标状态的API,函数接口为:

GetConsoleCursorInfo(···) //得到光标状态
SetConsoleCursorInfo(···) //设置程序光标状态

这些零碎的问题解决后,一个重要问题就是如何判读键盘输入,这里我用的是一个无阻塞输入函数:getch() ;程序使用它时直接读入一个缓冲区中的字符,不会等待用户输入

二,具体实现

我们按照【一】的准备与思路,一步一步的来写函数,完成功能:

  1. 光标消失与出现:
void infogone(void)	//光标消失
{
    HANDLE hout;	//代表窗口编码的“句柄”
    hout=GetStdHandle(STD_OUTPUT_HANDLE);	//得到当前窗口的编码句柄
    CONSOLE_CURSOR_INFO info;	//代表光标信息的结构体
    GetConsoleCursorInfo(hout,&info);	//把句柄对应窗口的光标信存储在信息结构体中
    info.bVisible=0;	//把结构体中的“光标是否可显示”即“bVisible”成员设置为“不显示”,即0
    SetConsoleCursorInfo(hout,&info);	//把句柄对应窗口的光标按信息结构体中的内容重新设置
}

关于光标显示函数,只要把“.bVisible”成员设置为1再重新设置界面光标就可以了;

  1. 打印闪烁光点
char printflash(void)
{
    infogone();
    fflush(stdin);	//解决各种光点延迟的灵丹妙药
    printf("·");
    while(!kbhit())
    {
           printf("·");
           Sleep(300);	//可自由调控光标闪烁频率,数值越小频率越快
           printf("\b\b  \b\b");
           Sleep(300);
    }
    return getch();
}

这里用到了一个新函数:kbhit(),这个函数的功能是检验键盘有没有被敲击,有的话返回1,没有返回0;这同样也是一个无阻塞函数,具体可以参考:百度百科-kbhit()
简单来说,

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值