Como crio IDs de jogos exclusivos, que também são amigáveis ao usuário - para que um usuário possa facilmente fornecer esse ID de jogo a alguém por ingressar no jogo.
Estou criando meu jogo no Silverlight com c #.
Como crio IDs de jogos exclusivos, que também são amigáveis ao usuário - para que um usuário possa facilmente fornecer esse ID de jogo a alguém por ingressar no jogo.
Estou criando meu jogo no Silverlight com c #.
Respostas:
Se você tem uma fonte autorizada, esse problema é fácil (que eu suponho que se o usuário estiver colocando um ID para se conectar a um jogo, isso será redirecionado usando um servidor central). Basta usar um algoritmo como http://www.safepasswd.com/ para criar UIDs que são basicamente palavras do dicionário + números pequenos. Se o número de servidores for relativamente pequeno, você poderá executar um algoritmo ingênuo que seleciona algo aleatório até que não esteja em uso no momento.
Se você deseja que seus clientes sejam a fonte dos UIDs, terá que jogar fora a parte amigável desses IDs. Mas é mais fácil fazer isso no lado da codificação, já que você usaria System.Guid.NewGuid (). ToString (). Isso é para todos os efeitos e com garantia de ser exclusivo 100% do tempo. fonte
Por outro lado, os GUIDs são um pouco exagerados. Seria mais fácil lembrar IPs ou nomes de usuários b
Uma abordagem seria usar um dicionário e selecionar palavras com base em um esquema de numeração. Talvez use um número inteiro de 32 bits exclusivo para identificar cada usuário e, para cada uma das palavras de 16 bits, indexar um dicionário (matriz de palavras). Dessa forma, você pode representar seu ID usando palavras reais e cada identificador seria único.
Outra abordagem seria implementar algo semelhante ao que o Steam usa: permitir que os usuários efetuem login com um ID que eles mesmos escolheram e, posteriormente, especifique qualquer ID de exibição que eles desejem. Por exemplo, o ID de login pode ser o email e o nome de exibição pode ser o primeiro nome. Dessa forma, o usuário pode compartilhar seu identificador exclusivo, mas também ser identificado por um nome de sua escolha.
A resposta de FuzzYspo0N nos comentários é muito boa. Basicamente, esse problema se resume a tornar os códigos de jogo exclusivos o suficiente para evitar colisões, sem torná-los arbitrariamente complexos. Os GUIDs padrão de 128 bits obtêm sua exclusividade usando informações locais (como o MAC e outros fatores) para reduzir muito a probabilidade de uma colisão entre máquinas e, em seguida, adicionar um fator aleatório e baseado no tempo para aumentar a probabilidade de colisão dentro dessa máquina. muito pequeno.
Você pode seguir a mesma estratégia para gerar seus próprios IDs. Comece com algo memorável para o usuário, mas relativamente exclusivo (se o usuário tiver um nome de usuário global que seja um bom começo ou o nome da máquina / IP) e adicione outros fatores até gerar algo único. Ao escolher algo local como o nome da máquina, você restringe o conjunto de possíveis colisões o suficiente para poder começar a consultar se há alguma. Por exemplo, depois de restringi-lo apenas a esse usuário ou a essa máquina, você sabe exatamente onde precisa ir para verificar se esse UID já está em uso.
Por exemplo, se eu souber que meu nome de usuário é único em todo o sistema, MrCranky: 1 é um UID válido. Se eu puder verificar se MrCranky: 1 já está em uso (por algum outro método), continuarei tentando números até encontrar um único.
Usando algum outro fator (como aleatoriedade ou tempo), posso aumentar a probabilidade de escolher um ID não utilizado pela primeira vez. Por exemplo, se você sabe que não é possível criar mais de uma sessão por segundo, usar MrCranky: 122730 (o horário atual, o segundo) me proporcionará um ID exclusivo que é relativamente memorável para o usuário.
Desde que você tenha alguma informação relativamente única (não precisa ser perfeita, apenas a maioria exclusiva), você pode usá-la como um bloco de partida, e isso significa que a parte verdadeiramente exclusiva (um código inteiro de algum tipo) pode muito mais curto e, portanto, o UID é mais memorável.
Você pode usar o endereço de e-mail de um jogador como um identificador exclusivo. Tenho certeza que eles podem se lembrar disso :)