Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 随机化3种颜色_C#_Winforms_Random_Colors - Fatal编程技术网

C# 随机化3种颜色

C# 随机化3种颜色,c#,winforms,random,colors,C#,Winforms,Random,Colors,我正在做一个突破游戏,我想让砖块得到一个随机的背景色。 现在,我的砖块被各种颜色填满:红色、绿色、蓝色、黄色、粉色和其他所有颜色 我想做的只是随机地将三种颜色随机排列:蓝色、黄色和绿色 这就是我现在拥有的: private Random rnd = new Random(); Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); bricks[x, y].BackColor = ran

我正在做一个突破游戏,我想让砖块得到一个随机的背景色。 现在,我的砖块被各种颜色填满:红色、绿色、蓝色、黄色、粉色和其他所有颜色

我想做的只是随机地将三种颜色随机排列:蓝色、黄色和绿色

这就是我现在拥有的:

private Random rnd = new Random();

Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));

bricks[x, y].BackColor = randomColor;

我已经搜索和尝试了许多不同的东西,但没有任何效果!我觉得这样做可能很简单,但不知何故却无法真正做到。我想把这3种颜色列成一个单子,然后试着把它随机化,但没有成功

编写自己的方法并调用它。生成一个随机数,例如0,1,2,并使用开关返回正确的颜色。例如:

Color randomColor;
int random = rnd.Next(3)
  switch (random)
  {
      //red
      case 1:
          randomColor = Color.FromArgb(255, 0, 0);
          break;
      //green
      case 2:
          randomColor = Color.FromArgb(0, 255, 0);
          break;
      //blue
      default:
          randomColor = Color.FromArgb(0, 0, 255);
          break;
  }

编写自己的方法并调用它。生成一个随机数,例如0,1,2,并使用开关返回正确的颜色。例如:

Color randomColor;
int random = rnd.Next(3)
  switch (random)
  {
      //red
      case 1:
          randomColor = Color.FromArgb(255, 0, 0);
          break;
      //green
      case 2:
          randomColor = Color.FromArgb(0, 255, 0);
          break;
      //blue
      default:
          randomColor = Color.FromArgb(0, 0, 255);
          break;
  }

为什么不把你选择的3种颜色映射到数字{0,1,2},然后做一个简单的switch语句呢

int color;
color = rnd.Next(3);
switch(color) {
case 0:
    // do something here for the first color
    break;
case 1:
    // do something.. you get the idea
    break;
case 2:
    break;
}
然后希望C#中的随机性对你的游戏来说足够好;)


编辑:该死,太晚了:D

为什么不把你选择的3种颜色映射到数字{0,1,2},然后做一个简单的切换语句

int color;
color = rnd.Next(3);
switch(color) {
case 0:
    // do something here for the first color
    break;
case 1:
    // do something.. you get the idea
    break;
case 2:
    break;
}
然后希望C#中的随机性对你的游戏来说足够好;)

编辑:该死,太晚了:D

免责声明:我是个新手(对C来说)

(建议进行colorArr.Length编辑)

使用数组存储将从中拾取的所有颜色。接下来,从数组中调用一个随机元素。

