Как создать удобные уникальные идентификаторы игр?


11

Как создать уникальные идентификаторы игр, которые также являются удобными для пользователя - чтобы один пользователь мог легко передать этот идентификатор игры кому-то другому для присоединения к игре.

Я создаю свою игру в Silverlight с помощью C #.


3
Это меньше ответа, поэтому плохой комментарий. Я использовал 2-х клавишную систему. Я сгенерировал уникальный ключ (UUID), который я храню внутри. Примерно так: 39d7e998-e654-4f8b-9e4b-0e61fe9eaf65. После того как я сделаю уникальный идентификатор, друзья игрока смогут найти его профиль, выполнив поиск по его нику и используя первые 4 буквы. Вероятность того, что будет 2 'microdude: 39d7', довольно мала. Если я вижу столкновения, я могу сделать это первые 5 или 6. Делая его уникальный ключ 39d7e. Это очевидно общедоступные (персонажи), так что его друзья могут добавлять его напрямую, и помогает указать при создании игр через чат или чат.
Подчеркнутое

Как долго ключи должны оставаться в силе? Это будет влиять на то, насколько уникальными они должны быть, и сможете ли вы повторно использовать старые ключи или нет.
Тим Холт

@ Ключи могут быть действительны не более 2 часов.
Заин Шейх

Ответы:


6

Если у вас есть авторитетный источник, эта проблема проста (я предполагаю, что если пользователь вводит идентификатор для подключения к игре, то он перенаправляется с использованием какого-то центрального сервера). Просто используйте алгоритм, подобный http://www.safepasswd.com/ , чтобы сделать UID, которые в основном являются словарными словами + маленькими числами. Если количество серверов относительно невелико, вы можете даже сделать наивный алгоритм, который просто выбирает что-то случайное, пока оно не используется в данный момент.

Если вы хотите, чтобы ваши клиенты были источником UID, вам придется отбросить удобную для пользователя часть этих идентификаторов. Но это легче сделать на стороне кодирования, поскольку вы просто используете System.Guid.NewGuid (). ToString (). Это для всех намерений и целей, которые гарантированно будут уникальными в 100% случаев. источник

Опять же, GUID немного излишним. Было бы проще запомнить IP-адреса или имена пользователей b


хорошо, я думаю, что я должен идти с именами пользователей, по крайней мере, они не будут повторяться, и они даже удобны для пользователя. спасибо :)
Заин Шейх

3

Одним из подходов будет использование словаря и выбор слов на основе схемы нумерации. Возможно, используйте уникальное 32-разрядное целое число для идентификации каждого пользователя и для каждого из 16-разрядных слов индексируйте словарь (массив слов). Таким образом, вы можете представить их идентификатор с использованием реальных слов, и каждый идентификатор будет уникальным.

Другим подходом было бы реализовать нечто похожее на то, что использует Steam: разрешить пользователям входить с идентификатором, который они выбрали сами, а затем позволить им указывать любой идентификатор дисплея, который они хотят. Например, их логин может быть их адресом электронной почты, а отображаемое имя - их именем. Таким образом, пользователь может поделиться своим уникальным идентификатором, но также может быть идентифицирован по имени по своему выбору.


спасибо за ваше предложение, теперь я буду использовать имена пользователей в качестве уникального ключа, предложенного @Tetrad.
Заин Шейх

3

Ответ FuzzYspo0N в комментариях очень хороший. По сути, эта проблема сводится к тому, чтобы сделать идентификаторы игр достаточно уникальными, чтобы избежать коллизий, не делая их сколь угодно сложными. Стандартные 128-битные GUID получают свою уникальность, используя локальную информацию (такую ​​как ваш MAC и другие факторы), чтобы сделать вероятность коллизии между машинами очень маленькой, а затем добавляют случайный и основанный на времени коэффициент, чтобы сделать вероятность коллизии внутри этой машины. очень маленький.

Вы можете следовать той же стратегии, чтобы создать свои собственные идентификаторы. Начните с чем-то запоминающимся для пользователя, но относительно уникальным (если пользователь имеет глобальное имя пользователя, это начало хорошее, или имя машины / IP), а также добавить другие факторы, пока вы не генерироваться что-то уникальное. Выбирая что-то локальное, например, имя компьютера, вы ограничиваете набор потенциальных коллизий настолько, что можете начинать запрашивать их, если они есть. Например, как только вы ограничиваете его только этим пользователем или только этой машиной, вы точно знаете, куда вам нужно обратиться, чтобы проверить, используется ли уже этот UID.

Например, если я знаю, что мое имя пользователя уникально для всей системы, то MrCranky: 1 является действительным UID. Если я могу проверить, является ли MrCranky: 1 уже используется (по каким-либо другим способом), то я могу только продолжать пробовать номера, пока я не нашел уникальный один.

Используя какой-то другой фактор (например, случайность или время), я могу повысить вероятность того, что впервые выберу неиспользуемый идентификатор. Например, если вы знаете, что вы не можете реально создать более одного сеанса в секунду, то при использовании MrCranky: 122730 (текущее время, с точностью до секунды) я получу уникальный идентификатор, который будет относительно запоминающимся для пользователя.

Пока у вас есть некоторая часть относительно уникальной информации (не обязательно идеальной, просто в основном уникальной), вы можете использовать ее в качестве начального блока, а это означает, что действительно уникальная часть (некоторый целочисленный код) может гораздо гораздо короче, и, таким образом, UID более запоминающимся.


спасибо за ваше предложение, теперь я буду использовать имена пользователей в качестве уникального ключа, предложенного @Tetrad.
Заин Шейх

0

Вы можете использовать адрес электронной почты игрока в качестве уникального идентификатора. Я уверен, что они могут помнить, что :)


спасибо за ваше предложение, теперь я буду использовать имена пользователей в качестве уникального ключа, предложенного @Tetrad.
Заин Шейх
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.