【问题标题】:C# Console Application | Moving a characterC# 控制台应用程序 |移动角色
【发布时间】:2015-11-25 19:03:44
【问题描述】:

首先,我想道歉,因为这可能是在我之前提出的。然而,无论我在哪里寻找,我都找不到答案。 我想让某个角色移动(不断地,或通过某个键)。 通过移动,我的意思是它改变了它在屏幕上的位置。我不认为我真的明白它,但我认为你可以只使用一个 for 循环并每次在这个字符之前添加一个空格。如果可能的话,我想知道如何制作这个 for 循环。 例如: 当你运行程序时,你会看到: * 然后在你按下一个键或只是不断地按下一个键之后(正如我之前提到的): * 如您所见,角色向右移动。但我想知道如何让它向各个方向移动(向上、向下等)

【问题讨论】:

  • 由于某种原因,该网站在我的示例中没有包含空格,因此您无法真正分辨出差异。关键是,它向右移动了。
  • 如果您使用代码格式,您可以很好地显示空格。代码格式以 4 个空格开头。
  • @ItayHabani 为什么不在这里发布有问题的代码..?让我们看看你想做什么..
  • @Amasa 我很确定这与此无关

标签: c# key console-application move


【解决方案1】:

希望这已经足够好了。运行代码,然后按箭头键移动星号。从这里得到灵感:https://msdn.microsoft.com/en-us/library/system.console.setcursorposition(v=vs.110).aspx

public class Program
{
    public static void Main(string[] args)
    {
        const char toWrite = '*'; // Character to write on-screen.

        int x = 0, y = 0; // Contains current cursor position.

        Write(toWrite); // Write the character on the default location (0,0).

        while (true)
        {
            if (Console.KeyAvailable)
            {
                var command = Console.ReadKey().Key;

                switch (command)
                {
                    case ConsoleKey.DownArrow:
                        y++;
                        break;
                    case ConsoleKey.UpArrow:
                        if (y > 0)
                        {
                            y--;
                        }
                        break;
                    case ConsoleKey.LeftArrow:
                        if (x > 0)
                        {
                            x--;
                        }
                        break;
                    case ConsoleKey.RightArrow:
                        x++;
                        break;
                }

                Write(toWrite, x, y);
            }
            else
            {
                Thread.Sleep(100);
            }
        }
    }

    public static void Write(char toWrite, int x = 0, int y = 0)
    {
        try
        {
            if (x >= 0 && y >= 0) // 0-based
            {
                Console.Clear();
                Console.SetCursorPosition(x, y);
                Console.Write(toWrite);
            }
        }
        catch (Exception)
        {
        }
    }
}

【讨论】:

  • 您可能希望在循环内的某个时间段 Thread.Sleep 以防止程序与处理器挂钩。
  • 谢谢,但没那么有用...我在学校学习 c#,这是我的第一年,所以我真的不知道 try、catch 和其中一些表达是什么意思...今天在课堂上,一位朋友向我展示了他是如何做到的,他只是在一个 for 循环中使用了一个 for 循环。 '' 的外层和 '' 之前的空格的内层。你能给我看一个与他所做的类似的版本吗?
猜你喜欢
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 2019-01-18
  • 2013-01-26
  • 1970-01-01
  • 2021-11-14
相关资源
最近更新 更多