Jak utworzyć unikalne identyfikatory gier, które są również przyjazne dla użytkownika - aby jeden użytkownik mógł z łatwością podać ten identyfikator innej osobie w celu dołączenia do gry.
Tworzę swoją grę w Silverlight z C #.
c#
silverlight
Zain Shaikh
źródło
źródło
Odpowiedzi:
Jeśli masz wiarygodne źródło, problem jest prosty (zakładam, że jeśli użytkownik wprowadza identyfikator, aby połączyć się z grą, to przekierowuje go za pomocą centralnego serwera). Wystarczy użyć algorytmu takiego jak http://www.safepasswd.com/ , aby utworzyć identyfikatory UID, które są w zasadzie słownikowymi słowami + małe liczby. Jeśli liczba serwerów jest stosunkowo niewielka, możesz nawet zrobić naiwny algorytm, który wybiera tylko coś losowego, dopóki nie jest on aktualnie używany.
Jeśli chcesz, aby Twoi klienci byli źródłem identyfikatorów UID, musisz wyrzucić przyjazną dla użytkownika część tych identyfikatorów. Ale łatwiej jest to zrobić po stronie kodowania, ponieważ po prostu użyjesz System.Guid.NewGuid (). ToString (). Oznacza to, że wszystkie intencje i cele będą gwarantowane w 100% przypadków. źródło
Z drugiej strony, identyfikatory GUID są trochę przesadne. Łatwiej byłoby zapamiętać adresy IP lub nazwy użytkownika b
źródło
Jednym z podejść byłoby użycie słownika i wybranie słów na podstawie schematu numeracji. Być może użyj unikalnej 32-bitowej liczby całkowitej do zidentyfikowania każdego użytkownika i dla każdego z 16-bitowych słów zindeksuj słownik (tablicę słów). W ten sposób możesz reprezentować ich identyfikator za pomocą rzeczywistych słów, a każdy identyfikator będzie niepowtarzalny.
Innym podejściem byłoby zaimplementowanie czegoś podobnego do tego, czego używa Steam: zezwól użytkownikom na logowanie się za pomocą wybranego przez siebie identyfikatora, a następnie pozwól im określić dowolny identyfikator wyświetlania, jaki chcą. Na przykład, ich loginem może być ich adres e-mail, a ich wyświetlana nazwa może być ich imieniem. W ten sposób użytkownik może udostępniać swój unikalny identyfikator, ale także identyfikować się według wybranej przez siebie nazwy.
źródło
Odpowiedź FuzzYspo0N w komentarzach jest bardzo dobra. Zasadniczo ten problem sprowadza się do uczynienia identyfikatorów gier wystarczająco unikalnymi, aby uniknąć kolizji, bez komplikowania ich. Standardowe 128-bitowe identyfikatory GUID uzyskują swoją wyjątkowość, wykorzystując informacje lokalne (takie jak MAC i inne czynniki), aby prawdopodobieństwo kolizji między maszynami było bardzo małe, a następnie dodaj czynnik losowy i zależny od czasu, aby prawdopodobieństwo kolizji w obrębie tej maszyny bardzo mały.
Możesz zastosować tę samą strategię do generowania własnych identyfikatorów. Zacznij od czegoś niezapomnianego dla użytkownika, ale stosunkowo unikalnego (jeśli użytkownik ma globalną nazwę użytkownika, która jest dobrym początkiem, lub nazwę komputera / IP) i dodawaj inne czynniki, aż wygenerujesz coś unikalnego. Wybierając coś lokalnego, np. Nazwę komputera, ograniczasz zestaw potencjalnych kolizji na tyle, że możesz zacząć sprawdzać, czy takie istnieją. Na przykład, po ograniczeniu go do tego użytkownika lub tylko tego komputera, wiesz dokładnie, gdzie musisz udać się, aby sprawdzić, czy ten identyfikator UID jest już używany.
Na przykład, jeśli wiem, że moja nazwa użytkownika jest unikalna dla całego systemu, to MrCranky: 1 jest prawidłowym UID. Jeśli mogę sprawdzić, czy MrCranky: 1 jest już w użyciu (inną metodą), mogę po prostu wypróbowywać liczby, aż znajdę unikatowy.
Używając innego czynnika (np. Losowości lub czasu), mogę zwiększyć prawdopodobieństwo, że wybiorę niewykorzystany identyfikator za pierwszym razem. Np. Jeśli wiesz, że nie możesz stworzyć więcej niż jednej sesji na sekundę, to użycie MrCranky: 122730 (aktualny czas do drugiej) da mi unikalny identyfikator, który jest stosunkowo niezapomniany dla użytkownika.
Tak długo, jak masz jakąś relatywnie unikalną informację (nie musi być idealna, tylko w większości unikalna), możesz użyć jej jako bloku początkowego, a to oznacza, że prawdziwie unikalna część (pewien rodzaj kodu całkowitego) może być znacznie krótszym, a zatem UID jest bardziej niezapomniany.
źródło
Możesz użyć adresu e-mail gracza jako unikalnego identyfikatora. Jestem pewien, że mogą to zapamiętać :)
źródło