Ich habe ein auf Runden basierendes Multiplayer-Spiel für Android, das bisher über XMPP funktioniert hat, und ich möchte zu Google Play Game Services wechseln. In der alten Version gab es einen XMPP-Bot, der entschied, welcher Spieler Spieler 1 oder 2 sein wird. Dies ist wichtig, um zu wissen, welcher Spieler den ersten Zug machen sollte.
Mit Google Play Game Services habe ich eine Lösung gefunden, die fast funktioniert:
%Vor%Dieser Weg funktioniert gut, wenn Sie einen anderen Spieler einladen. Es schlägt jedoch oft fehl, wenn beide Spieler die automatische Anpassung auswählen. In diesem Fall befinden sich beide Spieler in der ArrayList der Teilnehmer an derselben Position. Daher werden beide auf dem aktuell verwendeten Gerät als derselbe Spieler angezeigt.
Was ist der richtige Weg, um Spieler 1 und 2 auszuwählen, ohne eine zentrale Instanz, um dies zu entscheiden? Gibt es nützliche Daten in der Teilnehmerliste, die ich nicht mit dem Debugger gefunden habe?
Dies ist ein Standardproblem bei der Auswahl eines Leiters aus einem Haufen nicht organisierter Knoten. Es gibt einige ziemlich fortgeschrittene Wege, um das zu tun, da bin ich mir sicher. Wenn Sie auschecken möchten: Automatische Auswahl eines Führers in einem Cluster von Knoten und dem Paxos-Algorithmus.
Nun ... das heißt, da Sie eine Grenze von 4 Personen haben, gibt es einfachere Möglichkeiten, es zu tun. Sie können ihre IDs einfach als Zahl behandeln und wer die höchste ID hat, ist Spieler 1 und absteigend. Das wäre wahrscheinlich der einfachste Weg.
Sie könnten auch alle Spieler einen zufälligen Wurf und eine breite Besetzung abgeben lassen. Im extrem seltenen Fall eines Duplikats können Sie eine Neuauflage durchführen. Sobald alle ihre Rollen erstellt haben und jeder die gleichen Daten hat, kann jeder einzelne Spieler die Spielerreihenfolge basierend auf dem Wert der Rollen bestimmen.
Ich würde jedoch nichts mit der Reihenfolge im Array tun. Ich glaube nicht, dass das unter allen Umständen garantiert ist.
Tags und Links android google-play-games