|
游戏和教辅软件都少不了计时功能,笔者通过摸索,找到了一种实现这一功能的简单方法,使计时与机器时钟同步,并且使用十分灵活,可根据需要实现正计时或倒计时,特别适合游戏或教辅这类需要计时而又具有很强交互性能的软件使用。
编程思路该程序用Borland C++编制,其计时功能由库函数ti me(NULL)和bioskey(x)来实现,其功用如下:
ti me(NULL):以秒为单位取得从1970年1月1日零时算起的当前时间,其返回值是一个特殊的ti me_t 类型,该类型及函数在头文件ti
me .h中定义。
bioskey(x):由bios .h 定义的直接调用BIOS键盘接口的函数,当调用参数X=1时,此函数测试键盘是否有输入,如没有则返回0;当调用参数X=0时,此函数返回一个整型数,低八位是输入字符的ASCII
码,如果低八位为0,则高八位为扩展键盘码。演示程序的功能是在30秒的时间内允许用户从键盘输入字符,屏幕上端显示倒计时的剩余时间以及用户输入的字符,计时到0或用户按了Esc键,程序都会结束运行。
此方法的关键是使用bioskey()函数获取键盘输入,在等待输入的间隙更新时间。
程序清单
#include″stdio .h″
#include″stdlib .h″
#include″bios .h″
#include″conio .h″
#include″ti me .h″
ti me_t t1,t2;
int dispti me(void)//更新显示时间
{int t ,t_hour ,t_minute ,t_second ;
t =t1+30-t2;//计算时间差,30是预置倒计
时时值
if (t <=0)return 1;//时间到,返回1
//如果要做30秒的正计时这两句改为:
//t =t2-t1-30;
//ift >=0return 1;
//如果仅作为时钟,这里直接将t1换算成当天时间
显示,取消超时判断
t_hour =t/3600;t =t %3600;//将时间差的秒数换算
成时、分、秒
t_minute =t/60;t_second =t %60;
gotoxy(70,1);//输出时间
printf(″%2d :%02d :%02d″,t_hour ,t_minute ,t_second);
return 0;
}void main(void)//主程序
{int key,c =0,d ;;
t1=ti me(NULL);//取起始时间
while(c !=0x1b)//0x1b 是Esc 键码
{do {t2=ti me(NULL);//取当前时间
if (dispti me())//调时钟显示,
exit(5);//如超时则退出程序
}while(bioskey(1)==0);//检测键盘输入
key=bioskey(0);//读键盘输入字符
c =key%256;d =key/256;
gotoxy(60,1);
printf(″%c″,c);//显示输入的字符
}}
(安徽省马鞍山市红星中学微机室许斌243011)
|