Wie erstelle ich eindeutige Spiel-IDs, die auch benutzerfreundlich sind, sodass ein Benutzer diese Spiel-ID problemlos an eine andere Person weitergeben kann, um am Spiel teilzunehmen?
Ich erstelle mein Spiel in Silverlight mit C #.
Wie erstelle ich eindeutige Spiel-IDs, die auch benutzerfreundlich sind, sodass ein Benutzer diese Spiel-ID problemlos an eine andere Person weitergeben kann, um am Spiel teilzunehmen?
Ich erstelle mein Spiel in Silverlight mit C #.
Antworten:
Wenn Sie eine maßgebliche Quelle haben, ist dieses Problem einfach (was ich annehme, wenn der Benutzer eine ID eingibt, um eine Verbindung zu einem Spiel herzustellen, wird diese über einen zentralen Server umgeleitet). Verwenden Sie einfach einen Algorithmus wie http://www.safepasswd.com/ , um UIDs zu erstellen, die im Grunde Wörterbuchwörter + kleine Zahlen sind. Wenn die Anzahl der Server relativ gering ist, können Sie sogar einen naiven Algorithmus verwenden, der nur etwas Zufälliges auswählt, bis es derzeit nicht verwendet wird.
Wenn Sie möchten, dass Ihre Clients die Quelle der UIDs sind, müssen Sie den benutzerfreundlichen Teil dieser IDs wegwerfen. Auf der Codierungsseite ist dies jedoch einfacher, da Sie nur System.Guid.NewGuid (). ToString () verwenden würden. Das ist in jeder Hinsicht garantiert 100% der Zeit einzigartig. Quelle
Andererseits sind GUIDs ein wenig übertrieben. Es wäre einfacher, sich IPs oder Benutzernamen zu merken. B.
Ein Ansatz wäre, ein Wörterbuch zu verwenden und Wörter basierend auf einem Nummerierungsschema auszuwählen. Verwenden Sie möglicherweise eine eindeutige 32-Bit-Ganzzahl, um jeden Benutzer zu identifizieren, und indizieren Sie für jedes der 16-Bit-Wörter ein Wörterbuch (Array von Wörtern). Auf diese Weise können Sie ihre ID mit tatsächlichen Wörtern darstellen, und jeder Bezeichner wäre eindeutig.
Ein anderer Ansatz wäre, etwas Ähnliches zu implementieren, wie es Steam verwendet: Ermöglichen Sie Benutzern, sich mit einer von ihnen selbst gewählten ID anzumelden, und lassen Sie sie später eine beliebige Anzeige-ID angeben. Zum Beispiel könnte ihre Login-ID ihre E-Mail-Adresse und ihr Anzeigename ihr Vorname sein. Auf diese Weise kann der Benutzer seine eindeutige Kennung teilen, aber auch durch einen Namen seiner Wahl identifiziert werden.
Die Antwort von FuzzYspo0N in den Kommentaren ist sehr gut. Grundsätzlich läuft dieses Problem darauf hinaus, Spiel-IDs so eindeutig zu machen, dass Kollisionen vermieden werden, ohne sie willkürlich komplex zu machen. Standardmäßige 128-Bit-GUIDs erhalten ihre Eindeutigkeit, indem sie lokale Informationen (wie Ihren MAC und andere Faktoren) verwenden, um die Wahrscheinlichkeit einer Kollision zwischen Maschinen sehr gering zu machen. Fügen Sie dann einen zufälligen und zeitbasierten Faktor hinzu, um die Wahrscheinlichkeit einer Kollision innerhalb dieser Maschine zu bestimmen sehr klein.
Sie können dieselbe Strategie verfolgen, um Ihre eigenen IDs zu generieren. Beginnen Sie mit etwas, das für den Benutzer einprägsam, aber relativ eindeutig ist (wenn der Benutzer einen globalen Benutzernamen hat, der ein guter Start ist, oder den Computernamen / die IP), und fügen Sie weitere Faktoren hinzu, bis Sie etwas Einzigartiges generiert haben. Indem Sie einen lokalen Namen wie den Computernamen auswählen, beschränken Sie die Anzahl möglicher Kollisionen so weit, dass Sie mit der Abfrage beginnen können, falls vorhanden. Wenn Sie es beispielsweise nur auf diesen Benutzer oder nur auf diesen Computer beschränkt haben, wissen Sie genau, wohin Sie gehen müssen, um zu überprüfen, ob diese UID bereits verwendet wird oder nicht.
Wenn ich beispielsweise weiß, dass mein Benutzername systemweit eindeutig ist, ist MrCranky: 1 eine gültige UID. Wenn ich überprüfen kann, ob MrCranky: 1 bereits verwendet wird (mit einer anderen Methode), kann ich einfach weiter Zahlen versuchen, bis ich eine eindeutige finde.
Durch die Verwendung eines anderen Faktors (wie Zufälligkeit oder Zeit) kann ich die Wahrscheinlichkeit erhöhen, dass ich beim ersten Mal eine nicht verwendete ID auswähle. Wenn Sie beispielsweise wissen, dass Sie nicht mehr als eine Sitzung pro Sekunde erstellen können, erhält ich mit MrCranky: 122730 (die aktuelle Zeit bis zur Sekunde) eine eindeutige ID, die für den Benutzer relativ einprägsam ist.
Solange Sie eine relativ eindeutige Information haben (muss nicht perfekt sein, sondern meistens eindeutig), können Sie diese als Startblock verwenden, und das bedeutet, dass der wirklich eindeutige Teil (ein ganzzahliger Code) dies kann viel viel kürzer sein, und somit ist die UID einprägsamer.
Sie können die E-Mail-Adresse eines Spielers als eindeutige Kennung verwenden. Ich bin sicher, sie können sich daran erinnern :)