在按下 esc 键退出控制台之前,如何让我的方法正常工作?

问题描述 投票:0回答:1
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 算吗?哈哈,正在开发井字游戏,进展顺利。我已经不再被编码概念完全困扰,但当涉及到我复制的一些技巧以外的任何东西时,我就会迷失方向。我真的超出了自己的范围,刚刚开始自学,所以说实话,任何外部输入可能都会对我有帮助!

c# menu console user-input
1个回答
0
投票

您“阅读”时仅在

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;
            
        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.