所以,我正在尝试制作一款需要随机彩色图片盒的游戏。我一直在尝试制作随机颜色生成器,但我遇到了一个我无法解释的问题。
此代码运行时(在Form1_Load事件内):
for(int i=0; i<6, i++)
{
DateTime moment = DateTime::Now;
Random^RNG=gcnew Random(moment.Millisecond);
color[i]=RNG->Next(16);
if(color[i]<=9)
{
colorStr[i]=color[i].ToString();
}
else if(color[i]==10)
{
colorStr[i]="A";
}
else if(color[i]==11)
{
colorStr[i]="B";
}
else if(color[i]==12)
{
colorStr[i]="C";
}
else if(color[i]==13)
{
colorStr[i]="D";
}
else if(color[i]==14)
{
colorStr[i]="E";
}
else if(color[i]==15)
{
colorStr[i]="F";
}
FullColor+=colorStr[i]; //FullColor was initialized with a value of "#";
}
this->textBox1->Text=FullColor;
this->Player->BackColor = System::Drawing::ColorTranslator::FromHTML(FullColor);
文本框显示所有相同的数字(即#000000),或者第一个数字将是唯一的,但其他五个将相互相等(即#A22222)。
答案 0 :(得分:1)
Random
生成器。在循环之前尝试做一次:
Random^RNG=gcnew Random(moment.Millisecond);
for(int i=0; i<6, i++)
{
....
(在你的情况下,似乎顺序调用的moment.Millisecond
是相同的。但即使它不同,也不应该重新创建生成器。)
您可以考虑以下代码而不是循环:
Random^ RNG = gcnew Random(); // somewhere at the beginning
....
int color = RNG->Next(0x1000000);
String^ colorStr = color.ToString("X6");