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 #.
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 #.
Risposte:
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
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.
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.
È possibile utilizzare l'indirizzo e-mail di un giocatore come identificativo univoco. Sono sicuro che se lo ricorderanno :)