Kullanıcı dostu benzersiz oyun kimlikleri nasıl oluşturabilirim - böylece bir kullanıcı oyuna katılmak için bu oyun kimliğini başka birine kolayca verebilir.
Oyunumu Silverlight'ta C # ile oluşturuyorum.
Kullanıcı dostu benzersiz oyun kimlikleri nasıl oluşturabilirim - böylece bir kullanıcı oyuna katılmak için bu oyun kimliğini başka birine kolayca verebilir.
Oyunumu Silverlight'ta C # ile oluşturuyorum.
Yanıtlar:
Yetkili bir kaynağınız varsa, bu sorun kolaydır (ki kullanıcı bir oyuna bağlanmak için bir kimlik giriyorsa, o zaman bazı merkezi sunucu kullanarak yeniden yönlendiriliyor). Temel olarak sözlük kelimeleri + küçük sayılar olan UID'ler yapmak için http://www.safepasswd.com/ does gibi bir algoritma kullanın . Sunucu sayısı nispeten azsa, kullanılmayana kadar rastgele bir şey seçen saf bir algoritma bile yapabilirsiniz.
Müşterilerinizin UID'lerin kaynağı olmasını istiyorsanız, bu kimliklerin kullanıcı dostu kısmını atmanız gerekir. Ancak, System.Guid.NewGuid (). ToString () işlevini kullandığınız için kodlama tarafında yapmak daha kolaydır. Bu,% 100 benzersiz olduğu garanti edilen tüm niyet ve amaçlar içindir. kaynak
Sonra tekrar, GUID biraz abartılı. IP'leri veya kullanıcı adlarını hatırlamak daha kolay olurdu b
Bir yaklaşım sözlük kullanmak ve bir numaralandırma şemasına göre kelimeleri seçmek olacaktır. Her kullanıcıyı tanımlamak için benzersiz bir 32 bit tam sayı kullanın ve 16 bitlik kelimelerin her biri için bir sözlüğü (sözcük dizisini) dizinleyin. Bu şekilde, gerçek kelimeleri kullanarak kimliklerini temsil edebilirsiniz ve her tanımlayıcı benzersiz olacaktır.
Başka bir yaklaşım, Steam'in kullandığı şeye benzer bir şey uygulamak olacaktır: kullanıcıların kendi seçtikleri bir kimlikle giriş yapmalarına izin verin ve daha sonra istedikleri herhangi bir görüntü kimliğini belirtmelerine izin verin. Örneğin, giriş kimlikleri e-postaları ve görünen adları ilk adları olabilir. Bu şekilde kullanıcı benzersiz tanımlayıcılarını paylaşabilir, ancak seçtikleri bir adla da tanımlanabilir.
FuzzYspo0N'nin yorumlardaki cevabı çok iyi. Temel olarak bu sorun, oyun kimliklerini çarpışmalardan kaçınmak için yeterince karmaşık hale getirmeden yeterince benzersiz hale getirmekle ilgilidir. Standart 128 bit GUID'ler, makineler arasındaki çarpışma olasılığını çok küçük hale getirmek için yerel bilgileri (MAC ve diğer faktörler gibi) kullanarak benzersizliklerini elde eder, ardından bu makine içindeki bir çarpışma olasılığını yapmak için rastgele ve zamana dayalı bir faktör ekler çok küçük.
Kendi kimliklerinizi oluşturmak için aynı stratejiyi takip edebilirsiniz. Kullanıcı tarafından unutulmaz ancak nispeten benzersiz bir şeyle başlayın (kullanıcının iyi bir başlangıç olan küresel bir kullanıcı adı veya makine adı / IP'si varsa) ve benzersiz bir şey üretinceye kadar diğer faktörleri ekleyin. Makine adı gibi yerel bir şey seçerek, potansiyel çarpışma kümesini varsa sorgulamaya başlayabileceğiniz kadar kısıtlarsınız. Örneğin, yalnızca bu kullanıcıyla mı yoksa yalnızca o makineyle sınırlandırdığınızda, UID'nin zaten kullanımda olup olmadığını kontrol etmek için tam olarak nereye gitmeniz gerektiğini bilirsiniz.
Örneğin, kullanıcı adımın sistem çapında benzersiz olduğunu biliyorsanız, MrCranky: 1 geçerli bir UID'dir. MrCranky: 1'in zaten kullanılıp kullanılmadığını (başka bir yöntemle) kontrol edebilirsem, benzersiz bir tane bulana kadar sayıları denemeye devam edebilirim.
Başka bir faktör kullanarak (rastgele veya zaman gibi), ilk kez kullanılmayan bir kimlik seçme olasılığımı artırabilirim. Örneğin, saniyede birden fazla oturum oluşturamayacağınızı biliyorsanız, MrCranky: 122730'u (şimdiki zaman, ikinciye) kullanmak, kullanıcı tarafından görece unutulmaz olan benzersiz bir kimlik verecektir.
Göreceli olarak benzersiz bir bilgiye sahip olduğunuz sürece (mükemmel olmak zorunda değildir, çoğunlukla benzersizdir), bunu bir başlangıç bloğu olarak kullanabilirsiniz ve bu gerçekten benzersiz kısım (bir çeşit tam sayı kodu) çok daha kısa ve bu nedenle UID daha unutulmaz.
Bir oyuncunun e-posta adresini benzersiz bir tanımlayıcı olarak kullanabilirsiniz. Eminim bunu hatırlayabilirler :)