免责声明:我是一个新手(对于C#)

(建议进行colorArr.Length编辑)

使用数组存储将从中拾取的所有颜色。接下来,从数组中调用一个随机元素。

关于注释:
Thread.Sleep()
的使用只是一个示例,用于测试在闭环中使用的
Random
类的本地实例的结果。
您可能会得到一系列相同的结果。或所有相同的值。

在这里,作为测试,我在返回随机颜色时插入一个小暂停(1ms),因此每次都会使用不同的种子(几乎)选择颜色。不停顿地测试它。

使用Random类的单个实例的默认实现可以产生类似的结果。

private Color[] Colors = { Color.Red, Color.Yellow, Color.Green};

private Color GetColor()
{
    Random random = new Random(DateTime.Now.Millisecond);
    Thread.Sleep(1);
    return Colors[random.Next(0,3)];
}
在不使用
线程的情况下测试它。Sleep()
暂停:

for (int i = 0; i < 100; i++)
{
    Console.WriteLine(GetColor().Name);
}
为每个元素获得不同深浅的
红色
绿色
黄色
的方法略有不同:
(可能应该稍微调整一下以避免半灰色)。

这是此方法生成的随机调色板:


关于评论:
Thread.Sleep()
的使用只是一个示例,用于测试在闭环中使用的
Random
类的本地实例的结果。
您可能会得到一系列相同的结果。或所有相同的值。

在这里,作为测试,我在返回随机颜色时插入一个小暂停(1ms),因此每次都会使用不同的种子(几乎)选择颜色。不停顿地测试它。

使用Random类的单个实例的默认实现可以产生类似的结果。

private Color[] Colors = { Color.Red, Color.Yellow, Color.Green};

private Color GetColor()
{
    Random random = new Random(DateTime.Now.Millisecond);
    Thread.Sleep(1);
    return Colors[random.Next(0,3)];
}
在不使用
线程的情况下测试它。Sleep()
暂停:

for (int i = 0; i < 100; i++)
{
    Console.WriteLine(GetColor().Name);
}
为每个元素获得不同深浅的
红色
绿色
黄色
的方法略有不同:
(可能应该稍微调整一下以避免半灰色)。

这是此方法生成的随机调色板:



您可以将其作为
Color

public static class ColorExtensions
{
    private static Color[] rgb = 
        {Color.FromArgb(0, 0, 255), Color.FromArgb(255, 255, 0), Color.FromArgb(0, 255, 0)};
    private static Random random = new Random();
    public static Color GetRandomRgb(this Color color)
    {
        return rgb[random.Next(rgb.Length)];
    }
}
但是,这意味着您必须使用
Color
的实例调用它,例如

var colour = new Color().GetRandomRgb();
Color
是一个密封的类(意味着我们不能从中继承),您可能需要这样做

public static Color GetRandomRgb()
{
    return rgb[random.Next(rgb.Length)];
}
你可以用它打电话

var colour = ColorExtensions.GetRandomRgb();

您可以将其作为
Color

public static class ColorExtensions
{
    private static Color[] rgb = 
        {Color.FromArgb(0, 0, 255), Color.FromArgb(255, 255, 0), Color.FromArgb(0, 255, 0)};
    private static Random random = new Random();
    public static Color GetRandomRgb(this Color color)
    {
        return rgb[random.Next(rgb.Length)];
    }
}
但是,这意味着您必须使用
Color
的实例调用它,例如

var colour = new Color().GetRandomRgb();
Color
是一个密封的类(意味着我们不能从中继承),您可能需要这样做

public static Color GetRandomRgb()
{
    return rgb[random.Next(rgb.Length)];
}
你可以用它打电话

var colour = ColorExtensions.GetRandomRgb();

如果您使用
rnd.Next(colorArr.Length)
,则在添加或删除颜色时无需考虑它。如果您使用
rnd.Next(colorArr.Length)
,则在添加或删除颜色时无需考虑它。或者整个应用程序都有一个随机性源…--顺便说一句,
newrandom(DateTime.Now.millis秒)
理论上比不指定种子差一万倍。没有给定的种子
环境。使用TickCount
。看见还有虽然你通常只看到100到200个刻度之间的“跳跃”。@Corak,正如我所说,这只是一个例子。但是你可以在没有种子的情况下进行随机测试,可以暂停,也可以不暂停,看看结果如何。我知道在一个闭环中创建一个新的
Random
实例是不好的。也因为你所说的原因。但你的结论是,使用毫秒会让它变得更好,这是错误的。在您的示例中,使它更好的是
Thread.Sleep(1)
但是(正如您所说的),如果您需要大量的随机值,这将破坏性能。例如,最好有一个
static Random Random=new Random()并使用该方法的频率和速度。如果需要随机数,
Random
类是非常好的。它在图像上不安全,但这里不需要这种安全。同样,获得“一次又一次相同值”的问题仅仅是因为大量的
随机
实例是在一个闭环中创建的。如果只处理一个实例,就不会有这个问题。试试这个:
public静态类RandomTest{private static Random Random=new Random();public