如何创建也易于使用的独特游戏ID,以便一个用户可以轻松地将该游戏ID提供给其他人以加入游戏。
我正在使用C#在Silverlight中创建游戏。
如何创建也易于使用的独特游戏ID,以便一个用户可以轻松地将该游戏ID提供给其他人以加入游戏。
我正在使用C#在Silverlight中创建游戏。
Answers:
如果您有权威的资料来源,那么这个问题就很容易了(我假设如果用户输入一个ID来连接到游戏,那么它将使用某些中央服务器进行重定向)。只需使用类似http://www.safepasswd.com/的算法即可生成基本上是字典单词+小数字的UID。如果服务器数量相对较少,您甚至可以执行一个天真的算法,该算法只是随机选择一些东西,直到当前不使用它为止。
如果要让客户成为UID的来源,则必须丢弃这些ID中用户友好的部分。但是在编码方面这样做比较容易,因为您只需要使用System.Guid.NewGuid()。ToString()。出于所有意图和目的,保证100%的时间是唯一的。 资源
再说一次,GUID有点矫kill过正。记住IP或用户名会更容易b
一种方法是使用字典,然后根据编号方案选择单词。也许使用唯一的32位整数来标识每个用户,并为每个16位单词索引一个字典(单词数组)。这样,您可以使用实际单词表示其ID,并且每个标识符都是唯一的。
另一种方法是实现类似于Steam使用的方法:允许用户使用自己选择的ID登录,然后让他们指定所需的任何显示ID。例如,他们的登录ID可以是他们的电子邮件,显示名称可以是他们的名字。这样,用户可以共享其唯一标识符,但也可以通过其选择的名称进行标识。
FuzzYspo0N在评论中的答案是一个很好的答案。基本上,这个问题归结为使游戏ID足够独特以避免冲突,而又不会使其复杂化。标准的128位GUID通过使用本地信息(例如您的MAC和其他因素)来使机器之间发生冲突的可能性很小,然后添加基于随机和时间的因素来使该机器内部发生冲突的可能性得到唯一性很小。
您可以遵循相同的策略来生成自己的ID。从对用户来说令人难忘但相对独特的东西开始(如果用户使用一个良好的全局用户名或一个机器名称/ IP作为用户名),然后添加其他因素,直到生成独特的东西。通过选择本地名称(例如计算机名称),可以充分限制潜在冲突的集合,以便可以开始查询是否存在任何冲突。例如,一旦将其限制为仅该用户或该计算机,就可以确切知道需要去哪里检查该UID是否已在使用。
例如,如果我知道我的用户名在系统范围内是唯一的,则MrCranky:1是有效的UID。如果我可以检查MrCranky:1是否已经在使用(通过其他方法),那么我可以继续尝试数字,直到找到唯一的数字为止。
通过使用其他一些因素(例如随机性或时间),我可以提高第一次选择未使用ID的可能性。例如,如果您知道每秒无法创建多个会话,那么使用MrCranky:122730(当前时间为第二时间)将为我提供一个相对难忘的唯一ID。
只要您有一些相对独特的信息(不一定是完美的,就基本上是唯一的),就可以将其用作起始块,这意味着真正独特的部分(某种整数代码)可以长度要短得多,因此UID更加令人难忘。