Kullanıcı dostu, benzersiz oyun kimlikleri nasıl oluştururum?


11

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.


3
Bu bir cevaptan daha az, bu yüzden kötü bir yorum. 2 anahtarlı bir sistem kullandım. Dahili olarak sakladığım benzersiz bir anahtar (UUID) oluşturdum. Bunun gibi: 39d7e998-e654-4f8b-9e4b-0e61fe9eaf65. Benzersiz bir kimlik yaptıktan sonra, oyuncunun arkadaşları takma adını arayarak ve ilk 4 harfi kullanarak profilini bulabilir. 2 'mikrodude: 39d7' olma şansı oldukça zayıftır. Çarpışmalar görürsem, ilk 5 veya 6'yı yapabilirim. Onun eşsiz anahtarını 39d7e yapmak. Bu açıkça herkese açıktır (karakterler), böylece arkadaşları onu doğrudan ekleyebilir ve sohbet veya sohbet üzerinden oyun yaparken belirtmeye yardımcı olur.
underscorediscovery

Anahtarların ne kadar süre geçerli kalması gerekir? Bu, ne kadar benzersiz olmaları gerektiğini ve eski anahtarları yeniden kullanıp kullanamayacağınızı etkiler.
Tim Holt

@Anahtarlar en fazla 2 saat geçerli olabilir.
Zain Shaikh

Yanıtlar:


6

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


iyi, sanırım kullanıcı adlarıyla gitmeliyim, en azından kopya olmayacaklar ve hatta kullanıcı dostular. teşekkürler :)
Zain Shaikh

3

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.


öneriniz için teşekkür ederim, şimdi kullanıcı adlarını @Tetrad tarafından önerilen benzersiz anahtar olarak kullanacağım.
Zain Shaikh

3

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.


öneriniz için teşekkür ederim, şimdi kullanıcı adlarını @Tetrad tarafından önerilen benzersiz anahtar olarak kullanacağım.
Zain Shaikh

0

Bir oyuncunun e-posta adresini benzersiz bir tanımlayıcı olarak kullanabilirsiniz. Eminim bunu hatırlayabilirler :)


öneriniz için teşekkür ederim, şimdi kullanıcı adlarını @Tetrad tarafından önerilen benzersiz anahtar olarak kullanacağım.
Zain Shaikh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.