控制台正在读取用户输入,而代码为 运行
Console is reading user input while code is running
我正在用 C# 编写一个基于回合制的 2d 冒险游戏,运行s 在 windows 控制台中。
这是我的游戏循环的粗略概念:
while(condition) {
MethodCall1();
MethodCall2();
MethodCall3();
GetPlayerInput(Console.ReadKey());
}
游戏在一个 while 循环中 运行 秒,循环结束是 Console.ReadKey()。这个想法是让游戏打印出所有相关信息,运行 敌人 AI 和其他计算,然后等待用户输入,然后再重新做一遍。
然而,我运行遇到了一个问题。所有代码都需要相当长的时间 运行(将地图打印到控制台是罪魁祸首,用彩色打印大约需要 150 毫秒),在此期间控制台仍在读取用户输入,即使它看起来应该等到所有代码和打印完成后再读取输入。如果按下任何键,即使我松开键,它也会循环遍历检测到的按键次数的代码。
所以我想我有两个问题:为什么即使控制台仍在执行代码,它仍在读取输入,以及阻止这种情况发生的好方法是什么?
while (true)
{
YourMethods();
while (Console.KeyAvailable)
{
Console.ReadKey(true);
}
var key = Console.ReadKey();
Console.WriteLine(key);
}
我正在用 C# 编写一个基于回合制的 2d 冒险游戏,运行s 在 windows 控制台中。 这是我的游戏循环的粗略概念:
while(condition) {
MethodCall1();
MethodCall2();
MethodCall3();
GetPlayerInput(Console.ReadKey());
}
游戏在一个 while 循环中 运行 秒,循环结束是 Console.ReadKey()。这个想法是让游戏打印出所有相关信息,运行 敌人 AI 和其他计算,然后等待用户输入,然后再重新做一遍。 然而,我运行遇到了一个问题。所有代码都需要相当长的时间 运行(将地图打印到控制台是罪魁祸首,用彩色打印大约需要 150 毫秒),在此期间控制台仍在读取用户输入,即使它看起来应该等到所有代码和打印完成后再读取输入。如果按下任何键,即使我松开键,它也会循环遍历检测到的按键次数的代码。
所以我想我有两个问题:为什么即使控制台仍在执行代码,它仍在读取输入,以及阻止这种情况发生的好方法是什么?
while (true)
{
YourMethods();
while (Console.KeyAvailable)
{
Console.ReadKey(true);
}
var key = Console.ReadKey();
Console.WriteLine(key);
}