ユーザーフレンドリでもある一意のゲームIDを作成するにはどうすればよいですか-1人のユーザーが簡単にそのゲームIDを他の人に渡してゲームに参加させることができます。
SilverlightでC#を使用してゲームを作成しています。
ユーザーフレンドリでもある一意のゲームIDを作成するにはどうすればよいですか-1人のユーザーが簡単にそのゲームIDを他の人に渡してゲームに参加させることができます。
SilverlightでC#を使用してゲームを作成しています。
回答:
信頼できるソースがある場合、その問題は簡単です(ユーザーがゲームに接続するためにIDを入力した場合、中央サーバーを使用してリダイレクトされると想定しています)。http://www.safepasswd.com/のようなアルゴリズムを使用して、基本的に辞書の単語+小さな数字であるUIDを作成します。サーバーの数が比較的少ない場合は、現在使用されていない状態になるまでランダムに選択する単純なアルゴリズムを実行することもできます。
クライアントをUIDのソースにしたい場合は、それらのIDのユーザーフレンドリーな部分を破棄する必要があります。ただし、System.Guid.NewGuid()。ToString()を使用するだけなので、コーディング側で行う方が簡単です。これは、100%一意であることが保証されているすべての意図と目的のためのものです。 ソース
GUIDは少しやりすぎです。IPまたはユーザー名を覚える方が簡単ですb
1つのアプローチは、辞書を使用し、番号付けスキームに基づいて単語を選択することです。おそらく、一意の32ビット整数を使用して各ユーザーを識別し、16ビットの各単語について、辞書(単語の配列)にインデックスを付けます。この方法では、実際の単語を使用してIDを表すことができ、各識別子は一意になります。
別のアプローチは、Steamが使用するものと同様のものを実装することです。ユーザーが自分で選択したIDでログインし、後で必要な表示IDを指定できるようにします。たとえば、ログインIDをメールに、表示名を名前にできます。このようにして、ユーザーは一意の識別子を共有できますが、選択した名前で識別することもできます。
コメントでのFuzzYspo0Nの回答は非常に良いものです。基本的に、この問題は、ゲームIDを任意に複雑にすることなく、衝突を回避するのに十分ユニークなゲームIDにすることを意味します。標準の128ビットGUIDは、ローカル情報(MACやその他の要素など)を使用して一意性を取得し、マシン間の衝突の可能性を非常に小さくしてから、ランダムな時間ベースの要素を追加して、そのマシン内での衝突の可能性を高めます非常に少ない。
同じ戦略に従って、独自のIDを生成できます。ユーザーにとって覚えやすいものから始めて、比較的ユニークなものから始めます(ユーザーが良い出発点であるグローバルユーザー名、またはマシン名/ IPを持っている場合)、ユニークなものを生成するまで他の要素を追加します。マシン名などのローカルなものを選択することにより、潜在的な衝突のセットを制限して、衝突がある場合にクエリを開始できるようにします。たとえば、そのユーザーまたはそのマシンのみに制限すると、そのUIDがすでに使用されているかどうかを確認するためにどこに移動する必要があるかが正確にわかります。
たとえば、ユーザー名がシステム全体で一意であることがわかっている場合、MrCranky:1は有効なUIDです。(他の方法で)MrCranky:1が既に使用されているかどうかを確認できれば、一意の番号が見つかるまで番号を試すことができます。
他の要素(ランダム性や時間など)を使用することで、未使用のIDを初めて選択する可能性を高めることができます。たとえば、1秒間に複数のセッションを適切に作成できないことがわかっている場合は、MrCranky:122730(現在の時刻から秒)を使用すると、ユーザーにとって比較的覚えやすい一意のIDを取得できます。
比較的一意の情報(完全である必要はなく、ほとんどが一意である必要があります)がある限り、それを開始ブロックとして使用できます。つまり、真に一意の部分(ある種の整数コード)を使用できます。はるかに短くなるため、UIDはより覚えやすくなります。
プレーヤーのメールアドレスを一意の識別子として使用できます。私は彼らがそれを覚えていると確信しています:)