Nesta página
Vídeo Poker (Versão Criptografada)
Nesta página
Introdução
Esta página descreve um método de jogar video poker que utiliza criptografia para garantir que as cartas distribuídas sejam predeterminadas. Se você não estiver familiarizado com as regras básicas do video poker, consulte minha página principal sobre video poker .
Para os propósitos desta página, estou analisando o Crypto.Games, por enquanto. Eles têm três versões de video poker, como segue:
- Valetes ou melhor
- Dez ou melhor
- Poker bônus
O jogador deve apostar 10 créditos, embora possa escolher o valor em criptomoeda. Na minha opinião, essa exigência de dez créditos só complica as coisas desnecessariamente.
Cassinos comprovadamente justos
Código de bônus
Análise
A tabela a seguir mostra minha análise da tabela de pagamentos 6-9-20-75-500 do jogo Jacks or Better. A célula inferior direita mostra um retorno de 97,97%, o que equivale a uma vantagem da casa de 2,03%.
Análise de Jacks or Better
| Evento | Paga | Combinações | Probabilidade | Retornar |
|---|---|---|---|---|
| Rubor Real | 500 | 34.706.466 | 0,000021 | 0,010447 |
| Straight Flush | 75 | 184.178.161 | 0,000111 | 0,008316 |
| Quatro de um mesmo tipo | 20 | 3.924.486.891 | 0,002363 | 0,047252 |
| Casa cheia | 9 | 19.115.939.799 | 0,011508 | 0,103572 |
| Descarga | 6 | 19.427.500.088 | 0,011696 | 0,070173 |
| Direto | 4 | 18.354.238.557 | 0,011049 | 0,044198 |
| Três de um mesmo tipo | 3 | 123.573.760.275 | 0,074393 | 0,223178 |
| Dois pares | 2 | 214.462.314.819 | 0,129108 | 0,258217 |
| Valetes ou Melhor | 1 | 356.047.418.052 | 0,214344 | 0,214344 |
| Todos os outros | 0 | 905.977.999.992 | 0,545408 | 0,000000 |
| Totais | 1.661.102.543.100 | 1.000000 | 0,979696 |
A tabela a seguir mostra minha análise da tabela de pagamentos 5-6-22-75-500 Tens or Better. A célula inferior direita mostra um retorno de 97,97%, o que equivale a uma vantagem da casa de 2,03%.
Análise de dez ou melhor
| Evento | Paga | Combinações | Probabilidade | Retornar |
|---|---|---|---|---|
| Rubor Real | 500 | 38.106.048 | 0,000023 | 0,011470 |
| Straight Flush | 75 | 187.838.625 | 0,000113 | 0,008481 |
| Quatro de um mesmo tipo | 22 | 3.915.577.076 | 0,002357 | 0,051859 |
| Casa cheia | 6 | 19.084.542.744 | 0,011489 | 0,068934 |
| Descarga | 5 | 18.600.477.537 | 0,011198 | 0,055988 |
| Direto | 4 | 20.611.548.487 | 0,012408 | 0,049633 |
| Três de um mesmo tipo | 3 | 123.201.590.075 | 0,074169 | 0,222506 |
| Dois pares | 2 | 213.933.852.009 | 0,128790 | 0,257581 |
| Dez ou melhor | 1 | 420.598.763.532 | 0,253205 | 0,253205 |
| Todos os outros | 0 | 840.930.246.967 | 0,506248 | 0,000000 |
| Totais | 1.661.102.543.100 | 1.000000 | 0,979657 |
A tabela a seguir mostra minha análise da tabela de pagamentos do Bonus Poker 5-8-25-35-75-45-500. A célula inferior direita mostra um retorno de 97,94%, o que equivale a uma vantagem da casa de 2,06%.
Análise de dez ou melhor
| Evento | Paga | Combinações | Probabilidade | Retornar |
|---|---|---|---|---|
| Rubor Real | 500 | 35.737.262 | 0,000022 | 0,010757 |
| Straight Flush | 45 | 172.191.438 | 0,000104 | 0,004665 |
| Quatro ases | 70 | 325.566.459 | 0,000196 | 0,013720 |
| Quatro 2s, 3s, 4s | 35 | 875.937.305 | 0,000527 | 0,018456 |
| Quatro números de 5 a K | 25 | 2.725.708.639 | 0,001641 | 0,041023 |
| Casa cheia | 8 | 19.133.720.127 | 0,011519 | 0,092149 |
| Descarga | 5 | 18.714.893.725 | 0,011267 | 0,056333 |
| Direto | 4 | 18.432.640.328 | 0,011097 | 0,044387 |
| Três de um mesmo tipo | 3 | 123.733.729.692 | 0,074489 | 0,223467 |
| Dois pares | 2 | 214.762.339.278 | 0,129289 | 0,258578 |
| Valetes ou Melhor | 1 | 358.572.571.638 | 0,215864 | 0,215864 |
| Todos os outros | 0 | 903.617.507.209 | 0,543987 | 0,000000 |
| Totais | 1.661.102.543.100 | 1.000000 | 0,979398 |
Jogo Justo
Esta versão de vídeo pôquer parece ser jogada exclusivamente em cassinos online que aceitam criptomoedas . Resumidamente, o jogo encontra dez números aleatórios únicos de 0 a 51, cada um com probabilidade de 1/52, e os associa a dez cartas do baralho. Os cinco primeiros números determinam as cartas que o jogador receberá na distribuição inicial e os cinco últimos determinam as cartas que o jogador receberá, em ordem, na compra. Por exemplo, se o jogador descartar duas cartas, ele receberá a 6ª e a 7ª carta da lista na compra. A posição das cartas descartadas não importa.
A explicação a seguir sobre como a criptografia é usada pressupõe que o leitor tenha alguma familiaridade com o conceito. Para os conceitos básicos, consulte minha página sobre Dados (versão criptografada) . Para os leitores mais avançados, aqui está o processo de como o jogo escolhe dez cartas aleatórias.
- Defina um ponteiro chamado "posição" e atribua a ele o valor 0.
- Junte os seeds do servidor e do cliente, e depois os seeds do servidor, nessa ordem.
- Gere um hash SHA-512 da string obtida na etapa 2.
- Converter os dois primeiros caracteres, a partir da "posição" do símbolo de cerquilha (#) da etapa 3, de hexadecimal para decimal.
- Pegue os dois dígitos finais de 4.
- Se o resultado da etapa 5 for 51 ou menos, e ainda não tiver sido encontrado, então esse será um dos dez primeiros cartões.
- Incremente a "posição" em 2.
- Continue repetindo os passos 4 a 7 até encontrar dez cartas diferentes.
- As cinco primeiras cartas encontradas serão distribuídas na rodada, começando da esquerda para a direita.
- As próximas cinco cartas serão colocadas em uma fila para serem distribuídas na rodada de compra. Por exemplo, se o jogador comprar três cartas, ele receberá a 6ª, a 7ª e a 8ª cartas da fila.
- Para obter a posição de uma carta da etapa 6 e convertê-la em uma carta real, faça o seguinte:
- A. Divida o resultado da etapa 4 por 13 e considere o resto.
- B. Mapeie o resultado da etapa 11A para obter a classificação, da seguinte forma: 0 para A, 1 para 2, 2 para 3, ... , 9 para 10, 10 para J, 11 para Q, 12 para K.
- C. Divida o resultado da etapa 4 por 13 e DESCARTE o resto.
- D. Associe o resultado da etapa 11C para obter o naipe, da seguinte forma: 0 para espadas, 1 para copas, 2 para ouros, 3 para paus.
A tabela a seguir mostra a conversão de números para cartas de baralho.
Tabela de Conversão de Cartões
| Classificação | Espadas | Corações | Diamantes | Clubes |
|---|---|---|---|---|
| UM | 0 | 13 | 26 | 39 |
| 2 | 1 | 14 | 27 | 40 |
| 3 | 2 | 15 | 28 | 41 |
| 4 | 3 | 16 | 29 | 42 |
| 5 | 4 | 17 | 30 | 43 |
| 6 | 5 | 18 | 31 | 44 |
| 7 | 6 | 19 | 32 | 45 |
| 8 | 7 | 20 | 33 | 46 |
| 9 | 8 | 21 | 34 | 47 |
| 10 | 9 | 22 | 35 | 48 |
| J | 10 | 23 | 36 | 49 |
| Q | 11 | 24 | 37 | 50 |
| K | 12 | 25 | 38 | 51 |
Isso pede um exemplo, não é? Vejamos um.
Na tela "Provavelmente Justo" acima, as duas coisas importantes que desejo realizar são escolher MINHA PRÓPRIA Semente do Cliente (em oposição à padrão) (bc7v9bn70d7n07sn) e registrar o Hash da próxima Semente do Servidor (64e701539ecf4c03b90ecd957d6675b2f72c3fd84f04dc5eb63eed8b9a58b95b), que está na linha intitulada "Próxima semente do servidor SHA256".
Na imagem acima, tenho um valete e um ás de naipes diferentes, na primeira e na quarta posições.
Na imagem acima, eu consigo um par de valetes no sorteio.
Na captura de tela acima, voltei à seção "Jogo Justo" para observar como o cassino utiliza as duas Sementes para obter as cartas reais vistas no jogo.
A imagem acima mostra o que preciso saber para determinar quais cartas deveriam ter sido distribuídas. Vou explicar passo a passo:
- As instruções são vagas, mas você deve entrar no Server Seed e no Client Seed, nessa ordem. Isso lhe dará 2XMpPAbEw3qdH3HQla2K5zNwoNEFHOEYolkB969jbc7v9bn70d7n07sn.
- Em seguida, calcule o hash do resultado da etapa 1. Isso lhe dará 3a959bbaffd9b3928b28431c2ee688792c67a45f1933b9e11af3c7784a7bbda5674d2e768ac330a04982b9fa943c4c2cf49c952d9db956b1cd3b38c006c3a2d6. Observe que cada caractere é um numeral de 0 a 9 ou uma letra de A a F. O resultado final é um número muito grande em notação hexadecimal.
- Pegue os dois primeiros caracteres do Hash (3a) e converta-os de hexadecimal para decimal: 3*16 1 + a*16 0 = 48 + 10 = 58.
- Pegue os dois dígitos finais da etapa 3 (há apenas dois dígitos), que ainda é 58.
- Se o resultado da etapa 4 for de 0 a 51, associe-o a um cartão. Como 58 > 51, passamos para os próximos dois dígitos no Hash.
- Os dois dígitos seguintes no Hash são 95. Isso se converte em 9*16 1 + 5*16 0 = 144 + 5 = 149 na base 10.
- Os dois últimos dígitos de 149 são 49, que está no intervalo de 0 a 51, então vamos associá-lo a uma carta. Mais especificamente, 49 corresponde ao Valete de Paus. Esta será a primeira carta distribuída, da esquerda para a direita.
- Pegue os próximos dois dígitos no Hash (9b) e converta-os de hexadecimal para decimal: 9*16 1 + b*16 0 = 144 + 11 = 155.
- Pegue os dois dígitos finais da última etapa, que são 55.
- 55 não está no intervalo de 0 a 51, portanto, ignore esses dois dígitos no hash.
- Pegue os próximos dois dígitos no Hash (ba) e converta-os de hexadecimal para decimal: b*16 1 + a*16 0 = 11*16 + 10*1 = 176 + 10 = 186.
- Pegue os dois dígitos finais da última etapa, que são 86.
- O número 86 não está no intervalo de 0 a 51, portanto, ignore esses dois dígitos no hash.
- Pegue os próximos dois dígitos no Hash (ff) e converta-os de hexadecimal para decimal: f*16 1 + f*16 0 = 15*16 + 15*1 = 240 + 15 = 255.
- Pegue os dois dígitos finais da última etapa, que são 55.
- 55 não está no intervalo de 0 a 51, portanto, ignore esses dois dígitos no hash.
- Pegue os próximos dois dígitos no Hash (d9) e converta-os de hexadecimal para decimal: d*16 1 + 9*16 0 = 13*16 + 9*1 = 208 + 9 = 217.
- Pegue os dois dígitos finais da última etapa, que são 17.
- O número 17 está no intervalo de 0 a 51, então associe-o a uma carta. Mais especificamente, 17 corresponde ao 5 de copas. Esta será a segunda carta distribuída, da esquerda para a direita.
- Pegue os próximos dois dígitos no Hash (b3) e converta-os de hexadecimal para decimal: 11*16 1 + 3*16 0 = 13*16 + 9*1 = 176 + 3 = 179.
- Pegue os dois dígitos finais da última etapa, que são 79.
- 79 não está no intervalo de 0 a 51, portanto, ignore esses dois dígitos no hash.
- Pegue os próximos dois dígitos no Hash (92) e converta-os de hexadecimal para decimal: 9*16 1 + 2*16 0 = 9*16 + 2*1 = 208 + 9 = 146.
- Pegue os dois dígitos finais da última etapa, que são 46.
- O número 46 está no intervalo de 0 a 51, então associe-o a uma carta. Mais especificamente, 46 corresponde ao 8 de paus. Esta será a terceira carta distribuída, da esquerda para a direita.
- Pegue os próximos dois dígitos no Hash (8b) e converta-os de hexadecimal para decimal: 8*16 1 + 11*16 0 = 9*16 + 2*1 = 128 + 11 = 139.
- Pegue os dois dígitos finais da última etapa, que são 39.
- O número 39 está no intervalo de 0 a 51, então associe-o a uma carta. Mais especificamente, 39 corresponde ao ás de paus. Esta será a quarta carta distribuída, da esquerda para a direita.
- Pegue os próximos dois dígitos no Hash (28) e converta-os de hexadecimal para decimal: 2*16 1 + 8*16 0 = 2*16 + 8*1 = 32 + 8 = 40.
- O número 40 está no intervalo de 0 a 51, então associe-o a uma carta. Mais especificamente, 40 corresponde ao 2 de paus. Esta será a última carta da rodada, à direita.
- Descartei três cartas, o que significa que precisamos encontrar as próximas três cartas únicas no Hash para substituí-las.
- Pegue os próximos dois dígitos no Hash (43) e converta-os de hexadecimal para decimal: 4*16 1 + 3*16 0 = 4*16 + 3*1 = 67.
- Pegue os próximos dois dígitos no Hash (1c) e converta-os de hexadecimal para decimal: 1*16 1 + c*16 0 = 1*16 + 12*1 = 38.
- O número 38 está no intervalo de 0 a 51 e é único, então associe-o a uma carta, que é o três de ouros. Esta é a primeira carta a ser comprada.
- Pegue os próximos dois dígitos no Hash (2e) e converta-os de hexadecimal para decimal: 2*16 1 + e*16 0 = 2*16 + 14*1 = 32 + 14 = 46.
- O número 46 já havia sido encontrado no hash, então pulamos essas duas posições.
- Pegue os próximos dois dígitos no Hash (e6) e converta-os de hexadecimal para decimal: e*16 1 + 6*16 0 = 14*16 + 6*1 = 230.
- Pegue os dois dígitos finais da última etapa, que são 30.
- O número 30 está no intervalo de 0 a 51 e ainda não foi encontrado, então vamos associá-lo a uma carta. Mais especificamente, o 30 corresponde ao 5 de ouros. Esta será a segunda carta de substituição.
- Pegue os próximos dois dígitos no Hash (88) e converta-os de hexadecimal para decimal: 8*16 1 + 8*16 0 = 136.
- Pegue os dois dígitos finais da última etapa, que são 36.
- O número 36 está no intervalo de 0 a 51 e ainda não foi encontrado, então associe-o a uma carta. Mais especificamente, o 36 corresponde ao Valete de Ouros. Esta será a terceira carta de substituição.
- Não precisamos procurar mais cartas. A mão está pronta para ser pontuada e o jogador pago.
Em resumo, a tabela a seguir mostra dois caracteres por vez, desde o hash, a conversão decimal e, em seguida, a conversão para o formato de cartão, se houver.
Conversão de hash para cartão
| Hash Personagens | Decimal Conversão | Direita Dois Dígitos | Jogando Cartão |
|---|---|---|---|
| 3a | 58 | 58 | ou |
| 95 | 49 | 49 | Valete de paus |
| 9b | 155 | 55 | ou |
| ba | 186 | 86 | ou |
| ff | 55 | 55 | ou |
| d9 | 217 | 17 | 5 de copas |
| b3 | 179 | 79 | ou |
| 92 | 146 | 46 | 8 de paus |
| 8b | 139 | 39 | Ás de paus |
| 28 | 40 | 40 | 2 de paus |
| 43 | 67 | 67 | ou |
| 1c | 28 | 28 | 3 de ouros |
| 2e | 46 | 46 | r/p/c |
| e6 | 230 | 30 | 5 de ouros |
| 88 | 136 | 36 | Valete de ouros |
Chave:
o/r = Conversão decimal fora do intervalo para um cartão
r/p/c = Repetição da carta anterior
Se tudo isso parece muito trabalhoso para garantir um resultado justo, tenho boas notícias! Criei um script para fazer isso por você, que está disponível no PHP Sandbox . É um recurso incrível! Para usá-lo, basta inserir a Seed do Servidor (cassino) na linha 4 e a Seed do Cliente (a sua) na linha 5 e clicar em "Executar Código". As cartas que você estava predestinado a receber aparecerão na caixa de resultados abaixo.
Caso ocorra algum problema com o código, você poderá visualizá-lo clicando no botão abaixo.
Esta página descreve um método de jogar video poker que utiliza criptografia para garantir que as cartas distribuídas sejam predeterminadas. Se você não estiver familiarizado com as regras básicas do video poker, consulte minha página principal sobre video poker .
Para os propósitos desta página, estou analisando o Crypto.Games, por enquanto. Eles têm três versões de video poker, como segue:
- Valetes ou melhor
- Dez ou melhor
- Poker bônus
O jogador deve apostar 10 créditos, embora possa escolher o valor em criptomoeda. Na minha opinião, essa exigência de dez créditos só complica as coisas desnecessariamente.
Em seguida, clique em Executar Código. As cartas que você estava predestinado a receber aparecerão na caixa de resultados abaixo, bem como uma verificação de que o hash da Semente do Servidor corresponde ao que foi fornecido antes da aposta ser feita.
Apresento também uma cópia do código abaixo.

// Conversão de jogo de video poker para Crypto.Games
$server_seed = "2XMpPAbEw3qdH3HQla2K5zNwoNEFHOEYolkB969j";
$client_seed = "bc7v9bn70d7n07sn";
$next_hash = "64e701539ecf4c03b90ecd957d6675b2f72c3fd84f04dc5eb63eed8b9a58b95b";
$rank_array=array("A",2,3,4,5,6,7,8,9,10,"J","Q","K");
$suit_array=array("spades","hearts","diamonds","clubs");
$cards_found=0;
$position=0;
$combined_seed = $server_seed.$client_seed;
echo "Semente combinada = $combined_seed\n";
$combined_hash = hash('sha512', $combined_seed);
echo "Hash da semente combinada = $combined_hash\n";
fazer
{
$first_two=substr($combined_hash,$position,2);
$hex_to_dec=hexdec($first_two)%100;
se ($hex_to_dec <=51)
{
$repeat=0;
se ($cards_found>0)
{
para ($i=0; $i<$cards_found; $i++)
{
se ($hex_to_dec == $card_array[$i])
{ $repeat=1; }
}
}
se ($repeat==0)
{
$card_array[$cards_found] = $hex_to_dec;
$game_position=1+($cards_found%5);
$cards_found++;
$rank=$hex_to_dec%13;
$suit=intdiv($hex_to_dec,13)%4;
se ($cards_found<=5)
{ echo "Distribua a carta $game_position =\t$rank_array[$rank] de $suit_array[$suit]\n"; }
outro
{ echo "Compre a carta $game_position =\t$rank_array[$rank] de $suit_array[$suit]\n"; }
}
}
$position+=2;
se ($posição==128)
{
echo "Erro -- Não há mais espaço no hash.\n";
$cards_found=10;
}
}
enquanto ($cards_found<10);
$server_seed_hash = hash('sha256', $server_seed);
se ($server_seed_hash==$next_hash)
{ echo "A semente do servidor corresponde.\n"; }
outro
{
echo "SEED DO SERVIDOR INCOMPATÍVEL!\n";
echo "Semente do servidor =\t$server_seed\n";
echo "Hash da semente do servidor =\t$server_seed_hash\n";
echo "Suposto próximo hash=\t$next_hash\n";
}
// Procedimento
// 1. Defina a "posição" para 0.
// 2. Junte o seed do servidor e o seed do cliente, e depois o seed do servidor, nessa ordem.
// 3. Gere um hash SHA-512 da string da etapa 2.
// 4. Converta os dois primeiros caracteres, começando na "posição" do símbolo de cerquilha (#) da etapa 3, de hexadecimal para decimal.
// 5. Pegue os dois dígitos finais de 4.
// 6. Se o resultado da etapa 5 for 51 ou menos, e ainda não tiver sido encontrado, então esse será um dos dez primeiros cartões.
// 7. Incremente a "posição" em 2.
// 8. Continue repetindo os passos 4 a 7 até encontrar dez cartas únicas.
// 9. As cinco primeiras cartas encontradas serão distribuídas na rodada, começando da esquerda para a direita.
// 10. As próximas cinco cartas serão colocadas em uma fila para serem distribuídas na rodada de compra. Por exemplo, se o jogador comprar três cartas, ele receberá a 6ª, a 7ª e a 8ª cartas da fila.// 11 Para obter a posição de uma carta da etapa 6 para uma carta real, faça o seguinte: // A. Divida o resultado da etapa 4 por 13 e pegue o resto. // B. Associe o resultado da etapa 11A para obter o valor da carta, da seguinte forma: 0 para A, 1 para 2, 2 para 3, ..., 9 para 10, 10 para J, 11 para Q, 12 para K. // C. Divida o resultado da etapa 4 por 13 e DESCARTE o resto. // D. Associe o resultado da etapa 11C para obter o naipe, da seguinte forma: 0 para espadas, 1 para copas, 2 para ouros, 3 para paus. ?> 



