C#清除密钥缓冲区

时间:2013-11-16 12:56:27

标签: c#

我有一个控制台游戏,玩家通过按下一个数字来选择和能力,对敌人做出的能力,我们等待2秒然后敌人对玩家有能力,然后我们再等待2秒然后我们开始过度。我发现,如果玩家在下一个循环进行等待时按下一个能力键,它将立即执行(按键位于缓冲区中)。我想在每个循环开始时清除缓冲区。

我尝试了以下内容,但它永远不会从Peek()调用回来。

private void FlushKeyboard()
{
   while (Console.In.Peek() != -1)
        Console.In.Read();
}

1 个答案:

答案 0 :(得分:2)

您可以使用Console.KeyAvailable property查看是否有要读取的密钥,然后使用ReadKey进行读取:

while (Console.KeyAvailable)
{
    ConsoleKeyInfo key = Console.ReadKey();
}

此外,如果您不希望屏幕上显示键入的字符,则可以使用接受intercept flag的覆盖:

ConsoleKeyInfo key = Console.ReadKey(true);