You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C#控制台程序持续响应按键直到按下Esc退出?

解决C#控制台菜单按键响应与退出问题

问题根源分析

  • MenuOptions方法仅执行单次按键检测就结束,缺少循环维持运行逻辑,导致后续按键无响应
  • Start方法未添加Esc键监听与退出条件,无法通过Esc返回菜单或退出程序

具体修改方案

1. 让MenuOptions持续响应按键直到Esc退出

给MenuOptions方法添加循环逻辑,每次处理完按键操作后回到菜单检测状态,直到按下Esc才终止程序。

2. 在Start方法中加入Esc退出逻辑

在游戏运行循环内加入按键检测,一旦捕获到Esc键,就跳出游戏循环返回菜单。

完整示例代码

using System;

class Keyboard_Menu_Demo
{
    static void Main(string[] args)
    {
        Menu.MenuOptions();
    }
}

class Menu
{
    public static void MenuOptions()
    {
        bool keepRunning = true;
        while (keepRunning)
        {
            Console.Clear();
            Console.WriteLine("=== 井字棋菜单 ===");
            Console.WriteLine("1. 开始游戏");
            Console.WriteLine("2. 查看规则");
            Console.WriteLine("Esc. 退出程序");
            Console.WriteLine("\n请按对应按键选择");

            ConsoleKeyInfo pressedKey = Console.ReadKey(true);
            switch (pressedKey.Key)
            {
                case ConsoleKey.D1:
                    Game.Start();
                    break;
                case ConsoleKey.D2:
                    ShowGameRules();
                    break;
                case ConsoleKey.Escape:
                    keepRunning = false;
                    Console.WriteLine("程序已退出");
                    break;
                default:
                    Console.WriteLine("\n无效按键,请重新选择");
                    Console.ReadKey(true);
                    break;
            }
        }
    }

    private static void ShowGameRules()
    {
        Console.Clear();
        Console.WriteLine("=== 井字棋规则 ===");
        Console.WriteLine("1. 两名玩家轮流在3x3棋盘放置X和O");
        Console.WriteLine("2. 先连成一线(横、竖、斜)的玩家获胜");
        Console.WriteLine("\n按任意键返回菜单");
        Console.ReadKey(true);
    }
}

class Game
{
    public static void Start()
    {
        bool isPlaying = true;
        while (isPlaying)
        {
            Console.Clear();
            Console.WriteLine("=== 井字棋游戏中 ===");
            Console.WriteLine("当前棋盘:");
            Console.WriteLine("   |   |   ");
            Console.WriteLine("---+---+---");
            Console.WriteLine("   |   |   ");
            Console.WriteLine("---+---+---");
            Console.WriteLine("   |   |   ");
            Console.WriteLine("\n按Esc返回菜单,其他键模拟下棋");

            ConsoleKeyInfo gameKey = Console.ReadKey(true);
            if (gameKey.Key == ConsoleKey.Escape)
            {
                isPlaying = false;
            }
            else
            {
                Console.WriteLine("\n已完成一步操作,按任意键继续...");
                Console.ReadKey(true);
            }
        }
    }
}

关键修改说明

  • MenuOptions方法通过while (keepRunning)循环持续运行,仅在按下Esc时终止循环退出程序
  • Start方法用while (isPlaying)维持游戏运行,检测到Esc键就终止循环返回菜单
  • 使用Console.ReadKey(true)避免按键字符显示在控制台,优化交互体验
  • 无效按键后添加等待确认逻辑,避免菜单内容一闪而过

内容的提问来源于stack exchange,提问作者SuneaterCreature

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:18:25