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 #.
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 #.
Réponses:
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
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.
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.
Vous pouvez utiliser l'adresse e-mail d'un joueur comme identifiant unique. Je suis sûr qu'ils s'en souviennent :)