C# 在控制台中绘制此图的更好方法

C# 在控制台中绘制此图的更好方法,c#,ascii-art,C#,Ascii Art,我想知道是否有改进代码的方法,在这种情况下,可以获得doors(请不要谈论Windows窗体和更好的游戏方式,我只是在尝试一些东西。) 代码: 结果: 我请求帮助以获得相同的结果,但使用更好的代码(如果可能)。Lol我的尝试 private static string[] what = { "\t _____________", "\t| _________ |", "\t| | | |", "\t| |

我想知道是否有改进代码的方法,在这种情况下,可以获得doors(请不要谈论Windows窗体和更好的游戏方式,我只是在尝试一些东西。)

代码:

结果:

我请求帮助以获得相同的结果,但使用更好的代码(如果可能)。

Lol我的尝试

private static string[] what = {
        "\t _____________",
        "\t|  _________  |",
        "\t|  |       |  |",
        "\t|  |   {0}   |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |_______|  |",
        "\t|             |",
        "\t()------------|",
        "\t|  ________   |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |_______|  |",
        "\t|_____________|"
        };

static void Main(string[] args)
{
    GenerateMultipleWhat(new[] { 1, 2, 3 });
    Console.ReadKey();
}

static void GenerateMultipleWhat(int[] values)
{
    for (int i = 0; i < what.Length; i++)
    {
        for(int x = 0; x < values.Length; x++)
            Console.Write(what[i] + "{1}", values[x], (x + 1) == values.Length ? "" : "\t");
        Console.WriteLine();
    }
}
private静态字符串[]什么={
“\t\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”,
“\t | | | | | | |”,
“\t | | | |”,
“\t |{0}| |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | | | | |”,
“\t | |”,
“\t()--------------”,
“\t | | | | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | | | | |”,
“\t | | | | | | | | | | | | | | | |”
};
静态void Main(字符串[]参数)
{
GenerateMultipleWhat(新[]{1,2,3});
Console.ReadKey();
}
静态void GenerateMultipleWhat(int[]值)
{
for(int i=0;i
结果:

哈哈,我的尝试

private static string[] what = {
        "\t _____________",
        "\t|  _________  |",
        "\t|  |       |  |",
        "\t|  |   {0}   |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |_______|  |",
        "\t|             |",
        "\t()------------|",
        "\t|  ________   |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |       |  |",
        "\t|  |_______|  |",
        "\t|_____________|"
        };

static void Main(string[] args)
{
    GenerateMultipleWhat(new[] { 1, 2, 3 });
    Console.ReadKey();
}

static void GenerateMultipleWhat(int[] values)
{
    for (int i = 0; i < what.Length; i++)
    {
        for(int x = 0; x < values.Length; x++)
            Console.Write(what[i] + "{1}", values[x], (x + 1) == values.Length ? "" : "\t");
        Console.WriteLine();
    }
}
private静态字符串[]什么={
“\t\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”,
“\t | | | | | | |”,
“\t | | | |”,
“\t |{0}| |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | | | | |”,
“\t | |”,
“\t()--------------”,
“\t | | | | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | |”,
“\t | | | | | | |”,
“\t | | | | | | | | | | | | | | | |”
};
静态void Main(字符串[]参数)
{
GenerateMultipleWhat(新[]{1,2,3});
Console.ReadKey();
}
静态void GenerateMultipleWhat(int[]值)
{
for(int i=0;i
结果:


您可能希望将ASCII码存储在文本文件中,在应用程序启动时读取,然后显示其内容。这将使您的代码更加清晰,并使艺术更易于修改。毕竟,大多数游戏都是这样做的:它们不是用代码绘制单个像素,而是从图像和模型文件加载它们的艺术

// At startup:
string art = File.ReadAllText("ascii_art.txt");

// whenever you need to display those doors:
Console.WriteLine(string.Format(art, input, input + 1, input + 2));
示例ascii_art.txt:

 _____   _____   _____
|     | |     | |     |
| {0} | | {1} | | {2} |
|_____| |_____| |_____|

只需确保格式说明符与
string.format
参数匹配即可。此外,文本文件中的格式说明符长度为3个字符,但如果用单个字符替换,则布局将混乱。防止这种情况的一种方法是对
string.Format
参数调用
ToString().PadLeft(3)

您可能希望将ASCII艺术存储在文本文件中,在应用程序启动时读取,然后显示其内容。这将使您的代码更加清晰,并使艺术更易于修改。毕竟,大多数游戏都是这样做的:它们不是用代码绘制单个像素,而是从图像和模型文件加载它们的艺术

// At startup:
string art = File.ReadAllText("ascii_art.txt");

// whenever you need to display those doors:
Console.WriteLine(string.Format(art, input, input + 1, input + 2));
示例ascii_art.txt:

 _____   _____   _____
|     | |     | |     |
| {0} | | {1} | | {2} |
|_____| |_____| |_____|

只需确保格式说明符与
string.format
参数匹配即可。此外,文本文件中的格式说明符长度为3个字符,但如果用单个字符替换,则布局将混乱。防止这种情况发生的一种方法是对
string.Format
参数调用
ToString().PadLeft(3)

如果您坚持使用ASCII艺术,我不知道对于向控制台写入长行的基本形式,您能做多少,但是,如果您为每种独特类型的线创建了方法,然后由另一个方法调用,以创建任意大小、数字和输入消息的门,然后在将来需要创建门时使用该方法,那么您可能能够简化它。对于任何其他对象都是一样的。您可以尝试查看
string.Format()
或重载
控制台.WriteLine(字符串格式,参数对象[]arg)
。这可能会使代码变得更好一点。否则,同意前面的评论,你可能无能为力。我一定会检查一下你们说的东西,并尝试一些解决方法。如果你指定你想要什么样的“更好”…我的意思是@Sam实现了什么,一种制作我想要多少门的通用方法。如果你坚持使用ASCII艺术,我不知道在控制台上写长线的基本形式上你能做多少,但是如果你为每种独特的线类型制作方法,你将来可能可以简化它,然后被另一种方法调用来制作任意大小、数字和输入信息的门,然后在将来需要制作门时使用该方法。对于任何其他对象都是一样的。您可以尝试查看
string.Format()
或重载
控制台.WriteLine(字符串格式,参数对象[]arg)
。这可能会使代码变得更好一点。否则,同意前面的评论,你可能无能为力。我一定会检查一下你们说的东西,并尝试一些解决方法。如果你指定你想要什么样的“更好”…我的意思是@Sam实现了什么,一个通用的方法来制作我想要的门的数量。非常感谢这个令人敬畏的回复,非常适合。非常感谢这个令人敬畏的回复,非常适合。这也是一个好的可行的方法,在这个小项目中,我将保持简单,只基于代码文件。在里面