种子随机数Objective-C

时间:2015-06-10 19:23:03

标签: ios objective-c random

我正在使用Xcode 6中的游戏,每次2个特定对象相互接触时需要生成一个新的随机数。我已经尝试在我的应用程序开始时使用srand(),但似乎值保持不变,就好像每次对象碰撞时都没有播种新值。

这是代码

if((CGRectIntersectsRect(Stickman.frame, Box1.frame))) {
    xRan = arc4random()%11;

  if(xRan<=3){
        Spike1 = true;
        [self SpikeCall];
    }

    //Gold
    if (xRan==10) {
            G1 = true;
    }

Box1.center = CGPointMake(0,278);
Box1SideMovement = 5;      
}

问题是,当Stickman击中Box1后,当它返回到屏幕上时,它仍然在xRan中保持相同的值,除了在1-3之间的某些情况下它会使Spike1成为真。我希望每次Box1与Stickman相交时,xRan会在1-10之间播种一个新的数字,这样G1就有十分之一的机会成为真正的&amp;如果xRan是1-3,它将使Spike1成为真。

1 个答案:

答案 0 :(得分:1)

这不仅仅是一个评论而是一个答案,但评论的时间太长了。

您的方法存在一些问题。首先,srand不会为arc4random函数设定种子。它为rand函数提供种子,这是一个不同的伪随机数生成器,其属性比arc4random稍差。 arc4random没有明确的种子功能。其次,如果您想要1到10之间的随机数,则不应使用% 11方法。这给你一个0到10之间的随机数(我认为你不想要零),但它也可能不会给你一个统一的分布。即使arc4random擅长在整个范围内提供均匀分布,也可能无法提供最低有效位的均匀分布。

我建议你使用类似的东西:

arc4random_uniform(10) + 1

arc4random_uniform(10)将返回0到9之间的数字,并且可以很好地在该范围内提供均匀分布。 +1只是改变你的间隔,所以你得到1到10而不是0到9之间的数字。