Come posso creare ID di gioco unici e di facile utilizzo?


11

Come faccio a creare ID di gioco univoci che siano anche facili da usare, in modo che un utente possa facilmente assegnare tale ID di gioco a qualcun altro per partecipare al gioco.

Sto creando il mio gioco in Silverlight con C #.


3
Questa è meno di una risposta, quindi un commento negativo. Ho usato un sistema a 2 chiavi. Ho generato una chiave univoca (UUID) che memorizzo internamente. Proprio così: 39d7e998-e654-4f8b-9e4b-0e61fe9eaf65. Dopo aver creato un ID univoco, gli amici del giocatore possono trovare il suo profilo cercando il suo soprannome e usando le prime 4 lettere. Le possibilità che ci siano 2 "microdude: 39d7" sono piuttosto scarse. Se vedo delle collisioni, posso renderlo il primo 5 o 6. Rendere la sua chiave unica 39d7e. Questo è ovviamente pubblico (i personaggi) in modo che i suoi amici possano aggiungerlo direttamente e aiuta a specificare quando si creano giochi tramite chat o chat.
sottolineato il

Per quanto tempo le chiavi devono rimanere valide? Ciò influenzerebbe quanto devono essere unici e se è possibile riutilizzare le vecchie chiavi o meno.
Tim Holt il

@Tim le chiavi potrebbero essere valide per un massimo di 2 ore.
Zain Shaikh,

Risposte:


6

Se hai una fonte autorevole, quel problema è semplice (suppongo che se l'utente sta inserendo un ID per connettersi a un gioco, che verrà reindirizzato usando un server centrale). Basta usare un algoritmo come http://www.safepasswd.com/ per creare UID che sono fondamentalmente parole del dizionario + piccoli numeri. Se il numero di server è relativamente piccolo, potresti persino fare un algoritmo ingenuo che seleziona qualcosa di casuale fino a quando non è attualmente in uso.

Se vuoi che i tuoi clienti siano la fonte degli UID, dovrai buttare via la parte user friendly di quegli ID. Ma è più facile da fare dal punto di vista della codifica dato che useresti semplicemente System.Guid.NewGuid (). ToString (). Questo è a tutti gli effetti garantito per essere unico al 100% delle volte. fonte

Inoltre, i GUID sono un po 'eccessivi. Sarebbe più facile ricordare IP o nomi utente b


bene, penso che dovrei andare con nomi utente, almeno non saranno duplicati e sono anche facili da usare. grazie :)
Zain Shaikh il

3

Un approccio sarebbe quello di utilizzare un dizionario e selezionare le parole in base a uno schema di numerazione. Forse utilizzare un numero intero a 32 bit univoco per identificare ciascun utente e per ciascuna delle parole a 16 bit, indicizzare un dizionario (array di parole). In questo modo, puoi rappresentare il loro ID usando parole reali e ogni identificatore sarebbe unico.

Un altro approccio sarebbe quello di implementare qualcosa di simile a quello che utilizza Steam: consentire agli utenti di accedere con un ID che hanno scelto loro stessi e in seguito consentire loro di specificare qualsiasi ID di visualizzazione che desiderano. Ad esempio, il loro ID di accesso potrebbe essere la loro e-mail e il loro nome visualizzato potrebbe essere il loro nome. In questo modo l'utente può condividere il proprio identificativo univoco ma essere identificato anche da un nome di sua scelta.


grazie per il tuo suggerimento, ora userò nomi utente come chiave univoca come suggerito da @Tetrad.
Zain Shaikh,

3

La risposta di FuzzYspo0N nei commenti è molto buona. Fondamentalmente questo problema si riduce a rendere gli ID di gioco abbastanza unici da evitare collisioni, senza renderli arbitrariamente complessi. I GUID standard a 128 bit ottengono la loro unicità utilizzando le informazioni locali (come il MAC e altri fattori) per rendere molto piccola la probabilità di una collisione tra macchine, quindi aggiungere un fattore casuale e basato sul tempo per rendere la probabilità di una collisione all'interno di quella macchina molto piccolo.

Puoi seguire la stessa strategia per generare i tuoi ID. Inizia con qualcosa di memorabile per l'utente ma relativamente unico (se l'utente ha un nome utente globale che è un buon inizio, o il nome della macchina / IP), e aggiungi altri fattori fino a quando non hai generato qualcosa di unico. Scegliendo qualcosa di locale come il nome della macchina, si limita abbastanza l'insieme delle potenziali collisioni da poter iniziare a interrogare se ce ne sono. Ad esempio, una volta che lo hai limitato solo a quell'utente o solo a quella macchina, sai esattamente dove devi andare per verificare se l'UID è già in uso.

Ad esempio, se so che il mio nome utente è univoco a livello di sistema, allora MrCranky: 1 è un UID valido. Se riesco a verificare se MrCranky: 1 è già in uso (con qualche altro metodo), allora posso continuare a provare i numeri fino a quando non ne trovo uno unico.

Utilizzando qualche altro fattore (come casualità o tempo), posso aumentare la probabilità che scelga un ID inutilizzato la prima volta. Ad esempio, se sai che non è possibile creare più di una sessione al secondo, quindi utilizzando MrCranky: 122730 (l'ora corrente, alla seconda), otterrai un ID univoco relativamente memorabile per l'utente.

Finché hai qualche informazione relativamente unica (non deve essere perfetta, solo per lo più unica), puoi usarla come blocco iniziale e ciò significa che la porzione davvero unica (un codice intero di qualche tipo) può essere molto più breve, e quindi l'UID è più memorabile.


grazie per il tuo suggerimento, ora userò nomi utente come chiave univoca come suggerito da @Tetrad.
Zain Shaikh,

0

È possibile utilizzare l'indirizzo e-mail di un giocatore come identificativo univoco. Sono sicuro che se lo ricorderanno :)


grazie per il tuo suggerimento, ora userò nomi utente come chiave univoca come suggerito da @Tetrad.
Zain Shaikh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.