2

同じランダム シードを使用してデッキ内のカードをシャッフルしようとしています。そのため、デッキはランダムになりますが、両方のクライアントで同期されます。次のシャッフル アルゴリズムを使用しています。

    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) になります。

4

2 に答える 2