- 注册时间
- 2006-11-2
- 最后登录
- 1970-1-1
|
能比较准确的测试出你的反应速度的一个小东西。
测试开始后,1-5秒内屏幕会变黑,此时以最快速度按下任意一键即可.一共测5次,最后可以求出平均反应值、方差,并作出一个简略的波动曲线。
玩具~
更新了一下,加入了记录,能自动把成绩保存下来了(前10个),可以和别人比一比。
修正了波动曲线上下颠倒的BUG.
在排行榜中按输入,可以进一步查看每次的成绩,波动曲线等.
测试过程按任意键都可以完成,以免总按一个把键盘按坏了.
就这么多了,其他变化自己看吧~~
截图
/////////////////////////////////////////////
一小段计算时间间隔的技术文章~(任意长度的时间,精确到1/256s)
wqx中的秒数并不是在Getms()取得的毫秒变成0时+1的,秒数变时Getms()是0~255的任意一个数;
这就造成了麻烦,以至<1秒有时测出的时间间隔是负值,>1秒造成测出的时间少1秒,TC800中系统工具里的秒表不准大概就是这个原因
进位的值每次开机都会变,精确的计算任意的时间间隔就得先把进位时的值计算出来
可以用这种方法可以去掉秒表的BUG,做个比较精确的秒表程序^^
如果有更好的方法也不要抨击我~~
下面是段精确计算两次按键间隔的代码
long ta,tb,tc,d,f,g;
struct TIME //GetTime()要用到的结构
{int year;
char month;
char day;
char hour;
char minute;
char second;
char week;
};
struct TIME timb;
struct TIME tima;
long ms(int x)//根据tc值把Getms()取得的毫秒数换算成以0进位的值
{int y;
if (x>=tc) y=x-tc;
if (x<tc) y=x+256-tc;//减TC其实不用写~因为算时间差的时候可以约掉
return y;
}
void main()
{
printf("计算tc中。。");
l3:GetTime(tima);
ta=Getms();
GetTime(timb);
if (timb.second>tima.second) {tc=ta;goto l2;}//这段是计算出毫秒的进位值并存在变量tc,此过程会花费最多1秒
goto l3;//之所以用这么多GOTO是因为我感觉WQX上这么写方便~~
l2:
printf("按任意键取开始时间...");
getchar();
GetTime(tima);
ta=Getms();//取开始的系统时间和"毫秒"数
printf("按任意键取结束时间...");
getchar();
GetTime(timb);//取结束时的系统时间和"毫秒"数
tb=Getms();
ta=ms(ta);//换算成以0进位的值
tb=ms(tb);//换算成以0进位的值
d=(timb.hour-tima.hour)*60*60*1000+(timb.minute-tima.minute)*60000+(timb.second-tima.second)*1000+((tb)*10000/256+5)/10 -((ta)*10000/256+5)/10;//计算总毫秒数(day\month忽略了)
f=d/1000;//取秒位
g=d-f*1000;//取毫秒位
if (g<10) printf("时间间隔: %d.00%d秒\n",f,g);
else if(g<100) printf("时间间隔: %d.0%d秒\n",f,g);
else printf("时间间隔: %d.%d秒\n",f,g);
getchar();
} |
|