【问题标题】:2D Array Background Color二维数组背景颜色
【发布时间】:2015-03-09 19:33:48
【问题描述】:

我目前正在尝试更改数组的背景颜色,特别是在本例中为 grid[0, 0]。我已经搜索了一段时间,似乎无法提出任何建议。这可能是一个相当简单的问题,或者我需要休息一下!

Console.BackgroundColor(grid[0,0]) = ConsoleColor.Cyan;

我正在尝试使背景颜色为青色。变量是一个字符串,包含一个空格。

提前干杯。

完整来源:

static void Main(string[] args)
    {
        Console.CursorSize = 100;

        int row, col;

        string[,] grid = new string[10, 10];

        for (col = 0; col < 10; col++)
        { 
            for (row = 0; row < 10; row++)
            {
                grid[col, row] = " ";
            }
        }

        for (col = 0; col < 10; col++)
        {
            for (row = 0; row < 10; row++)
            {
                Console.Write(grid[col, row]);
            }

            Console.Write("\n");
        }
        Console.BackgroundColor(grid[0,0]) = ConsoleColor.Cyan;

        Console.ReadKey();
    }

【问题讨论】:

标签: c# arrays


【解决方案1】:

好的,首先你需要做的是使grid 的类型既可以包含颜色也可以包含字符串。

public class ColoredString
{
    public ConsoleColor Color{get; set;}
    public string Content {get; set;}
}

然后,当你设置你的颜色时,这样做。

grid[0,0].Color = ConsoleColor.Cyan;

之后,您可以像这样打印颜色

public static void PrintColor(ColoredString str)
{
    var prevColor = Console.BackgroundColor;
    Console.BackgroundColor = str.Color;
    Console.Write(str.Content);
    Console.BackgroundColor = prevColor;
}

这是一个 SSCCE

public class Program
{
    static void Main(string[] args)
    {
        var str = new ColoredString()
        {
            Color = ConsoleColor.Cyan,
            Content = "abcdef",
        };

        PrintColor(str);

        Console.ReadKey(false);
    }

    public static void PrintColor(ColoredString str)
    {
        var prevColor = Console.BackgroundColor;
        Console.BackgroundColor = str.Color;
        Console.Write(str.Content);
        Console.BackgroundColor = prevColor;
    }
}

public class ColoredString
{
    public ConsoleColor Color { get; set; }
    public string Content { get; set; }
}

【讨论】:

  • 谢谢 Sam,这个方法对编辑的源代码有效吗?我希望 [0,0] 作为玩家颜色开始,例如红色。并且随着玩家的前进,每个单元格都会发生相应的变化
  • @viroe 每次要查看更新状态时,您都必须重新打印网格。这就是控制台应用程序的本质。它或多或少地打印文本并且不经常删除文本。 It is possible to overwrite text on the console,但如果你想在屏幕上显示一个变化的区域,控制台应用程序可能不是你应该使用的。
  • @Viroe 你应该在谷歌上搜索XNA。这是一个使用 C# 和 Visual Studio 的游戏制作框架,我似乎记得有一些非常简单的使用教程。
  • @SamIam 很抱歉,Sam,您是否介意为我提供一个示例,说明我如何能够转动网格 [0, 0]。我仍然无法理解这个想法。我想通过一个例子,我将能够更好地理解它。干杯
  • @Viroe ColoredString[,] grid = new ColoredString[10, 10];
【解决方案2】:

我很确定 Console.BackgroundColor 设置要打印的文本的颜色。所以,如果你想用另一种颜色的一个词打印一个字符串,你会这样做:

Console.Write("Hello word, the following text is cyan: ");
Console.BackgroundColor = ConsoleColor.Cyan;
Console.Write("Cyan text ");
Console.BackgroundColor = ConsoleColor.Black;
Console.WriteLine("(but this is not cyan)");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多