Comment créer des ID de jeu uniques et conviviaux?

11

Comment puis-je créer des identifiants de jeu uniques qui sont également conviviaux - afin qu'un utilisateur puisse facilement donner cet identifiant de jeu à quelqu'un d'autre pour rejoindre le jeu.

Je crée mon jeu dans Silverlight avec C #.

Zain Shaikh
la source
3
C'est moins une réponse, donc mauvais commentaire. J'ai utilisé un système à 2 clés. J'ai généré une clé unique (UUID) que je stocke en interne. Un peu comme ceci: 39d7e998-e654-4f8b-9e4b-0e61fe9eaf65. Après avoir fait un identifiant unique, les amis du joueur peuvent trouver son profil en recherchant son surnom et en utilisant les 4 premières lettres.Les chances qu'il y ait 2 microdude: 39d7 'sont assez minces. Si je vois des collisions, je peux en faire les 5 ou 6 premiers. Faire sa clé unique 39d7e. Ceci est évidemment public (les personnages) afin que ses amis puissent l'ajouter directement, et aide à spécifier quand faire des jeux sur IM ou chat.
undercorediscovery
Combien de temps les clés doivent-elles rester valides? Cela influera sur leur caractère unique et sur la possibilité de réutiliser ou non d'anciennes clés.
Tim Holt
@Tim, les clés peuvent être valides pendant au plus 2 heures.
Zain Shaikh

Réponses:

6

Si vous avez une source faisant autorité, ce problème est facile (ce que je suppose si l'utilisateur met un ID pour se connecter à un jeu, puis qu'il est redirigé à l'aide d'un serveur central). Utilisez simplement un algorithme comme http://www.safepasswd.com/ pour créer des UID qui sont essentiellement des mots de dictionnaire + de petits nombres. Si le nombre de serveurs est relativement petit, vous pouvez même faire un algorithme naïf qui choisit simplement quelque chose de aléatoire jusqu'à ce qu'il ne soit pas actuellement utilisé.

Si vous voulez que vos clients soient la source des UID, vous devrez jeter la partie conviviale de ces ID. Mais c'est plus facile à faire du côté du codage puisque vous utiliseriez simplement System.Guid.NewGuid (). ToString (). C'est à toutes fins utiles garanti unique à 100% du temps. la source

Là encore, les GUID sont un peu exagérés. Il serait plus facile de se souvenir des adresses IP ou des noms d'utilisateur b

Tetrad
la source
bon, je pense que je devrais aller avec les noms d'utilisateur, au moins ils ne seront pas en double, et ils sont même conviviaux. merci :)
Zain Shaikh
3

Une approche consisterait à utiliser un dictionnaire et à sélectionner des mots sur la base d'un schéma de numérotation. Utilisez peut-être un entier unique de 32 bits pour identifier chaque utilisateur et pour chacun des mots de 16 bits, indexez un dictionnaire (tableau de mots). De cette façon, vous pouvez représenter leur identifiant à l'aide de mots réels et chaque identifiant serait unique.

Une autre approche consisterait à implémenter quelque chose de similaire à ce que Steam utilise: permettre aux utilisateurs de se connecter avec un identifiant qu'ils ont choisi eux-mêmes, puis les laisser spécifier tout identifiant d'affichage qu'ils souhaitent. Par exemple, leur identifiant de connexion pourrait être leur e-mail et leur nom d'affichage pourrait être leur prénom. De cette façon, l'utilisateur peut partager son identifiant unique mais également être identifié par un nom de son choix.

reverbb
la source
merci pour votre suggestion, je vais maintenant utiliser les noms d'utilisateur comme clé unique comme suggéré par @Tetrad.
Zain Shaikh
3

La réponse de FuzzYspo0N dans les commentaires est très bonne. Fondamentalement, ce problème se résume à rendre les ID de jeu suffisamment uniques pour éviter les collisions, sans les rendre arbitrairement complexes. Les GUID 128 bits standard obtiennent leur caractère unique en utilisant des informations locales (comme votre MAC et d'autres facteurs) pour réduire la probabilité d'une collision entre machines, puis ajoutez un facteur aléatoire et basé sur le temps pour rendre la probabilité d'une collision au sein de cette machine très petit.

Vous pouvez suivre la même stratégie pour générer vos propres identifiants. Commencez avec quelque chose de mémorable pour l'utilisateur mais relativement unique (si l'utilisateur a un nom d'utilisateur global qui est un bon début, ou le nom de la machine / IP), et ajoutez d'autres facteurs jusqu'à ce que vous ayez généré quelque chose d'unique. En choisissant quelque chose de local comme le nom de la machine, vous limitez suffisamment l'ensemble des collisions potentielles pour pouvoir commencer à rechercher s'il y en a. Par exemple, une fois que vous l'avez limité à cet utilisateur ou à cette machine, vous savez exactement où vous devez aller pour vérifier si cet UID est déjà utilisé.

Par exemple, si je sais que mon nom d'utilisateur est unique à l'échelle du système, alors MrCranky: 1 est un UID valide. Si je peux vérifier si MrCranky: 1 est déjà utilisé (par une autre méthode), alors je peux continuer à essayer des numéros jusqu'à ce que j'en trouve un unique.

En utilisant un autre facteur (comme le hasard ou le temps), je peux augmenter la probabilité de choisir une ID inutilisée pour la première fois. Par exemple, si vous savez que vous ne pouvez pas créer plus d'une session par seconde, l'utilisation de MrCranky: 122730 (l'heure actuelle, à la seconde) me donnera un ID unique qui est relativement mémorable pour l'utilisateur.

Tant que vous avez des informations relativement uniques (qui ne doivent pas nécessairement être parfaites, simplement uniques), vous pouvez les utiliser comme bloc de départ, ce qui signifie que la partie vraiment unique (un code entier d'une sorte) peut être beaucoup plus court, et donc l'UID est plus mémorable.

MrCranky
la source
merci pour votre suggestion, je vais maintenant utiliser les noms d'utilisateur comme clé unique comme suggéré par @Tetrad.
Zain Shaikh du
0

Vous pouvez utiliser l'adresse e-mail d'un joueur comme identifiant unique. Je suis sûr qu'ils s'en souviennent :)

adamk
la source
merci pour votre suggestion, je vais maintenant utiliser les noms d'utilisateur comme clé unique comme suggéré par @Tetrad.
Zain Shaikh