Pergunta

Eu estou codificação um jogo de tabuleiro, onde há um saco de possíveis peças. Cada turno, os jogadores remover peças do saco selecionados aleatoriamente de acordo com certas regras.

Para a minha aplicação, pode ser mais fácil para dividir o saco inicialmente em piscinas para um ou mais jogadores. Estas piscinas seriam selecionados aleatoriamente, mas agora diferentes jogadores seria picking a partir de sacos diferentes. Isso é diferente?

Se a bolsa de um jogador correu para fora, mais seria mudada aleatoriamente para ele do estoque geral.

Foi útil?

Solução

Enquanto:

  • a partição em sacos de "pool" é aleatória
  • cessão de jogadores para um determinado saco de piscina é aleatória
  • o jogo é tal que itens desenhados pelos jogadores são efetivamente removidos do saco (nunca mais voltou para o saco, ou qualquer outro saco, para a duração do jogo atual)
  • os jogadores não estão cientes do conteúdo do qualquer dos sacos

As duas abordagens ( "originais" com um grande saco comum, "modificados" com um saco de piscina por jogador são equivalentes no que diz respeito a probabilidades.

Ela só fica um pouco complicado para o final do jogo, quando alguns dos sacos dos jogadores estão vazios. O mais justo para deixar escolher a partir de 100% dos itens ainda em jogo, portanto, ambos devem escolher a partir do qual o saco que escolher e [cegamente, é claro] escolher um item da referida bolsa.

Este problema ilustrar uma característica interessante de probabilidades que é que probabilidades são relativos à quantidade de um conhecimento tem sobre a situação . Por exemplo, o anfitrião jogo pode muito bem saber que o saco "pool" atribuído a dizer o jogador X não inclui qualquer carta diz "A" (pensamento sobre scrabble), mas desde que nenhum dos jogadores sabem disso (e desde que o partições no saco piscina era totalmente aleatório), o jogo deixa de ser justo, e jogador "X" ainda tem que assumir que sua / seu provavelmente de acertar um "a" na próxima vez que uma carta é desenhada, é o mesmo como se todas as letras restantes estavam disponíveis para ele / ela.

Edit:
Não obstante a validade matemática da afirmação de que ambos os procedimentos são totalmente equivalentes, percepção é um fator importante em jogos que incluem um componente de acaso (em particular se o jogo também inclui um componente oneroso). Para evitar a ira dos jogadores que não entendem isso equidade, você pode ficar com o procedimento original ...

Outras dicas

Dependendo das regras do jogo, @mjv é certo, a divisão aleatória inicial não afeta as probabilidades. Isto é análogo a um jogo onde n jogadores tirar cartas, por sua vez de um rosto para baixo deck:. Shuffle inicial da plataforma é a divisão aleatória nas "bolsas" de cartões para cada jogador

Mas se você substituir os itens após cada sorteio, ela faz questão se houver um saco ou muitos. Com um saco de qualquer item em particular acabará por ser desenhado por qualquer jogador com a mesma probabilidade. Com muitos sacos, esse item só pode ser tirada pelo jogador cujo saco foi inicialmente colocado em.

Popping até o nível de software, se as chamadas de jogo para um único saco, eu recomendo apenas programação dessa maneira: ele não deve ser mais difícil do que n sacos, e você não tem que provar o novo jogo equivalente à idade.

Minha intuição me diz que dividir uma coleção aleatória de coisas em subconjuntos aleatórios menores faria permanece igualmente aleatório ... não importa se um jogador picaretas de uma grande piscina ou um menor (que por sua vez, alimentam-se no grande)

Para um jogo que é IMHO aleatória suficiente!

Dependendo de como a segurança é fundamental, ele pode ser bom (se o dinheiro está envolvido (você ou eles) DO QUE NÃO). Eu não estou totalmente certo de que seria menos aleatória a partir da perspectiva de um jogador de ignorante.

a) Não conte com eles, sendo ignorante, o programa poderia ser quebrada e, em seguida, eles saberiam o que peças estão chegando

b) Seria muito complicado para encher os sacos de tal forma que você não introduzir vulnerabilidades. Por exemplo, vamos dar o algoritmo ingênuo de escolher um aleatoriamente e colocá-lo em um primeiro balde, tirando-o, em seguida, fazer o mesmo para o segundo balde e assim por diante. É apenas garantir-se que, se houver partes de N, o primeiro jogador tinha uma probabilidade de 1 / N de escolher uma dada peça, o segundo jogador tinha um 1 / (N-1), a terceira tinha um / (n-3) e em breve. Os jogadores podem, então, analisar as peças já jogados, a fim de descobrir as probabilidades de que outros jogadores estão segurando certas peças.

I THINK o seguinte algoritmo pode funcionar melhor, mas quase todas as pessoas têm probabilidade de errado na primeira vez que eles vêm para cima com um novo algoritmo. Não use este, apenas entender que pode cobrir a vulnerabilidade de segurança eu falei sobre: ??

  1. Criar uma lista de N ordenou itens e jogadores P instanciar
  2. Mark 1 / P dos itens aleatoriamente (com substituição) para cada jogador
  3. Faça isso várias vezes até que todos os itens N são marcadas e há um igual número de itens marcados para cada jogador (Nota: pode demorar muito mais do que você pode viver de acordo com N e P)
  4. Coloque os itens apropriados no balde do jogador e aleatoriamente reorganizar (não use um algoritmo de troca de lugar)

Mesmo assim, depois de tudo isso, você ainda pode ter uma vulnerabilidade a alguém descobrir o que está em seu balde de um exploit. Vara com uma piscina combinado, ainda é complicado para escolher realmente aleatoriamente, mas vai tornar sua vida mais fácil.

Edit: Eu sei que os sons de tom tipo de jerky. Eu, principalmente, incluído tudo o que negrito para pessoas que possam ler este fora de contexto e experimentar alguns destes algoritmos. Eu realmente desejo-lhe bem: -)

Edit 2: Em uma análise mais aprofundada, eu acho que o problema com a escolha, a fim pode reduzir a ter jogadores se revezando em primeiro lugar. Se isso é nas regras já que pode não importa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top