我有一种方法可以用来问一个人想在Console游戏中Console条路。

后述方法:

私有静态void dirChoose()

{
    Console.SetCursorPosition(0, 7);
    Console.WriteLine("A mysterious voice says \"Which way will you go?\"");
    Console.WriteLine("Type");
    if (curLeft == false) { Console.WriteLine("(L)eft    "); }
    if (curUp == false) { Console.WriteLine("(U)p        "); }
    if (curRight == false) { Console.WriteLine("(R)ight  "); }
    if (curDown == false) { Console.WriteLine("(D)own    "); }

    Console.SetCursorPosition(49, 7);

    userDirInput = Convert.ToChar(Console.Read());
    Console.SetCursorPosition(0, 13);
    Console.Write("read as " + userDirInput);

         if (userDirInput == 'u' || userDirInput == 'U') { reDir = 1; userDirInput = 'y'; }//up
    else if (userDirInput == 'd' || userDirInput == 'D') { reDir = 3; userDirInput = 'y'; }//down
    else if (userDirInput == 'l' || userDirInput == 'L') { reDir = 0; userDirInput = 'y'; }//left
    else if (userDirInput == 'r' || userDirInput == 'R') { reDir = 2; userDirInput = 'y'; }//right
    else//anything besides
    {
        Console.SetCursorPosition(0, 14);
        Console.WriteLine("You entered an incorrect direction. Please try again.");
        Console.SetCursorPosition(rWALL_STOP - 1, 3);

        doneBool = false;
        t.Elapsed += right;
        t.Start();

    }
}//dirChoose()

在回答“您将走哪条路?”的问题时 应该读取第一个输入的字符。 因此,如果您键入整个单词“ left”或“ right”,那么它将分别显示为“ l”和“ r”。 然后,应该更改一个数字并让它执行其应做的事情。 由于某种奇怪的原因,它在读取第一个之后跳到第二个,因此它将适当的方法添加到计时器中并继续前进。

注意:

static Timer t = new Timer(16);
public static char userDirInput { get; set; }

public static bool curLeft { get; set; }
public static bool curUp { get; set; }
public static bool curRight { get; set; }
public static bool curDown { get; set; }
public static bool doneBool{ get; set; }

所以我的问题是“为什么光标会跳到第一个字符之后的第二个字符?我该如何解决?”

===============>>#1 票数:1

您可以按以下方式阅读密钥。 将false值传递给ReadKey()将在屏幕上回显输入的值。

ConsoleKeyInfo cki = Console.ReadKey(false);
userDirInput = cki.KeyChar;

代替

userDirInput = Convert.ToChar(Console.Read());

===============>>#2 票数:0

我不确定我是否理解您的问题,但是您似乎误解了Console.Read()的行为。 当您调用Console.Read()时,您将在缓冲区中获得下一个字符。 如果用户键入“ left”,然后按Enter,则将调用console read来获取“ l”,然后缓冲区中还剩下5个字符。 下一个调用将返回“ e”,然后是“ f”,然后是“ t”,然后是“ \\ r”,然后是“ \\ n”。

因此,如果用户输入“ left \\ r \\ n”,则第二次调用dirChoose()时,它将表现为无法识别的输入。

  ask by joesumbody122 translate from so

未解决问题?本站智能推荐:

1回复

C#无法在ASCII控制台游戏中移动字符

我有一个学校的C#项目。 我无法在此ASCII控制台游戏中移动角色。 它必须是OO。 运行代码后,我得到以下信息: 我按向左或向右后 有人可以帮我吗? 任何帮助表示赞赏。 program.cs: } game.cs: } entity.c
6回复

如何从键盘读取字符直到收到句号,并计算空格数

我是C#和OOP以及stackoverflow的新手。 这是我的第一个场景(几个问题) 我希望用户输入字符,直到收到句点(。),并计算和报告空格的数量。 我能做到吗? (不确定你总是点击进入/返回发送) 我可以不使用字符串吗? (我还没有涵盖字符串,这是一个自学练习,我相
1回复

将活动从一个班级提高到另一个班级

所以我想开始检查我class过去的时间,而当这个time过去了(1分钟)时,我想引发事件: 用法 所以我不知道为什么,但是看来我的timer elapsed功能永远不会启动。 我尝试_timer.Enabled = true; 而不是_timer.Start(); 但这仍然
1回复

Console.ReadKey与带有Timer的Console.ReadLine

以下代码是一个众所周知的示例,用于显示调试版本和发布版本之间的区别: 如果使用调试配置运行此命令,则计时器将每两秒输出当前时间。 GC.Collect没有任何影响,因为编译器人为地延长了Timer t变量的寿命。 在发布配置中,计时器只执行一次。 GC.Collect将垃圾收集t变
1回复

使用C#控制台的计时器

我正在使用c#控制台。 我有一个计时器,例如: int TimeElasped = 0以显示和更新时间。 它可以用for( ; ; )解析 但是计算机不能做其他代码! 所以我正在使用此代码: 我无法使用Console.Clear()因为当我删除Console.Clear()计
3回复

C#console批处理应用程序中的最佳计时器方法

哪个是C#控制台批处理应用程序的最佳计时器方法,必须按如下方式处理: 连接到数据源 处理批处理直到超时发生或处理完成。 “用数据源做点什么” 优雅地停止控制台应用程序 相关问题: 如何向C#控制台应用程序添加计时器
7回复

如何将计时器添加到C#控制台应用程序

就是这样 - 如何在C#控制台应用程序中添加计时器? 如果你能提供一些示例编码会很棒。
4回复

C#计时器在X秒钟后关闭控制台窗口

纽伯在这里。 我试图了解如何编写计时器以关闭我的c#控制台应用程序,这样我就不必再次按下“返回”键来关闭窗口(我一直在使用Console.Read();使其保持打开状态我可以看到该应用程序到目前为止已按预期运行),所以我正在尝试制作一个小型计时器方法,以下是我发现的该方法,但是由于我不知道
1回复

C#控制台应用程序将在8分钟后停止

我有一个C#控制台应用程序,它使用计时器每15秒读取一个文件夹。 它可以正常工作,但将在8分钟后暂停并停止读取文件夹。 有什么理由吗? 谁能猜到这个问题?
1回复

Selenium(c#控制台):我想退出所有的webdriver,并定期重新启动它们

我的英语不好,所以我不知道我的写作是否正确。 我学习了一个星期的编程。 我想退出所有的网络驱动程序,然后每两个小时重新启动一次。 但是我失败了。 版本1 版本2 我失败的原因是我试图用OnTimer控制WebDriver。 是否有退出Webdriv