同じランダム シードを使用してデッキ内のカードをシャッフルしようとしています。そのため、デッキはランダムになりますが、両方のクライアントで同期されます。次のシャッフル アルゴリズムを使用しています。
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;
}
}
カード ゲームの 2 つのインスタンスを同じマシンで実行すると、両方のクライアントで期待どおりにカードがシャッフルされて同期されますが、1 つのインスタンスを自分のコンピューターで実行し、別のインスタンスを HoloLens エミュレーターで実行すると、カードは同じシードを使用しますが、カードは同期されません。カードをシャッフルして、複数のクライアント間で同期させる方法はありますか?
同期とは、まったく同じ方法でシャッフルされることを意味します。IE で両方のクライアントを 4 枚のカード (a、b、c、d) で初めて実行すると、デッキの順序は両方のクライアントで (b、c、a、d) になります。クライアントを 2 回目に実行すると、両方のクライアントでデッキの順序が (c、d、a、b) になります。