2014-09-27 2 views
0

그래서 무작위로 색칠 된 그림 상자가 필요한 게임을 만들려고합니다. 랜덤 컬러 생성기를 만들려고 시도했지만 설명 할 수없는 문제가 발생했습니다.루프 내에서 두 번째 인터럽트 이후 동일한 번호를 부여하는 RNG

이 코드 (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

귀하의 거대한 경우 - 다른 체인은 16 진수 문자열로 숫자에서 간단한 변환을 교체 할 수 있습니다. – chris

답변

1

Random 생성기를 매번 다시 만들어서는 안됩니다. 루프 전에 한번 해보려고 :

Random^RNG=gcnew Random(moment.Millisecond); 
for(int i=0; i<6, i++) 
{ 
    .... 

(귀하의 경우에는, moment.Millisecond가 연속 통화와 동일한 것 같습니다 그러나 다른 것입니다 경우에도 발전기가 다시 할 생각되지 않습니다. . -created) 대신 루프의


, 다음 코드를 고려할 수 있습니다 :

Random^ RNG = gcnew Random(); // somewhere at the beginning 
.... 
int color = RNG->Next(0x1000000); 
String^ colorStr = color.ToString("X6"); 
+0

아 ... 고쳐, 고마워! – TheMohawkNinja

+0

@ TheMohawkNinja 전체 루프와 수동 '10-> A'포맷이 필요하지 않을 수도 있습니다. 게시물을 제안서로 업데이트했습니다. – AlexD