Як створити зручні для користувача унікальні ідентифікатори ігор?


11

Як створити унікальні ідентифікатори гри, які також зручні для користувачів - щоб один користувач міг легко надати цей ідентифікатор гри іншому для приєднання до гри.

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


3
Це менше відповіді, так поганий коментар. Я використовував 2-х ключову систему. Я створив унікальний ключ (UUID), який я зберігаю внутрішньо. Наче так: 39d7e998-e654-4f8b-9e4b-0e61fe9eaf65. Після того, як я зробить унікальний ідентифікатор, друзі гравця можуть знайти його профіль, шукаючи його псевдонім та використовуючи перші 4 літери. Шанси на те, що вони будуть 2 'мікродруги: 39d7', досить малі. Якщо я бачу зіткнення, я можу зробити це першими 5 або 6. Створення його унікального ключа 39d7e. Це, очевидно, загальнодоступне (персонажів), щоб його друзі могли додавати його безпосередньо, і це допомагає вказувати під час ігор через чат чи чат.
підкреслити

Скільки часу потрібні ключі, щоб залишатись дійсними? Це може вплинути на те, наскільки вони унікальні, і чи можна повторно використовувати старі ключі чи ні.
Тім Холт

@Tim клавіші можуть бути дійсними не більше 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.