iOS Generare numeri casuali


Esempio

Anche se GameplayKit (introdotto con iOS 9 SDK) riguarda l'implementazione della logica di gioco, potrebbe anche essere utilizzato per generare numeri casuali, il che è molto utile in app e giochi.

Oltre al GKRandomSource.sharedRandom che viene utilizzato nei seguenti capitoli ci sono tre tipi aggiuntivi di GKRandomSource 'out of the box.

  • GKARC4RandomSource Che utilizza l'algoritmo ARC4
  • GKLinearCongruentialRandomSource Che è un veloce ma non così casuale GKRandomSource
  • GKMersenneTwisterRandomSource Che implementa un algoritmo MersenneTwister. È più lento ma più casuale.

Nel capitolo seguente usiamo solo il metodo nextInt() di GKRandomSource . In aggiunta a questo c'è il nextBool() -> Bool e il nextUniform() -> Float

Generazione

Innanzitutto, importa GameplayKit :

veloce

import GameplayKit

Objective-C

#import <GameplayKit/GameplayKit.h>

Quindi, per generare un numero casuale, utilizzare questo codice:

veloce

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

Objective-C

int randomNumber = [[GKRandomSource sharedRandom] nextInt];

Nota

La funzione nextInt (), se usata senza parametri, restituirà un numero casuale compreso tra -2,147,483,648 e 2.147.483.647, inclusi se stessi, quindi non siamo sicuri che sia sempre un numero positivo o diverso da zero.

Generando un numero da 0 a n

Per ottenere ciò, devi dare n al metodo nextIntWithUpperBound() :

veloce

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

Objective-C

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

Questo codice ci darà un numero compreso tra 0 e 10, inclusi se stessi.

Generare un numero da m a n

Per fare questo si crea un oggetto GKRandomDistribution con un GKRandomSource e si passa ai limiti. Una GKRandomDistribution può essere utilizzata per modificare il comportamento di distribuzione come GKGaussianDistribution o GKShuffledDistribution .

Successivamente l'oggetto può essere utilizzato come ogni normale GKRandomSource poiché implementa anche il protocollo GKRandom .

veloce

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

Obiettivo-C obsoleto

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

Ad esempio, per generare un numero casuale compreso tra 3 e 10, si utilizza questo codice:

veloce

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

Obiettivo-C obsoleto

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