生成隨機數
儘管 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;