Синхронизация генераторов случайных чисел на двух машинах - PullRequest
1 голос
/ 09 сентября 2010

Можно ли "синхронизировать" (из-за отсутствия лучшего слова) генераторы случайных чисел на двух разных машинах?

Контекст: у меня есть карточная игра для iOS с сетевым мультиплеером. Оба пира должны иметь доступ к колоде карт. Когда колода перетасовывается, я могу сериализовать свой объект колоды с помощью NSCoding и отправить его другому пиру, чтобы колоды были синхронизированы, но я мог бы отправлять меньше данных, если бы мог просто рассчитывать на генераторы случайных чисел на обоих пирах, чтобы генерировать одинаковые случайные числа.

Поскольку это карточная игра, мне нужны лучшие случайные числа, поэтому я предпочитаю использовать arc4random (), которая запускается при первом вызове. Может быть, есть способ посеять его вручную?

Простая отправка объекта колоды карт - это решение ладно , но я планирую реализовать асинхронный мультиплеер с использованием OpenFeint, и для этого мои игровые состояния должны оставаться ниже 16 КБ, и только моя колода карт почти 2K при сериализации. :)

Спасибо!

1 Ответ

0 голосов
/ 09 сентября 2010

Что, если вы только что отправили само случайное число? В зависимости от того, в какое «устройство» оно «повернуло», может быть задано создание и отправка его случайного числа, чтобы все версии могли подтвердить один и тот же розыгрыш. Если вы тщательно следите за тем, чтобы все версии колоды были в одном и том же порядке / картах и ​​не было выброшено случайное число, теоретически это должно работать с очень небольшим объемом передачи данных. Если другой игрок приходит частично, вы можете пометить, какие карты были вытянуты, щелкая отдельные биты в объекте или массиве объектов, и отправить этот объект / массив.

В противном случае, боюсь, я не знаю платформу, но я знаю, что в некоторых других языках добавление начального числа в качестве части вызова приведет к его фиксированному значению (например, arc4random (seed)) Я не знаю, относится ли это к тому, над чем вы работаете, но, вероятно, стоит разобраться.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...