【发布时间】: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.KeyAvailable。ReadKey将等待按键,因此不需要第二个 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 退出循环时,否则忽略所有其他键。