Provavelmente justo
Conversão de Bytes para Floats
A saída da função Gerador de Números Aleatórios (byteGenerator) é um hash hexadecimal de 32 bytes. Como explicado na implementação do cursor, usamos 4 bytes de dados para gerar um único resultado do jogo. Cada conjunto de 4 bytes é usado para gerar números de ponto flutuante entre 0 e 1 (4 bytes são usados em vez de um para garantir um nível de precisão maior na geração do número de ponto flutuante). É com esses números de ponto flutuante gerados que derivamos a saída formal do algoritmo comprovadamente justo antes de ser traduzido em eventos do jogo.
// Convert the hash output from the rng byteGenerator to floats
function generateFloats ({ serverSeed, clientSeed, nonce, cursor, count }) {
const rng = byteGenerator({ serverSeed, clientSeed, nonce, cursor });
const bytes = [];
while (bytes.length < count * 4) {
bytes.push(rng.next().value);
}
return _.chunk(bytes, 4).map(bytesChunk =>
bytesChunk.reduce((result, value, i) => {
const divider = 256 ** (i + 1);
const partialResult = value / divider;
return result + partialResult;
}, 0)
);
};Floats para Eventos de Jogo
Embora o processo de geração de resultados aleatórios seja universal para todos os nossos jogos, é neste ponto da geração do resultado do jogo que um procedimento único é implementado para determinar a tradução de números de ponto flutuante em eventos do jogo.O número de ponto flutuante gerado aleatoriamente é multiplicado pelos possíveis resultados restantes do jogo em questão. Por exemplo: em um jogo com um baralho de 52 cartas, isso seria feito simplesmente multiplicando o número de ponto flutuante por 52. O resultado dessa equação é então convertido em um evento de jogo correspondente. Para jogos que exigem múltiplos eventos, esse processo se repete a cada conjunto de 4 bytes correspondente na cadeia de resultados gerada pela função byteGenerator descrita.Embaralhamento de Eventos do Jogo
Para jogos como Keno, Mines e Video Poker, onde os resultados não podem ser duplicados, utilizamos então o algoritmo Fisher-Yates shuffle . Este procedimento influencia o processo de conversão de números de ponto flutuante para eventos de jogo, pois a cada conversão de um evento de jogo, o número de possíveis eventos restantes é reduzido para as etapas subsequentes na cadeia de resultados.Por exemplo, no vídeo pôquer, inicialmente há 52 cartas disponíveis no baralho completo e, portanto, o primeiro evento do jogo é traduzido multiplicando-se o valor inicial (float) por 52. Após a distribuição dessa carta, restam apenas 51 cartas no baralho e, consequentemente, a tradução da segunda carta é feita multiplicando-se o segundo valor inicial (float) gerado por 51. Isso continua da mesma forma até que todos os eventos do jogo necessários tenham sido gerados.No que diz respeito a jogos como Mines e Keno, trata-se simplesmente de implementar o mesmo processo explicado para o video poker, mas alterando para peças ou locais no tabuleiro ou grade, garantindo que cada evento de jogo gerado não tenha sido realizado anteriormente na sequência de resultados.



