Byte ke Float

Keluaran dari fungsi Pembangkit Angka Acak (byteGenerator) adalah hash heksadesimal 32-byte. Sebagaimana dijelaskan dalam implementasi kursor, kami menggunakan 4 byte data untuk menghasilkan satu hasil permainan. Setiap set 4 byte digunakan untuk menghasilkan float antara 0 dan 1 (4 byte digunakan, bukan satu, untuk memastikan tingkat presisi yang lebih tinggi saat menghasilkan float.) Dengan float yang dihasilkan inilah kami memperoleh keluaran formal dari algoritma pembuktian adil sebelum dikonversi menjadi kejadian permainan.

// Convert the hash output from the rng byteGenerator to floats
function generateFloats ({ serverSeed, clientSeed, nonce, cursor, count }) {
  // Random number generator function
  const rng = byteGenerator({ serverSeed, clientSeed, nonce, cursor });
  // Declare bytes as empty array
  const bytes = [];

  // Populate bytes array with sets of 4 from RNG output
  while (bytes.length < count * 4) {
    bytes.push(rng.next().value);
  }

  // Return bytes as floats using lodash reduce function
  return _.chunk(bytes, 4).map(bytesChunk =>
    bytesChunk.reduce((result, value, i) => {
      const divider = 256 ** (i + 1);
      const partialResult = value / divider;
      return result + partialResult;
    }, 0)
  );
};

Mengambang ke Acara Permainan

Jika proses menghasilkan keluaran acak bersifat universal untuk semua permainan kami, pada titik inilah dalam pembuatan hasil permainan, prosedur unik diterapkan untuk menentukan penerjemahan dari float ke peristiwa permainan. Float yang dihasilkan secara acak dikalikan dengan kemungkinan hasil yang tersisa dari permainan tertentu yang sedang dimainkan. Misalnya: Dalam permainan yang menggunakan setumpuk 52 kartu, hal ini cukup dilakukan dengan mengalikan float dengan 52. Hasil persamaan ini kemudian dikonversi menjadi peristiwa permainan yang sesuai. Untuk permainan yang membutuhkan beberapa peristiwa permainan, proses ini berlanjut melalui setiap 4 byte yang sesuai dalam rantai hasil yang dihasilkan menggunakan fungsi byteGenerator yang telah dijelaskan.

Acak Acara Permainan

Untuk permainan seperti Keno, Mines, Pump, Chicken dan Video Poker, di mana hasilnya tidak dapat diduplikasi, kami kemudian memanfaatkan Perombakan Fisher-Yates Algoritma. Prosedur ini memengaruhi proses konversi dari float ke peristiwa permainan karena setiap kali peristiwa permainan diterjemahkan, jumlah kemungkinan peristiwa permainan yang tersisa telah berkurang untuk setiap langkah yang tersisa dalam rantai hasil. Sebagai contoh, dalam video poker, pada awalnya terdapat 52 kartu yang tersedia dalam satu dek lengkap, sehingga peristiwa permainan pertama diterjemahkan dengan mengalikan float dengan 52. Setelah kartu ini dibagikan, hanya tersisa 51 kartu dalam dek, sehingga penerjemahan kartu kedua dilakukan dengan mengalikan float kedua yang dihasilkan dengan 51. Hal ini berlanjut dengan cara yang sama hingga semua peristiwa permainan yang diperlukan telah dihasilkan. Mengenai Ranjau, Pompa, Ayam, dan Keno, ini hanyalah masalah penerapan proses yang sama seperti yang dijelaskan pada video poker, tetapi mengubahnya menjadi ubin atau lokasi pada papan atau kisi, memastikan bahwa setiap kejadian permainan yang dihasilkan belum pernah dilakukan sebelumnya dalam rangkaian hasil.