生成随机数
尽管 GameplayKit
(iOS 9 SDK 引入)是关于实现游戏逻辑的,但它也可用于生成随机数,这在应用和游戏中非常有用。
除了在以下章节中使用的 GKRandomSource.sharedRandom
之外,还有另外三种类型的 GKRandomSource
开箱即用。
- GKARC4RandomSource 使用 ARC4 算法
- GKLinearCongruentialRandomSource 这是一个快速但不那么随机的
GKRandomSource
- GKMersenneTwisterRandomSource 实现 MersenneTwister 算法。它更慢但更随机。
在下一章中,我们仅使用 GKRandomSource
的 nextInt()
方法。除此之外还有 nextBool() -> Bool
和 nextUniform() -> 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
可用于改变分布行为,如 GKGaussianDistribution
或 GKShuffledDistribution
。
之后,该对象可以像每个常规的 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;