随机三个色(Randomize 3 Colors)

2019-09-27 17:18发布

我正在做的突围赛,我想砖头获得一个随机的背景色。 现在我有砖头越来越充斥着所有类型的颜色:红色,绿色,蓝色,黄色,粉色和所有其他人。

蓝色,黄色和绿色的:我想要做虽然只得到随机进行随机三种颜色只能是。

这是我现在有:

private Random rnd = new Random();

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

bricks[x, y].BackColor = randomColor;

我已经搜索并尝试了很多不同的东西,并没有奏效! 我觉得这可能是简单的事,但不知何故不能真正得到它。 我想到了制作的3种颜色的列表,并尝试随机列表中,但它不工作了!

Answer 1:

关于评论:
使用Thread.Sleep()是只是为了测试的本地实例的结果的示例Random在闭环中使用时类。
你会,大概,获得系列相同的结果。 或者所有相同的值。

在这里,作为测试,我返回随机颜色时,所以颜色将使用不同的种子(几乎)每次被选择插入一个小的停顿(1毫秒)。 测试没有停顿。

默认实现,使用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)];
}

测试它没有Thread.Sleep()暂停:

for (int i = 0; i < 100; i++)
{
    Console.WriteLine(GetColor().Name);
}

或者,使用一个实例:

private Random random = new Random();

private Color GetColor()
{
    return Colors[random.Next(0,3)];
}

稍微不同的方法来获得不同的色调RedGreenYellow的每个元素:
(这也许应该调整了一点点,以避免半灰色)。

private Color GetColor2()
{
    Color color = Colors[random.Next(0, 3)];
    switch (color.Name)
    {
        case "Yellow":
            color = Color.FromArgb((160 + random.Next(0, 96)), (160 + random.Next(0, 96)), 0);
            break;
        case "Red":
            color = Color.FromArgb((160 + random.Next(0, 96)), 0, 0);
            break;
        case "Green":
            color = Color.FromArgb(0, (160 + random.Next(0, 96)), 0);
            break;
    }
    return color;
}

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




Answer 2:

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

private Random rnd = new Random();
Color[] colorArr = {Color.FromArgb(0, 0, 255), Color.FromArgb(255, 255, 0), Color.FromArgb(0, 255, 0)};
bricks[x, y].BackColor = colorArr[rnd.Next(colorArr.Length)];

(通过建议colorArr.Length编辑Corak )

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



Answer 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;
  }


Answer 4:

为什么不映射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



Answer 5:

你可以把它写的一个扩展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();


文章来源: Randomize 3 Colors