Криптографически неверные PRNG, такие как rand()
, работают путем подачи предыдущего результата обратно в определенную математическую процедуру.
Чтобы продолжить последовательность с того места, где он был остановлен, все, что вам нужно сделать, это сохранить последнийсгенерированное число и использовать его в качестве начального числа:
srand(time(0));
int player1_rand_num = rand();
NSLog(@"Player 1: %d, %d, %d", rand(), rand(), rand());
srand(7);
int player2_rand_num = rand();
NSLog(@"Player 2: %d, %d, %d", rand(), rand(), rand());
// Re-seed Player 1 sequence
srand(player1_rand_num);
// Displays the same "random" numbers as the first NSLog
NSLog(@"Player 1 again: %ld, %ld, %ld", rand(), rand(), rand());
// and so on...
Функция random()
генерирует лучшие случайные числа и имеет отдельную пару функций initstate()
и setstate()
, которые предоставят вам состояниегенератора.Вы можете сохранить состояние и передать его в setstate()
, чтобы возобновить последовательность, с которой вы остановились.Я направляю вас на man 3 random
для деталей.