【问题标题】:How to randomly pick one of known console colors for text?如何随机选择一种已知的控制台颜色作为文本?
【发布时间】:2013-07-01 15:53:47
【问题描述】:

我知道如何为控制台文本设置颜色

Console.ForegroundColor = ConsoleColor.Cyan;

谁能想到我可以随机化它的方法?它不一定是完全随机的,但差异会有所帮助。

【问题讨论】:

  • 假设问题是“如何随机选择一种已知的控制台颜色”......如果不是,您需要更新您的问题。欢迎同时remove thankyou notes

标签: c# .net colors console-application


【解决方案1】:
private static Random _random = new Random();
private static ConsoleColor GetRandomConsoleColor()
{
    var consoleColors = Enum.GetValues(typeof(ConsoleColor));
    return (ConsoleColor)consoleColors.GetValue(_random.Next(consoleColors.Length));
}

private static void Main(string[] args)
{
    Console.ForegroundColor = GetRandomConsoleColor();
    Console.WriteLine("Hello World!");
}

解决此问题的一种简单而有效的方法是简单地从 ConsoleColor 枚举中选择一个随机值。

【讨论】:

  • +1。请注意,简单的“下一个”颜色也可以满足原始问题:(ConsoleColor)(((int)Console.ForegroundColor + 1) % Enum.GetValues(typeof(ConsoleColor)).Length)
【解决方案2】:
Console.ForegroundColor=(ConsoleColor)r.Next(0,16);
Console.BackgroundColor = (ConsoleColor)r.Next(0,16);

选择两者之一作为背景或文本颜色,您必须将 r 声明为随机:

Random r = new Random();

或者作为一个静态的在main之上。

这是我使用上面的代码编写的一个简单代码的示例:

            while (true)
        {
            Console.ForegroundColor = (ConsoleColor)r.Next(0,16);
            Console.BackgroundColor = (ConsoleColor)r.Next(0,16);
            Console.Write(r.Next(0, 2));
        }

它基本上以不同的文本颜色和背景颜色打印 0 和 1。

【讨论】:

    【解决方案3】:

    你可以使用 (ConsoleColor)(new Random()).Next(0,15) 返回 ConsoleColor 对象。

    它的作用是将一个介于 0 和 15(颜色数量)之间的随机数投射到 ConsoleColor 枚举实例,以便您可以将其直接传递给 ForegroundColor 或 BackgroundColor。

    【讨论】:

      【解决方案4】:
      ConsoleColor getRandomColor()
      {
          return (ConsoleColor)(new Random().Next(Enum.GetNames(typeof(ConsoleColor)).Length)
      }
      

      编辑:正如我的评论者所说,您不应该在每次需要新的随机颜色时都构造 new Random。相反,您应该将Random 保存在某处,并且应该像这样使用它:

      Random rand = new Random();
      ConsoleColor getRandomColor()
      {
          return (ConsoleColor)(rand.Next(Enum.GetNames(typeof(ConsoleColor)).Length);
      }
      

      【讨论】:

      • 连续调用两次将返回相同的颜色,因为Random 将使用相同的时间种子进行初始化。不要每次都做一个新的随机数。
      【解决方案5】:

      这将选择随机颜色。注意_randomRandom 的实例。

      Console.ForegroundColor = (ConsoleColor)_random.Next(15);
      

      【讨论】:

        【解决方案6】:

        给你。

        private static void Main(string[] args)
        {
            Random random = new Random();
        
            var query =
                typeof(ConsoleColor)
                    .GetFields(BindingFlags.Static | BindingFlags.Public)
                    .Select(fieldInfo => (ConsoleColor)fieldInfo.GetValue(null))
                    .ToArray();
        
            Console.BackgroundColor = query.ElementAt(random.Next(query.Length));
        
            Console.WriteLine(Console.BackgroundColor);
        
            Console.Read();
        }
        

        【讨论】:

          猜你喜欢
          • 2014-06-12
          • 2015-08-16
          • 1970-01-01
          • 2014-12-26
          • 1970-01-01
          • 1970-01-01
          • 2017-10-06
          • 2019-10-29
          • 1970-01-01
          相关资源
          最近更新 更多