Я использую arc4random для генерации случайного числа. Я генерирую число от 0 до 2. Это идентификатор смены цвета в игровом цикле. Если число равно 1, следующее поколение должно исключить число 1. Как я могу это сделать?
int x = arc4random()%3;
Я использую arc4random для генерации случайного числа. Я генерирую число от 0 до 2. Это идентификатор смены цвета в игровом цикле. Если число равно 1, следующее поколение должно исключить число 1. Как я могу это сделать?
int x = arc4random()%3;
Есть два основных способа сделать это.
Более простой, но потенциально менее эффективный:
int x;
do {
x = arc4random() % 3;
} while (x == 1);
или немного более сложный, но более детерминированный:
int x = arc4random() % 2;
if (x > 0) x++;
Исключить это:
uint32_t identifier = 1; // << the number to exclude
uint32_t NIdentifiers = 1;
uint32_t NNumbers = 3;
uint32_t NPossibleIdentifiers = NNumbers - NIdentifiers;
uint32_t result = arc4random_uniform(NPossibleIdentifiers);
if (identifier == result)
++result;
Примечание: отдавайте предпочтение arc4random_uniform
вместо arc4random
и по модулю.
arc4random_uniform
для генерации случайных чисел от 0 до границы, так как это будет генерировать числа равномерно, а%
- нет. - person James Snook   schedule 13.02.2014