不解!
用多线程做了一个类似赛跑的小游戏。
使4个image作直线运动。
其中每次循环用random(2)来确定前进的距离。
但是奇怪的是结果至少有95%的机率是1号image得第四名。而且经常都是其它三个到了终点,1号还没走一半的距离。
后来我把循环的速度放得很慢,就是在每次循环中加了for j:=0 to 1000000 do begin end;这样的空循环。这样四个的速度就比较平均了,出来的结果也比较随机。这是什么原因?
书上有说多线程在windows95上进行的话效益会明显降低。我现在的系统是winme,是不是跟这个有关系?
用多线程做了一个类似赛跑的小游戏。
使4个image作直线运动。
其中每次循环用random(2)来确定前进的距离。
但是奇怪的是结果至少有95%的机率是1号image得第四名。而且经常都是其它三个到了终点,1号还没走一半的距离。
后来我把循环的速度放得很慢,就是在每次循环中加了for j:=0 to 1000000 do begin end;这样的空循环。这样四个的速度就比较平均了,出来的结果也比较随机。这是什么原因?
书上有说多线程在windows95上进行的话效益会明显降低。我现在的系统是winme,是不是跟这个有关系?
我是用这样的让image动的
form1.Image2.Left:=form1.Image2.Left+random(2)
随机函数从这个种子开始产生随机数
通常Randomize会调用系统时间来进行初始化
如果不调用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。