Как создать предсказуемый случайный поток в иерархии в C #? - PullRequest
0 голосов
/ 31 мая 2019

Я делаю процедурную игру с иерархией.

Таким образом, у объекта A будет 10 детей.

У каждого ребенка будет 10 детей и т. Д.

Теперь предположим,Я хочу дать каждому ребенку случайный цвет и случайную позицию (предположим, что они задаются целыми числами).

Поэтому пусть X будет "ID" объекта.

Пусть COLOR и POSITION будут перечислениями типа PROPERTY.

Затем я хочу сгенерировать случайные целые числа:

int GenerateRandomInteger(PROPERTY P, int childNumber);

Так что я могу использовать:

int N = parentObject.GenerateRandomInteger(COLOUR, 7);

Например.

Есть идеи, как это сделать?

1 Ответ

1 голос
/ 31 мая 2019

В этом случае GetRandomInteger должен быть реализован как хеш-функция . Хеш-функция принимает произвольные данные (здесь значения P и childNumber) и выводит хеш-функцию. Для целей игры:

  • Хеш-функция должна иметь свойство лавин , означающее, что каждый бит ввода влияет на каждый бит хеш-кода.
  • Хорошие хеш-функции здесь включают MurmurHash3 и xxHash.

В этом ответе также предполагается, что childNumber является уникальным для всего приложения, а не уникальным для данного родителя.

Полученный хэш-код может затем использоваться для генерации случайного цвета и позиции (например, первые 24 бита хэш-кода могут быть извлечены и обработаны как цвет RGB с 8 битами на компонент). Но дальнейшие детали того, как это будет работать, будут зависеть от того, какой язык программирования вы используете и какие диапазоны допустимы для цветов и позиций, которые вы не указали в своем вопросе (есть несколько языков, которые используют int s и enum с, например).

...