生成随机数

尽管 GameplayKit(iOS 9 SDK 引入)是关于实现游戏逻辑的,但它也可用于生成随机数,这在应用和游戏中非常有用。

除了在以下章节中使用的 GKRandomSource.sharedRandom 之外,还有另外三种类型的 GKRandomSource 开箱即用。

  • GKARC4RandomSource 使用 ARC4 算法
  • GKLinearCongruentialRandomSource 这是一个快速但不那么随机的 GKRandomSource
  • GKMersenneTwisterRandomSource 实现 MersenneTwister 算法。它更慢但更随机。

在下一章中,我们仅使用 GKRandomSourcenextInt() 方法。除此之外还有 nextBool() -> BoolnextUniform() -> Float

一,导入 GameplayKit

迅速

import GameplayKit

Objective-C

#import <GameplayKit/GameplayKit.h>

然后,要生成随机数,请使用以下代码:

迅速

let randomNumber = GKRandomSource.sharedRandom().nextInt()

Objective-C

int randomNumber = [[GKRandomSource sharedRandom] nextInt];

注意

nextInt() 函数在没有参数的情况下使用时,将返回 -2,147,483,648 和 2,147,483,647 之间的随机数,包括它们自己,所以我们不确定它是一个正数还是非零数。

生成从 0 到 n 的数字

要实现这一点,你应该给 nextIntWithUpperBound() 方法:

迅速

let randomNumber = GKRandomSource.sharedRandom().nextInt(upperBound: 10)

Objective-C

int randomNumber = [[GKRandomSource sharedRandom] nextIntWithUpperBound: 10];

此代码将为我们提供 0 到 10 之间的数字,包括它们自己。

生成从 m 到 n 的数字

为此,你可以使用 GKRandomSource 创建一个 GKRandomDistribution 对象并传入边界。GKRandomDistribution 可用于改变分布行为,如 GKGaussianDistributionGKShuffledDistribution

之后,该对象可以像每个常规的 GKRandomSource 一样使用,因为它也实现了 GKRandom 协议。

迅速

let randomizer = GKRandomDistribution(randomSource: GKRandomSource(), lowestValue: 0, highestValue: 6)
let randomNumberInBounds = randomizer.nextInt()

Objective-C 已过时

int randomNumber = [[GKRandomSource sharedRandom] nextIntWithUpperBound: n - m] + m;

例如,要生成 3 到 10 之间的随机数,请使用以下代码:

迅速

let randomNumber = GKRandomSource.sharedRandom().nextInt(upperBound: 7) + 3

Objective-C 已过时

int randomNumber = [[GKRandomSource sharedRandom] nextIntWithUpperBound: 7] + 3;