このページ
ビデオポーカー(暗号化版)
このページ
概要
このページでは、暗号技術を用いて配られるカードが事前に決定されるビデオポーカーのプレイ方法について解説します。ビデオポーカーの基本ルールがわからない場合は、私のビデオポーカーのメインページをご覧ください。
このページでは、Cypto.Games を取り上げます。Cypto.Games には、以下の3種類のビデオポーカーがあります。
- ジャック以上
- 10以上
- ボーナスポーカー
プレイヤーは10クレジットを賭ける必要がありますが、仮想通貨の価値はプレイヤーが自由に決めることができます。私の意見では、10クレジットというステップは、不必要に状況を混乱させています。
公正なカジノ
ボーナスコード
分析
以下の表は、6-9-20-75-500ジャックス・オア・ベターのペイテーブルを分析したものです。右下のセルはリターンが97.97%で、ハウスエッジは2.03%です。
ジャックス・オア・ベター分析
イベント | 支払う | 組み合わせ | 確率 | 戻る |
---|---|---|---|---|
ロイヤルフラッシュ | 500 | 34,706,466 | 0.000021 | 0.010447 |
ストレートフラッシュ | 75 | 1億8417万8161 | 0.000111 | 0.008316 |
フォー・オブ・ア・カインド | 20 | 3,924,486,891 | 0.002363 | 0.047252 |
フルハウス | 9 | 19,115,939,799 | 0.011508 | 0.103572 |
フラッシュ | 6 | 19,427,500,088 | 0.011696 | 0.070173 |
真っ直ぐ | 4 | 18,354,238,557 | 0.011049 | 0.044198 |
スリー・オブ・ア・カインド | 3 | 123,573,760,275 | 0.074393 | 0.223178 |
ツーペア | 2 | 214,462,314,819 | 0.129108 | 0.258217 |
ジャックス・オア・ベター | 1 | 356,047,418,052 | 0.214344 | 0.214344 |
その他すべて | 0 | 905,977,999,992 | 0.545408 | 0.000000 |
合計 | 1,661,102,543,100 | 1.000000 | 0.979696 |
以下の表は、5-6-22-75-500 Tens or Betterのペイテーブルを分析したものです。右下のセルはリターンが97.97%で、ハウスエッジは2.03%です。
10以上の分析
イベント | 支払う | 組み合わせ | 確率 | 戻る |
---|---|---|---|---|
ロイヤルフラッシュ | 500 | 38,106,048 | 0.000023 | 0.011470 |
ストレートフラッシュ | 75 | 1億8783万8625 | 0.000113 | 0.008481 |
フォー・オブ・ア・カインド | 22 | 3,915,577,076 | 0.002357 | 0.051859 |
フルハウス | 6 | 19,084,542,744 | 0.011489 | 0.068934 |
フラッシュ | 5 | 18,600,477,537 | 0.011198 | 0.055988 |
真っ直ぐ | 4 | 20,611,548,487 | 0.012408 | 0.049633 |
スリー・オブ・ア・カインド | 3 | 123,201,590,075 | 0.074169 | 0.222506 |
ツーペア | 2 | 213,933,852,009 | 0.128790 | 0.257581 |
10以上の数字 | 1 | 420,598,763,532 | 0.253205 | 0.253205 |
その他すべて | 0 | 840,930,246,967 | 0.506248 | 0.000000 |
合計 | 1,661,102,543,100 | 1.000000 | 0.979657 |
以下の表は、5-8-25-35-75-45-500ボーナスポーカーのペイテーブルを分析したものです。右下のセルはリターンが97.94%で、ハウスエッジは2.06%です。
10以上の分析
イベント | 支払う | 組み合わせ | 確率 | 戻る |
---|---|---|---|---|
ロイヤルフラッシュ | 500 | 35,737,262 | 0.000022 | 0.010757 |
ストレートフラッシュ | 45 | 1億7219万1438 | 0.000104 | 0.004665 |
4枚のエース | 70 | 3億2556万6459円 | 0.000196 | 0.013720 |
2、3、4が4つ | 35 | 875,937,305 | 0.000527 | 0.018456 |
5からKまでの4つの数字 | 25 | 2,725,708,639 | 0.001641 | 0.041023 |
フルハウス | 8 | 19,133,720,127 | 0.011519 | 0.092149 |
フラッシュ | 5 | 18,714,893,725 | 0.011267 | 0.056333 |
真っ直ぐ | 4 | 18,432,640,328 | 0.011097 | 0.044387 |
スリー・オブ・ア・カインド | 3 | 123,733,729,692 | 0.074489 | 0.223467 |
ツーペア | 2 | 214,762,339,278 | 0.129289 | 0.258578 |
ジャックス・オア・ベター | 1 | 358,572,571,638 | 0.215864 | 0.215864 |
その他すべて | 0 | 903,617,507,209 | 0.543987 | 0.000000 |
合計 | 1,661,102,543,100 | 1.000000 | 0.979398 |
公正なゲーム
このバージョンのビデオポーカーは、暗号通貨を扱うインターネットカジノでのみプレイされているようです。簡単に説明すると、このゲームでは0から51までの10個の固有の乱数をそれぞれ1/52の確率でランダムに選び、デッキの10枚のカードに割り当てます。最初の5つの数字はプレイヤーがディールで受け取るカードを決定し、次の5つの数字はドロー時にプレイヤーが順番に受け取るカードを決定します。例えば、プレイヤーが2枚のカードを捨てた場合、ドロー時にリストの6番目と7番目のカードを受け取ります。捨てられたカードの位置は関係ありません。
以下の暗号技術の使用方法の説明は、読者が暗号技術の概念にある程度精通していることを前提としています。基本的な内容については、私のサイコロ(暗号化版)のページをご覧ください。より高度な読者のために、ゲームがランダムに10枚のカードを選ぶプロセスを以下に示します。
- 「position」というポインターを定義し、それを 0 に設定します。
- サーバー、クライアント シード、サーバー シードをこの順序で結合します。
- 手順 2 の文字列の SHA-512 ハッシュを生成します。
- 手順 3 のハッシュの「位置」から最初の 2 文字を 16 進数から 10 進数に変換します。
- 4 から末尾の 2 桁を取得します。
- ステップ 5 の結果が 51 以下で、まだ見つかっていない場合は、それが最初の 10 枚のカードのうちの 1 枚になります。
- 「位置」を 2 増やします。
- 10 枚の異なるカードが見つかるまで、手順 4 ~ 7 を繰り返します。
- 最初に見つかった 5 枚のカードが、左から右の順に配られます。
- 2枚目の5枚のカードは、ドロー時に配られる順番待ちの列に並びます。例えば、プレイヤーが3枚のカードを引いた場合、6枚目、7枚目、8枚目のカードが配られます。
- 手順 6 から実際のカードまでのカードの位置を取得するには、次の手順を実行します。
- A. 手順 4 の結果を 13 で割り、余りを求めます。
- B. 手順 11A の結果を次のようにマッピングしてランクを取得します。0 を A、1 を 2、2 を 3、...、9 を 10、10 を J、11 を Q、12 を K にします。
- C. 手順 4 の結果を 13 で割り、余りを DROP します。
- D. 手順 11C の結果を次のようにマッピングしてスーツを取得します。0 をスペード、1 をハート、2 をダイヤ、3 をクラブ。
次の表は、数字からトランプカードへの変換を示しています。
カード変換表
ランク | スペード | ハート | ダイヤモンド | クラブ |
---|---|---|---|---|
あ | 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 |
質問 | 11 | 24 | 37 | 50 |
K | 12 | 25 | 38 | 51 |
これは例を必要としていると思いませんか?一つ例を挙げてみましょう。
上記の「おそらく公平」画面で私が達成したい 2 つの重要なことは、デフォルトのものではなく自分のクライアント シード (bc7v9bn70d7n07sn) を選択し、次のサーバー シード (64e701539ecf4c03b90ecd957d6675b2f72c3fd84f04dc5eb63eed8b9a58b95b) のハッシュを記録することです。これは、「次のサーバー シード SHA256」というタイトルの行にあります。
上の画面では、私はジャック/エースのオフスーツを 1 番目と 4 番目の位置に持っています。
上の画面では、ドローでジャックのペアに改善しています。
上のスクリーンショットでは、「Fair Gaming」に戻り、カジノが 2 つのシードをどのように使用してゲームで実際に表示されるカードを取得するかを確認しました。
上の画面は、どのカードを配るべきだったかを判断するために必要な情報を示しています。順を追って説明しましょう。
- 手順は曖昧ですが、サーバーシードとクライアントシードをこの順番で結合するはずです。そうすると、2XMpPAbEw3qdH3HQla2K5zNwoNEFHOEYolkB969jbc7v9bn70d7n07sn が生成されます。
- 次に、ステップ1の結果のハッシュを取得します。結果は3a959bbaffd9b3928b28431c2ee688792c67a45f1933b9e11af3c7784a7bbda5674d2e768ac330a04982b9fa943c4c2cf49c952d9db956b1cd3b38c006c3a2d6となります。各文字は0から9までの数字、またはAからFまでの文字であることに注意してください。全体として、16進数では非常に大きな数値になります。
- ハッシュの最初の 2 文字 (3a) を 16 進数から 10 進数に変換します。3*16 1 + a*16 0 = 48 + 10 = 58。
- 手順 3 から末尾の 2 桁を取得します (桁は 2 桁しかありません)。それでも 58 です。
- ステップ4の結果が0から51の場合、それをカードにマッピングします。58>51なので、ハッシュの次の2桁に進みます。
- ハッシュの次の 2 桁は 95 です。これは 10 進数では 9*16 1 + 5*16 0 = 144 + 5 = 149 になります。
- 149の最後の2桁は49で、0から51の範囲にあるので、カードに割り当てます。具体的には、49はクラブのジャックに割り当てます。これは左から最初に配られるカードです。
- ハッシュの次の 2 桁 (9b) を 16 進数から 10 進数に変換します。9*16 1 + b*16 0 = 144 + 11 = 155。
- 最後のステップの末尾の 2 桁、つまり 55 を取得します。
- 55 は 0 から 51 の範囲外なので、ハッシュ内のその 2 桁をスキップします。
- ハッシュの次の 2 桁 (ba) を取得し、16 進数から 10 進数に変換します。b*16 1 + a*16 0 = 11*16 + 10*1 = 176 + 10 = 186。
- 最後のステップの末尾の 2 桁は 86 です。
- 86 は 0 から 51 の範囲外なので、ハッシュ内のその 2 桁をスキップします。
- ハッシュの次の 2 桁 (ff) を取得し、16 進数から 10 進数に変換します。f*16 1 + f*16 0 = 15*16 + 15*1 = 240 + 15 = 255。
- 最後のステップの末尾の 2 桁、つまり 55 を取得します。
- 55 は 0 から 51 の範囲外なので、ハッシュ内のその 2 桁をスキップします。
- ハッシュの次の 2 桁 (d9) を 16 進数から 10 進数に変換します。d*16 1 + 9*16 0 = 13*16 + 9*1 = 208 + 9 = 217。
- 最後のステップの末尾の 2 桁、つまり 17 を取得します。
- 17は0から51の範囲にあるので、カードにマッピングします。具体的には、17はハートの5にマッピングされます。これは左から2番目に配られるカードです。
- ハッシュの次の 2 桁 (b3) を 16 進数から 10 進数に変換します。11*16 1 + 3*16 0 = 13*16 + 9*1 = 176 + 3 = 179。
- 最後のステップの末尾の 2 桁は 79 です。
- 79 は 0 から 51 の範囲外なので、ハッシュ内のその 2 桁をスキップします。
- ハッシュの次の 2 桁 (92) を 16 進数から 10 進数に変換します。9*16 1 + 2*16 0 = 9*16 + 2*1 = 208 + 9 = 146。
- 最後のステップの末尾の 2 桁は 46 です。
- 46は0から51の範囲にあるので、カードにマッピングします。具体的には、46は8またはクラブにマッピングされます。これは左から3枚目のカードになります。
- ハッシュの次の 2 桁 (8b) を 16 進数から 10 進数に変換します。8*16 1 + 11*16 0 = 9*16 + 2*1 = 128 + 11 = 139。
- 最後のステップの末尾の 2 桁は 39 です。
- 39は0から51の範囲にあるので、カードにマッピングします。具体的には、39はクラブのエースにマッピングされます。これは左から4枚目のカードになります。
- ハッシュの次の 2 桁 (28) を 16 進数から 10 進数に変換します。2*16 1 + 8*16 0 = 2*16 + 8*1 = 32 + 8 = 40。
- 40は0から51の範囲にあるので、カードにマッピングします。具体的には、40はクラブの2にマッピングされます。これは配られたカードの最後のカード、右側になります。
- 3 枚のカードを捨てたので、ハッシュ内で次の 3 枚のユニークなカードを見つけて、それらを置き換える必要があります。
- ハッシュの次の2桁(43)を16進数から10進数に変換します。4*16 1 + 3*16 0 = 4*16 + 3*1 = 67。
- ハッシュの次の 2 桁 (1c) を 16 進数から 10 進数に変換します。1*16 1 + c*16 0 = 1*16 + 12*1 = 38。
- 38は0から51までの範囲にあり、唯一の数字なので、ダイヤの3にマッピングします。これは最初に配られるカードです。
- ハッシュの次の 2 桁 (2e) を 16 進数から 10 進数に変換します。2*16 1 + e*16 0 = 2*16 + 14*1 = 32 + 14 = 46。
- 46 もハッシュで既に見つかったため、これら 2 つの位置をスキップします。
- ハッシュの次の 2 桁 (e6) を取得し、16 進数から 10 進数に変換します。e*16 1 + 6*16 0 = 14*16 + 6*1 = 230。
- 最後のステップの末尾の 2 桁、つまり 30 を取得します。
- 30は0から51の範囲にあり、まだ見つかっていないので、カードにマッピングします。具体的には、30はダイヤの5にマッピングされます。これが2枚目の交換カードとなります。
- ハッシュの次の 2 桁 (88) を 16 進数から 10 進数に変換します。8*16 1 + 8*16 0 = 136。
- 最後のステップの末尾の 2 桁は 36 です。
- 36は0から51の範囲にあり、まだ見つかっていないので、カードにマッピングします。具体的には、36はダイヤのジャックにマッピングされます。これが3枚目の交換カードとなります。
- もうカードを探す必要はありません。手札は得点計算の準備ができており、プレイヤーは賞金を受け取ることができます。
要約すると、次の表は、ハッシュ、10 進数変換、およびカード変換 (存在する場合) から一度に 2 文字を示しています。
ハッシュからカードへの変換
ハッシュ キャラクター | 小数点 変換 | 右2 数字 | 遊ぶ カード |
---|---|---|---|
3a | 58 | 58 | または |
95 | 49 | 49 | クラブのジャック |
9b | 155 | 55 | または |
バ | 186 | 86 | または |
ff | 55 | 55 | または |
d9 | 217 | 17 | ハートの5 |
b3 | 179 | 79 | または |
92 | 146 | 46 | クラブの8 |
8b | 139 | 39 | クラブのエース |
28 | 40 | 40 | クラブの2 |
43 | 67 | 67 | または |
1c | 28 | 28 | ダイヤの3 |
2e | 46 | 46 | r/p/c |
e6 | 230 | 30 | ダイヤの5 |
88 | 136 | 36 | ダイヤのジャック |
鍵:
o/r = カードの10進数変換が範囲外です
r/p/c = 前のカードの繰り返し
公平な結果を得るために、ここまでの手順が面倒に思えるなら、朗報です!それを実行するスクリプトを書きました。PHP Sandboxに保存してあります。これは素晴らしいリソースです!使用するには、4行目にサーバー(カジノ)シード、5行目にクライアント(ご自身)シードを入力し、「コード実行」をクリックするだけです。あなたが受け取る運命のカードは、下の結果ボックスに表示されます。
万が一、コードに何か問題が発生した場合には、下のボタンをクリックしてコードを表示することができます。
このページでは、暗号技術を用いて配られるカードが事前に決定されるビデオポーカーのプレイ方法について解説します。ビデオポーカーの基本ルールがわからない場合は、私のビデオポーカーのメインページをご覧ください。
このページでは、Cypto.Games を取り上げます。Cypto.Games には、以下の3種類のビデオポーカーがあります。
- ジャック以上
- 10以上
- ボーナスポーカー
プレイヤーは10クレジットを賭ける必要がありますが、仮想通貨の価値はプレイヤーが自由に決めることができます。私の意見では、10クレジットというステップは、不必要に状況を混乱させています。
次に、「コード実行」をクリックします。下の結果ボックスには、あなたが受け取ると予想されたカードと、賭けが行われる前に提供されたサーバーシードがハッシュ化されているという検証が表示されます。
以下にコードのコピーも示します。
[spoiler=ビデオポーカー公正賭博規則]
// Crypto.Games 向けビデオポーカーゲーム変換 $server_seed = "2XMpPAbEw3qdH3HQla2K5zNwoNEFHOEYolkB969j"; $client_seed = "bc7v9bn70d7n07sn"; $next_hash = "64e701539ecf4c03b90ecd957d6675b2f72c3fd84f04dc5eb63eed8b9a58b95b"; $rank_array=配列("A",2,3,4,5,6,7,8,9,10,"J","Q","K"); $suit_array=array("スペード","ハート","ダイヤモンド","クラブ"); $cards_found=0; $位置=0; $combined_seed = $server_seed.$client_seed; echo "結合シード = $combined_seed\n"; $combined_hash = ハッシュ('sha512'、$combined_seed); echo "結合されたシードのハッシュ = $combined_hash\n"; する { $first_two=substr($combined_hash、$position、2); $hex_to_dec=hexdec($first_two)%100; ($hex_to_dec <=51) の場合 { $繰り返し=0; ($cards_found>0) の場合 { ($i=0; $i<$cards_found; $i++) の場合 { if ( $hex_to_dec == $card_array[$i] ) { $repeat=1; } } } ($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; ($cards_found<=5) の場合 { echo "カードを配る $game_position =\t$rank_array[$rank] の $suit_array[$suit]\n"; } それ以外 { echo "$game_position =\t$rank_array[$rank]の$suit_array[$suit]のカードを引く\n"; } } } $位置+=2; ($position==128)の場合 { echo "エラー -- ハッシュにスペースがありません。\n"; $cards_found=10; } } $cards_found<10 の間; $server_seed_hash = ハッシュ('sha256'、$server_seed); ($server_seed_hash==$next_hash) の場合 { echo "サーバーシードが一致しました。\n"; } それ以外 { echo "サーバーシードが一致しません!\n"; echo "サーバーシード =\t$server_seed\n"; echo "サーバーシードハッシュ =\t$server_seed_hash\n"; echo "次のハッシュとされるもの=\t$next_hash\n"; } // 手順 // 1. 「位置」を 0 に移動します。 // 2. サーバー、クライアント シード、サーバー シードをこの順序で結合します。 // 3. 手順 2 の文字列の SHA-512 ハッシュを生成します。 // 4. 手順 3 のハッシュの「位置」から最初の 2 文字を 16 進数から 10 進数に変換します。 // 5. 4 から末尾の 2 桁を取得します。 // 6. 手順 5 の結果が 51 以下で、まだ見つかっていない場合は、それが最初の 10 枚のカードのうちの 1 枚になります。 // 7. 「position」を2増やします。 // 8. 10 枚のユニークなカードが見つかるまで、手順 4 ~ 7 を繰り返します。 // 9. 最初に見つかった 5 枚のカードが、左から右の順に配られます。 // 10. 次の5枚のカードは、ドロー時に配られるキューに入れられます。例えば、プレイヤーが3枚のカードを引いた場合、キューの6枚目、7枚目、8枚目のカードを受け取ります。// 11 手順 6 のカードの位置を実際のカードに取得するには、次のようにします。 // A. 手順 4 の結果を 13 で割り、余りを取得します。 // B. 手順 11A の結果を次のようにマップしてランクを取得します。0 を A、1 を 2、2 を 3、...、9 を 10、10 を J、11 を Q、12 を K にします。 // C. 手順 4 の結果を 13 で割り、余りを DROP します。 // D. 手順 11C の結果を次のようにマップしてスーツを取得します。0 をスペード、1 をハート、2 をダイヤ、3 をクラブにします。 ?>[/ネタバレ]