【问题标题】:I want to make a snake game in a C# console, movement problem [closed]我想在 C# 控制台中制作蛇游戏,移动问题 [关闭]
【发布时间】:2019-12-20 11:06:39
【问题描述】:

要改变蛇的方向,我首先必须按向上箭头,然后按蛇的新方向,蛇会朝那个方向前进,直到我再次点击向上箭头。因此,要向左改变方向,您需要按向上箭头,然后按向左箭头。当我按左键使蛇向左移动时,我希望它消失。基本上向上箭头正在暂停游戏,我不知道为什么。

            if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.UpArrow)
            {
                keyinfo = Console.ReadKey();
                Console.WriteLine(ConsoleKey.UpArrow);
            }
            if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.DownArrow)
            {
                keyinfo = Console.ReadKey();
                Console.WriteLine(ConsoleKey.DownArrow);
            }
            if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.LeftArrow)
            {
                keyinfo = Console.ReadKey();
                Console.WriteLine(ConsoleKey.LeftArrow);
            }
            if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.RightArrow)
            {
                keyinfo = Console.ReadKey();
                Console.WriteLine(ConsoleKey.RightArrow);
            }
            if (keyinfo.Key == ConsoleKey.UpArrow)
            {
                j--;
            }
            if (keyinfo.Key == ConsoleKey.DownArrow)
            {
                j++;
            }
            if (keyinfo.Key == ConsoleKey.LeftArrow)
            {
                k--;
            }
            if (keyinfo.Key == ConsoleKey.RightArrow)
            {
                k++;
            }

【问题讨论】:

  • 我认为部分问题可能是您在 if 语句中执行 ReadKey (我认为这意味着按键已被执行)。然后你正在执行另一个ReadKey()哪个是左键?

标签: c# if-statement controls key readkey


【解决方案1】:

您拨打ReadKey 的次数过多。您应该调用一次,然后将结果存储在变量中:

     if (Console.KeyAvailable)
     {
          keyinfo = Console.ReadKey(true);
          Console.WriteLine(keyinfo);

          if (keyinfo.Key == ConsoleKey.UpArrow)
          {
              j--;
          }
          if (keyinfo.Key == ConsoleKey.DownArrow)
          {
              j++;
          }
          if (keyinfo.Key == ConsoleKey.LeftArrow)
          {
              k--;
          }
          if (keyinfo.Key == ConsoleKey.RightArrow)
          {
              k++;
          }
     }

【讨论】:

  • 我的新代码和你的不一样,但它帮助我解决了这个问题。我将在下面发布我的代码。
【解决方案2】:
            if (Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                Console.WriteLine(keyinfo);

            }
            if (keyinfo.Key == ConsoleKey.UpArrow)
            {
                j--;
            }
            if (keyinfo.Key == ConsoleKey.DownArrow)
            {
                j++;
            }
            if (keyinfo.Key == ConsoleKey.LeftArrow)
            {
                k--;
            }
            if (keyinfo.Key == ConsoleKey.RightArrow)
            {
                k++;
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多