Я пытаюсь перетасовать карты в колоде, используя одно и то же случайное семя, поэтому колоды будут случайными, но синхронизированными на обоих клиентах. Я использую следующий алгоритм перемешивания:
internal void ShuffleDeck(int randomSeed)
{
_random = new Random(randomSeed);
Cards.Card[] toShuffle = CardsInDeck.ToArray();
Shuffle<Cards.Card>(toShuffle);
CardsInDeck = toShuffle.ToList<Cards.Card>();
}
/// <summary>
/// Shuffle the array.
/// </summary>
/// <typeparam name="T">Array element type.</typeparam>
/// <param name="array">Array to shuffle.</param>
private static void Shuffle<T>(T[] array)
{
int n = array.Length;
for (int i = 0; i < n; i++)
{
// NextDouble returns a random number between 0 and 1.
// ... It is equivalent to Math.random() in Java.
int r = i + (int)(_random.NextDouble() * (n - i));
T t = array[r];
array[r] = array[i];
array[i] = t;
}
}
Когда я запускаю два экземпляра карточной игры на одном компьютере, карты перемешиваются и синхронизируются на обоих клиентах, как и ожидалось, но когда я запускаю один экземпляр на своем компьютере, а другой — в эмуляторе HoloLens, карты используют одно и то же начальное число, но карты не синхронизируются. Есть ли способ перетасовать карты и синхронизировать их между несколькими клиентами?
Под синхронизацией я подразумеваю, что они перемешиваются точно так же. IE, когда я запускаю оба клиента в первый раз с четырьмя картами (a,b,c,d), порядок колоды (b,c,a,d) на обоих клиентах. Когда я запускаю клиентов во второй раз, порядок колод (c, d, a, b) на обоих клиентах.