You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

反应时间游戏中Thread.Sleep期间按键触发ReadKey的问题

解决反应时间游戏的按键提前触发问题

你的问题根源在于Thread.Sleep期间用户按下的按键会被存入控制台输入缓冲区,当Console.ReadKey(true)执行时会直接读取这些提前按下的按键,导致反应时间计算完全失真。

解决方法很简单:在显示"NOW:"并开始计时之前,先清空输入缓冲区里的所有预输入按键。可以通过循环检查Console.KeyAvailable,如果有未读取的按键就调用Console.ReadKey(true)丢弃掉。

修改后的代码如下:

// 随机等待1-5秒
Thread.Sleep(rnd.Next(1000, 5000));

// 清空输入缓冲区,丢弃Sleep期间按下的所有按键
while (Console.KeyAvailable)
{
    Console.ReadKey(true);
}

// 提示用户并开始计时
Console.Write("NOW: ");
long start = DateTime.Now.Ticks;
Console.ReadKey(true);
long timePassed = DateTime.Now.Ticks - start;

Console.WriteLine(timePassed < 5_000_000 ? "Fast" : "Slow");

关键说明:

  • Console.KeyAvailable:检查控制台输入缓冲区是否有未读取的按键,返回true表示有按键等待读取。
  • 循环调用Console.ReadKey(true):true参数表示不将按键字符输出到控制台,直接丢弃这些提前输入的按键,确保后续的ReadKey只会捕获用户在看到"NOW:"之后的按键操作。

这样就能保证游戏的公正性,用户必须在看到提示后按下按键才会被计入反应时间。

内容的提问来源于stack exchange,提问作者callumetheridge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:35:27