Jak mogę utworzyć unikalne identyfikatory gier przyjazne dla użytkownika?


11

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 #.


3
To mniej odpowiedź, więc zły komentarz. Użyłem 2-klawiszowego systemu. Wygenerowałem unikalny klucz (UUID), który przechowuję wewnętrznie. Bardzo podobnie: 39d7e998-e654-4f8b-9e4b-0e61fe9eaf65. Po utworzeniu unikalnego identyfikatora przyjaciele gracza mogą znaleźć swój profil, szukając pseudonimu i używając pierwszych 4 liter. Szanse na powstanie 2 „mikrodudy: 39d7” są niewielkie. Jeśli widzę kolizje, mogę ustawić pierwszą 5 lub 6. Wykonanie jego unikalnego klucza 39d7e. Jest to oczywiście publiczne (postacie), dzięki czemu jego przyjaciele mogą dodawać go bezpośrednio i pomaga w określaniu, kiedy tworzysz gry przez komunikator lub czat.
odkrycie podkreślone

Jak długo klucze muszą pozostać ważne? Wpłynęłoby to na ich wyjątkowość i to, czy możesz ponownie użyć starych kluczy, czy nie.
Tim Holt,

@ Tim klucze mogą być ważne maksymalnie przez 2 godziny.
Zain Shaikh,

Odpowiedzi:


6

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


dobrze, myślę, że powinienem używać nazw użytkowników, przynajmniej nie będą duplikowane, a nawet są przyjazne dla użytkownika. dzięki :)
Zain Shaikh

3

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.


dziękuję za sugestię, teraz będę używać nazw użytkowników jako unikatowych kluczy, jak sugeruje @Tetrad.
Zain Shaikh,

3

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.


dziękuję za sugestię, teraz będę używać nazw użytkowników jako unikatowych kluczy, jak sugeruje @Tetrad.
Zain Shaikh,

0

Możesz użyć adresu e-mail gracza jako unikalnego identyfikatora. Jestem pewien, że mogą to zapamiętać :)


dziękuję za sugestię, teraz będę używać nazw użytkowników jako unikatowych kluczy, jak sugeruje @Tetrad.
Zain Shaikh,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.