namespace Keyboard_Menu_Demo
{
class Menu
{
public void MenuOptions()
{
ConsoleKeyInfo KeyPressed = Console.ReadKey(true);
if (KeyPressed.Key == ConsoleKey.W)
{
Console.WriteLine("You pressed the W button~!");
}
if (KeyPressed.Key == ConsoleKey.S)
{
Console.WriteLine("You pressed the S button~!");
}
if (KeyPressed.Key == ConsoleKey.A)
{
Console.WriteLine("You pressed the A button~!");
}
if (KeyPressed.Key == ConsoleKey.D)
{
Console.WriteLine("You pressed the D button~!");
}
while (KeyPressed.Key != ConsoleKey.Escape) { }
}
}
}
namespace Keyboard_Menu_Demo
{
class Game
{
public void Start()
{
Console.WriteLine("The game is starting.");
Console.WriteLine("Press <esc> to exit.");
}
}
}
namespace Keyboard_Menu_Demo
{
internal class Program
{
static void Main(string[] args)
{
Game mygame = new Game();
Menu mymenu = new Menu();
mygame.Start();
mymenu.MenuOptions();
}
}
}
MenuOptions 方法仅适用于控制台中的一键按下。之后,我无法收到测试消息。
启动方法不允许我使用 esc 键退出。
我尝试将空的 while 循环移至主入口点并位于调用 MenuOptions 方法的代码行下方,认为这会影响程序的实际运行 - Diiiid noooot...
我希望我的代码允许我通过按键触发消息,直到我按下退出键。这仍然是目标。
我几乎不知道自己在做什么。我还没有完成任何项目,打印 Hello World 算吗?哈哈,正在开发井字游戏,进展顺利。我已经不再被编码概念完全困扰,但当涉及到我复制的一些技巧以外的任何东西时,我就会迷失方向。我真的超出了自己的范围,刚刚开始自学,所以说实话,任何外部输入可能都会对我有帮助!
您“阅读”时仅在
MenuOptions()
处按下了一次按键。如果键是 W/A/S/D - 它将打印指定的输出,否则不会,然后将进入无限 while
循环。
您应该在
ReadKey
循环中无限地 while
,并检查按下的按键并执行操作:
public void MenuOptions()
{
// Declare variable to store last pressed key
ConsoleKey pressedKey;
// Run infinite loop, until pressed key is Escape
while ((pressedKey = Console.ReadKey().Key) != ConsoleKey.Escape)
{
// and now performs your actions based on pressed key, except Excape
switch (pressedKey)
{
case ConsoleKey.W:
case ConsoleKey.A:
case ConsoleKey.S:
case ConsoleKey.D:
Console.WriteLine($"You pressed the {pressedKey} key");
break;
default:
break;
}
}
}