iOS Générer des nombres aléatoires


Exemple

Bien que GameplayKit (introduit avec iOS 9 SDK) concerne l'implémentation de la logique de jeu, il peut également être utilisé pour générer des nombres aléatoires, ce qui est très utile dans les applications et les jeux.

Outre le GKRandomSource.sharedRandom utilisé dans les chapitres suivants, il existe trois types supplémentaires de GKRandomSource .

  • GKARC4RandomSource qui utilise l'algorithme ARC4
  • GKLinearCongruentialRandomSource Ce qui est un moyen rapide mais pas si aléatoire GKRandomSource
  • GKMersenneTwisterRandomSource qui implémente un algorithme MersenneTwister. C'est plus lent mais plus aléatoire.

Dans le chapitre suivant, nous utilisons uniquement la méthode nextInt() d'un GKRandomSource . En plus de cela, il y a le nextBool() -> Bool et le nextUniform() -> Float

Génération

Tout d'abord, importez GameplayKit :

Rapide

import GameplayKit

Objectif c

#import <GameplayKit/GameplayKit.h>

Ensuite, pour générer un nombre aléatoire, utilisez ce code:

Rapide

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

Objectif c

int randomNumber = [[GKRandomSource sharedRandom] nextInt];

Remarque

La fonction nextInt (), lorsqu'elle est utilisée sans paramètres, renverra un nombre aléatoire compris entre -2 147 483 648 et 2 147 483 647, y compris eux-mêmes. Nous ne sommes donc pas certains qu'il s'agisse toujours d'un nombre positif ou non nul.

Générer un nombre de 0 à n

Pour ce faire, vous devez donner la méthode n à nextIntWithUpperBound() :

Rapide

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

Objectif c

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

Ce code nous donnera un numéro entre 0 et 10, y compris eux-mêmes.

Générer un nombre de m à n

Pour ce faire, créez un objet GKRandomDistribution avec un GKRandomSource et transmettez-le dans les limites. Un GKRandomDistribution peut être utilisé pour modifier le comportement de distribution comme GKGaussianDistribution ou GKShuffledDistribution .

Après cela, l'objet peut être utilisé comme tous les GKRandomSource ordinaires, car il implémente également le protocole GKRandom .

Rapide

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

Objective-C obsolète

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

Par exemple, pour générer un nombre aléatoire compris entre 3 et 10, vous utilisez ce code:

Rapide

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

Objective-C obsolète

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