随机数怎么不那么随机啊??

huabihan 2004-10-27 01:31:16
TColor __fastcall TForm1::SwitchColor(void)
{int i;
randomize();
i=random(12);
switch (i)
{case 0:
return clNone;
break;
case 1:
return clBlue;
break;
case 2:
return clCream;
break;
case 3:
return clMaroon;
break;
case 4:
return clGray;
break;
case 5:
return clNavy;
break;
case 6:
return clPurple;
break;
case 7:
return clBlue;
break;
case 8:
return clSilver;
break;
case 9:
return clRed;
break;
case 10:
return clYellow;
break;
case 11:
return clWhite;
break;
default: return clTeal;
}
}

void __fastcall TForm1::brush(TColor &color,int ALeft, int ATop, int ARight,
int ABottom)
{
TCanvas* c=new TCanvas();
c->Handle=GetDC(0);
try{
c->Brush->Color=color;
c->FillRect(Rect(ALeft,ATop,ARight,ABottom));
}
__finally
{
delete c;
}

}

画图调用 brush(SwitchColor(),0,0,ScreenWidth,200);
brush(SwitchColor(),0,300,ScreenWidth,400);
两次的颜色总是一样???为什么会出现这种情况??这个函数执行使在Timer1Timer事件产生的。
...全文
141 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huabihan 2004-10-27
  • 打赏
  • 举报
回复
谢谢各位, 在randomize和srand都在程序开始时候初始化就好了~!!!结贴~!
max_g 2004-10-27
  • 打赏
  • 举报
回复
给你一个投两个骰子的随机化程序
每次输入不同种子
就会得到不同的点数

// Fig. 3.9: fig0309.cpp
// Randomizing die-rolling program
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>

int main( )
{
unsigned seed;

cout << "Enter seed:";
cin >> seed;
srand(seed);

for ( int i = 1; i <= 10; i++ ) {
cout << setw( 10 ) << 1 + rand( ) % 6;

if ( i % 5 == 0 )
cout << endl;
}

return 0;
}
max_g 2004-10-27
  • 打赏
  • 举报
回复
是啊要置种子
这只是伪随机数而已吧。
随机化(randomizing),是用标准库函数srand完成的,
srand函数取一个unsigned类型的整数参数并内嵌rand函数(即种子),
就可以在每次执行程序时产生不同的随机数系列。
我不懂电脑 2004-10-27
  • 打赏
  • 举报
回复
要置随机总子srand rand
milkwayhong 2004-10-27
  • 打赏
  • 举报
回复
因为你每次都randomize();
相同的几率就大了
constantine 2004-10-27
  • 打赏
  • 举报
回复
☆☆
netsys2 2004-10-27
  • 打赏
  • 举报
回复
你不要每次进TIMER都调用randomize();

程序初始化时弄一次就可以!

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