【问题标题】:Console.KeyAvailable doesn't detect the keyConsole.KeyAvailable 未检测到密钥
【发布时间】:2019-03-09 19:22:36
【问题描述】:

我正在尝试在控制台中制作一个简单的蛇游戏(不吃东西,只有蛇在四处移动)但是当我按下 UpArrow 时,它什么也没做。我也尝试过 W 但它会将w 写入控制台。

代码:

while(Console.KeyAvailable == true)
{
    if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.UpArrow)
    {
        Console.SetCursorPosition(x, y);
        Console.WriteLine("*");
        Console.WriteLine("*");
        Console.WriteLine("*");
        x++;
        Console.WriteLine(x);
    }
}

Console.ReadLine();

【问题讨论】:

  • 完全删除您的两个Console.KeyAvailableReadKey 将等待按键,因此不需要第二个 KeyAvailable。第一个不起作用,因为当您的应用程序启动时,您无法按足够快的键进入您的 while 循环,因此它将直接转到您的 ReadLine 语句。你WriteLines 的行为也不会像你想象的那样。第一个将在 (x,y) 处打印,第二个在 (1,y+1) 处打印,因为您使用回车符进行换行,将 x 重置为最左边的位置,第三个在 (1,y+2) 处和第四在 (x+1,y+3) - 这几乎不像一条蛇。
  • @ckuri 现在开始工作了!谢谢。
  • @ckuri 我用 Writes 替换了 WriteLine。它移动了两次,但两次移动后它就不动了。我认为这是因为 Console.ReadLine 但我不确定。它应该是按下箭头键时的绘图。
  • 使用调试器查看您的程序是如何工作的。如果要进入 ReadLine,则表示您确实喜欢下面 aliozgurr 的答案,并且您按下了 UpArrow 以外的键。如果你想避免做类似while (true) { var key = Console.ReadKey(true).Key; if (key == ConsoleKey.UpArrow) { … } if (key == ConsoleKey.Escape) break; } 的事情,这意味着当 UpArrow 让你的蛇向上移动时,当 Escape 退出循环时,否则忽略所有其他键。

标签: c# console


【解决方案1】:

删除 Console.KeyAvalible - 两者。您的程序通过循环并立即转到 ReadLine。

应该是这样的:

while(Console.ReadKey(true).Key == ConsoleKey.UpArrow)
{
//code here-
}

【讨论】:

    【解决方案2】:

    你可以试试下面的代码。它可能对你有帮助。不要忘记输入 x 和 y。

           while (Console.ReadKey(true).Key>0)
            {
                if (Console.ReadKey(true).Key == ConsoleKey.UpArrow)
                {
                    Console.SetCursorPosition(x, y);
                    Console.WriteLine("*");
                    Console.WriteLine("*");
                    Console.WriteLine("*");
                    x++;
                    Console.WriteLine(x);
                }
            }
    

    【讨论】:

      【解决方案3】:

      它没有检测到它,因为如果按下一个键,它必须像这样重置:

      if (Console.KeyAvailable)
      {
         Console.ReadKey(true);
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-19
        • 1970-01-01
        • 2011-10-07
        • 2022-10-30
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        相关资源
        最近更新 更多