Ich versuche, Karten in einem Deck mit demselben Zufallssamen zu mischen, so dass die Decks zufällig sind, aber auf beiden Clients synchronisiert werden. Ich verwende den folgenden Shuffle-Algorithmus:Wie verwende ich den gleichen Random Seed zwischen Windows-Geräten?
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;
}
}
Als ich zwei Instanzen meiner Kartenspiel auf der gleichen Maschine laufen, werden die Karten neu gemischt und auf beiden Clients synchronisiert, wie erwartet, aber wenn ich laufe eine Instanz auf meinem Computer und eine andere in einem HoloLens-Emulator, die Karten verwenden den gleichen Samen, aber Karten werden nicht synchronisiert. Gibt es die Karten trotzdem zu mischen und sie über mehrere Clients synchronisieren zu lassen?
Von Synced, ich meine, sie sind genau auf die gleiche Weise gemischt. IE wenn ich beide Clients das erste Mal mit vier Karten (a, b, c, d) betreibe, ist die Deckreihenfolge (b, c, a, d) auf beiden Clients. Wenn ich die Clients das zweite Mal ausführen, ist die Deckreihenfolge auf beiden Clients (c, d, a, b).
Wenn Sie einen Mersenne Twister verwenden, können Sie einfach den aktuellen Seed teilen und beide würden die gleiche Folge von Werten erzeugen. BTW, das ist ein unvollkommener Shuffler. – Plutonix
@Plutonix Was ist ein unvollständiger Shuffler? Ist ein Mersenne Twister in C# eingebaut? –
Es ist fehlerhaft - es sollte jeden Gegenstand einmal und nur einmal bewegen, indem man es nicht berücksichtigt, wenn nachfolgende Gegenstände bewegt werden. – Plutonix