Як створити унікальні ідентифікатори гри, які також зручні для користувачів - щоб один користувач міг легко надати цей ідентифікатор гри іншому для приєднання до гри.
Я створюю свою гру в Silverlight за допомогою C #.
Як створити унікальні ідентифікатори гри, які також зручні для користувачів - щоб один користувач міг легко надати цей ідентифікатор гри іншому для приєднання до гри.
Я створюю свою гру в Silverlight за допомогою C #.
Відповіді:
Якщо у вас є авторитетне джерело, ця проблема проста (що я припускаю, якщо користувач вводить ідентифікатор для підключення до гри, а потім перенаправляється за допомогою якогось центрального сервера). Просто використовуйте такий алгоритм, як http://www.safepasswd.com/ , щоб створити UID, які в основному є словниковими словами + невеликими цифрами. Якщо кількість серверів порівняно невелика, ви навіть можете зробити наївний алгоритм, який просто підбирає щось випадкове, доки воно не використовується зараз.
Якщо ви хочете, щоб ваші клієнти були джерелом UID, вам доведеться викинути зручну частину цих ідентифікаторів. Але це простіше зробити на стороні кодування, оскільки ви просто використовували System.Guid.NewGuid (). ToString (). Тобто для всіх намірів і цілей гарантовано є унікальними 100% часу. джерело
Знову ж таки, GUID - це трохи зайвий рівень. Простіше було б запам'ятати IP-адреси чи імена користувачів b
Одним із підходів було б використання словника та вибір слів на основі схеми нумерації. Можливо, використовуйте унікальне 32-бітове ціле число для ідентифікації кожного користувача та для кожного 16-бітного слова індексуйте словник (масив слів). Таким чином, ви можете представити їх ідентифікатор, використовуючи фактичні слова, і кожен ідентифікатор був би унікальним.
Іншим підходом було б реалізувати щось подібне до того, що використовує Steam: дозвольте користувачам увійти з ідентифікатором, який вони обрали самі, а пізніше дозвольте їм вказати будь-який ідентифікатор відображення, який вони хочуть. Наприклад, їх ідентифікатором для входу може бути електронна адреса, а відображуваним ім'ям може бути їх ім'я. Таким чином користувач може поділитися своїм унікальним ідентифікатором, але також бути ідентифікованим іменем, який він обрав.
Відповідь FuzzYspo0N у коментарях дуже хороша. В основному ця проблема зводиться до того, щоб зробити ідентифікатори гри досить унікальними, щоб уникнути зіткнень, не роблячи їх довільно складними. Стандартні 128-бітні GUID отримують свою унікальність, використовуючи локальну інформацію (наприклад, MAC та інші фактори), щоб зробити ймовірність зіткнення між машинами дуже малою, а потім додати випадковий та часовий коефіцієнт, щоб зробити ймовірність зіткнення всередині цієї машини. дуже мало.
Ви можете дотримуватися тієї ж стратегії, щоб створити власні ідентифікатори. Почніть з чогось запам’ятовуваного для користувача, але відносно унікального (якщо користувач має глобальне ім’я користувача, яке є хорошим початком, або ім’я машини / IP), і додайте інші фактори, поки ви не створили щось унікальне. Вибравши щось місцеве, як ім’я машини, ви обмежите набір потенційних зіткнень достатньо, щоб ви могли почати запитувати, чи є такі. Наприклад, щойно ви обмежили його лише цим користувачем або просто цією машиною, ви точно знаєте, куди вам потрібно звернутися, щоб перевірити, чи вже цей UID використовується.
Наприклад, якщо я знаю, що моє ім’я користувача є унікальною системою, то MrCranky: 1 є дійсним UID. Якщо я можу перевірити, чи MrCranky: 1 вже використовується (яким-небудь іншим методом), то я можу просто тримати пробні номери, поки не знайду унікальний.
Використовуючи якийсь інший фактор (наприклад, випадковість чи час), я можу збільшити ймовірність того, що я вперше підберу невикористаний ідентифікатор. Наприклад, якщо ви знаєте, що неможливо створити більше одного сеансу в секунду, то за допомогою MrCranky: 122730 (поточний час до другого) ви отримаєте мені унікальний ідентифікатор, який відносно запам'ятовується користувачеві.
Поки у вас є частина відносно унікальної інформації (не повинна бути ідеальною, просто здебільшого унікальною), ви можете використовувати її як стартовий блок, а це означає, що справді унікальна частина (цілий цільовий код якоїсь форми) може бути набагато коротше, і, отже, UID запам'ятовується.