我正在做的突围赛,我想砖头获得一个随机的背景色。 现在我有砖头越来越充斥着所有类型的颜色:红色,绿色,蓝色,黄色,粉色和所有其他人。
蓝色,黄色和绿色的:我想要做虽然只得到随机进行随机三种颜色只能是。
这是我现在有:
private Random rnd = new Random();
Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
bricks[x, y].BackColor = randomColor;
我已经搜索并尝试了很多不同的东西,并没有奏效! 我觉得这可能是简单的事,但不知何故不能真正得到它。 我想到了制作的3种颜色的列表,并尝试随机列表中,但它不工作了!
关于评论:
使用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)];
}
稍微不同的方法来获得不同的色调Red
, Green
和Yellow
的每个元素:
(这也许应该调整了一点点,以避免半灰色)。
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;
}
这是一个随机调色板此方法生成:
免责声明:我是一个新手(对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 )
使用数组来存储所有从哪一个将被拾取的颜色。 接着,一个随机元素从数组调用。
写自己的方法,并调用来代替。 产生如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
你可以把它写的一个扩展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();