¿Cómo creo identificaciones de juego únicas y fáciles de usar?

11

¿Cómo puedo crear identificaciones de juego únicas que también sean fáciles de usar, para que un usuario pueda dar fácilmente esa identificación de juego a otra persona para que se una al juego?

Estoy creando mi juego en Silverlight con C #.

Zain Shaikh
fuente
3
Esto es menos una respuesta, así que mal comentario. Usé un sistema de 2 llaves. Generé una clave única (UUID) que almaceno internamente. Al igual que esto: 39d7e998-e654-4f8b-9e4b-0e61fe9eaf65. Después de hacer una identificación única, los amigos del jugador pueden encontrar su perfil buscando su apodo y usando las primeras 4 letras. Las posibilidades de que haya 2 'microdude: 39d7' son bastante escasas. Si veo colisiones, puedo convertirlas en los primeros 5 o 6. Haciendo que su clave única sea 39d7e. Esto es obviamente público (los personajes) para que sus amigos puedan agregarlo directamente, y ayuda a especificar cuándo hacer juegos a través de mensajería instantánea o chat.
subrayado
¿Cuánto tiempo deben permanecer válidas las claves? Esto influiría en lo únicos que deben ser y si puede reutilizar las claves antiguas o no.
Tim Holt
@Tim las claves podrían ser válidas por lo menos 2 horas.
Zain Shaikh

Respuestas:

6

Si tiene una fuente autorizada, ese problema es fácil (lo que supongo que si el usuario está poniendo una ID para conectarse a un juego, entonces se está redirigiendo utilizando algún servidor central). Simplemente use un algoritmo como http://www.safepasswd.com/ para hacer UID que son básicamente palabras de diccionario + números pequeños. Si el número de servidores es relativamente pequeño, incluso podría hacer un algoritmo ingenuo que simplemente elija algo al azar hasta que no esté actualmente en uso.

Si desea que sus clientes sean la fuente de los UID, tendrá que tirar la porción fácil de usar de esas ID. Pero es más fácil de hacer en el lado de la codificación ya que solo estaría usando System.Guid.NewGuid (). ToString (). Eso es para todos los efectos garantizados para ser únicos el 100% del tiempo. fuente

Por otra parte, los GUID son un poco exagerados. Sería más fácil recordar direcciones IP o nombres de usuario b

Tétrada
fuente
bueno, creo que debería ir con nombres de usuario, al menos no serán duplicados, e incluso son fáciles de usar. gracias :)
Zain Shaikh
3

Un enfoque sería utilizar un diccionario y seleccionar palabras basadas en un esquema de numeración. Quizás use un número entero de 32 bits único para identificar a cada usuario y para cada una de las palabras de 16 bits, indexe un diccionario (conjunto de palabras). De esta manera, puede representar su identificación utilizando palabras reales y cada identificador sería único.

Otro enfoque sería implementar algo similar a lo que usa Steam: permitir a los usuarios iniciar sesión con una identificación que ellos mismos elijan, y luego permitirles especificar cualquier identificación de pantalla que deseen. Por ejemplo, su identificación de inicio de sesión podría ser su correo electrónico y su nombre para mostrar podría ser su primer nombre. De esta manera, el usuario puede compartir su identificador único pero también ser identificado por un nombre de su elección.

reverberación
fuente
gracias por su sugerencia, ahora usaré nombres de usuario como clave única como lo sugiere @Tetrad.
Zain Shaikh
3

La respuesta de FuzzYspo0N en los comentarios es muy buena. Básicamente, este problema se reduce a hacer que las ID de los juegos sean lo suficientemente únicas como para evitar colisiones, sin hacerlas arbitrariamente complejas. Los GUID estándar de 128 bits obtienen su singularidad mediante el uso de información local (como su MAC y otros factores) para que la probabilidad de una colisión entre máquinas sea muy pequeña, luego agregue un factor aleatorio y basado en el tiempo para aumentar la probabilidad de una colisión dentro de esa máquina muy pequeña.

Puede seguir la misma estrategia para generar sus propios ID. Comience con algo memorable para el usuario pero relativamente único (si el usuario tiene un nombre de usuario global que es un buen comienzo, o el nombre de la máquina / IP), y agregue otros factores hasta que haya generado algo único. Al elegir algo local como el nombre de la máquina, restringe el conjunto de posibles colisiones lo suficiente como para comenzar a consultar si hay alguna. Por ejemplo, una vez que lo ha restringido solo a ese usuario, o solo a esa máquina, sabe exactamente dónde debe ir para verificar si ese UID ya está en uso.

Por ejemplo, si sé que mi nombre de usuario es único en todo el sistema, MrCranky: 1 es un UID válido. Si puedo verificar si MrCranky: 1 ya está en uso (por algún otro método), entonces puedo seguir probando números hasta que encuentre uno único.

Al usar algún otro factor (como la aleatoriedad o el tiempo), puedo aumentar la probabilidad de elegir una ID sin usar la primera vez. Por ejemplo, si sabe que no puede crear más de una sesión por segundo, entonces usar MrCranky: 122730 (la hora actual, a la segunda) me dará una identificación única que es relativamente memorable para el usuario.

Siempre que tenga alguna información relativamente única (no tiene que ser perfecta, sino principalmente única), puede usarla como un bloque inicial, y eso significa que la porción verdaderamente única (un código entero de algún tipo) puede ser mucho más corto y, por lo tanto, el UID es más memorable.

MrCranky
fuente
gracias por su sugerencia, ahora usaré nombres de usuario como clave única como lo sugiere @Tetrad.
Zain Shaikh
0

Puede usar la dirección de correo electrónico de un jugador como un identificador único. Estoy seguro de que pueden recordar eso :)

adamk
fuente
gracias por su sugerencia, ahora usaré nombres de usuario como clave única como lo sugiere @Tetrad.
Zain Shaikh