不解!

merkey2002 2003-08-29 08:29:14
不解!
用多线程做了一个类似赛跑的小游戏。
使4个image作直线运动。
其中每次循环用random(2)来确定前进的距离。
但是奇怪的是结果至少有95%的机率是1号image得第四名。而且经常都是其它三个到了终点,1号还没走一半的距离。
后来我把循环的速度放得很慢,就是在每次循环中加了for j:=0 to 1000000 do begin end;这样的空循环。这样四个的速度就比较平均了,出来的结果也比较随机。

这是什么原因?
书上有说多线程在windows95上进行的话效益会明显降低。我现在的系统是winme,是不是跟这个有关系?
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
merkey2002 2003-08-30
  • 打赏
  • 举报
回复
randomize;
form1.Image2.Left:=form1.Image2.Left+random(2)

是这样用吗?
可是结果还是一样。
而且我上面有说过,循环的速度放得很慢的时候,就是在每次循环中多加了for j:=0 to 1000000 do begin end;这样的空循环。使程序运行慢了下来。这样出来的结果就比较随机了。
还有一点,如果上面的空循环比较小的话,比如for j:=0 to 1000 do begin end;或者干脆不用的话。出现的结果几乎都是,4,1,2,3。
编程老猫 2003-08-29
  • 打赏
  • 举报
回复
Randomize用于产生一个随机种子
随机函数从这个种子开始产生随机数
通常Randomize会调用系统时间来进行初始化
如果不调用Randomize的话,没次随机种子将会保持不变
这便是你程序结果的原因
merkey2002 2003-08-29
  • 打赏
  • 举报
回复
用randomize ?这个怎么用?我刚学delphi不太懂
我是用这样的让image动的
form1.Image2.Left:=form1.Image2.Left+random(2)
snowolf_ren 2003-08-29
  • 打赏
  • 举报
回复
up
timgreen 2003-08-29
  • 打赏
  • 举报
回复
你每次用random前先randomize可能会好一些
vuen 2003-08-29
  • 打赏
  • 举报
回复
你在调用random之前调了Randomize没有?
vuen 2003-08-29
  • 打赏
  • 举报
回复
你在调用random之前调用了Randomize没有?

5,386

社区成员

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

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