生成隨機數

儘管 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;