在这一页
视频扑克(加密版)
在这一页
简介
本页面介绍一种使用加密技术来确保所发牌的顺序是预定顺序的视频扑克游戏方法。如果您不熟悉视频扑克的基本规则,请参阅我的视频扑克主页。
就本页而言,我目前关注的是 Cypto.Games。他们有三个版本的视频扑克,如下:
- 杰克或更好
- 十或更好
- 红利扑克
玩家必须下注10个积分,尽管玩家可以选择加密货币的价值。在我看来,10个积分的步骤毫无必要地混淆了游戏的本质。
公平公正的赌场
Bonus Code
分析
下表展示了我对6-9-20-75-500 J或Better赔率表的分析。右下角单元格显示回报率为97.97%,相当于赌场优势为2.03%。
杰克或更好的分析
事件 | 支付 | 组合 | 可能性 | 返回 |
---|---|---|---|---|
皇家同花顺 | 500 | 34,706,466 | 0.000021 | 0.010447 |
同花顺 | 75 | 184,178,161 | 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十或更好赔率表的分析。右下角单元格显示回报率为97.97%,相当于赌场优势为2.03%。
十或更好的分析
事件 | 支付 | 组合 | 可能性 | 返回 |
---|---|---|---|---|
皇家同花顺 | 500 | 38,106,048 | 0.000023 | 0.011470 |
同花顺 | 75 | 187,838,625 | 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 |
十或更好 | 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%。
十或更好的分析
事件 | 支付 | 组合 | 可能性 | 返回 |
---|---|---|---|---|
皇家同花顺 | 500 | 35,737,262 | 0.000022 | 0.010757 |
同花顺 | 45 | 172,191,438 | 0.000104 | 0.004665 |
四张 A | 70 | 325,566,459 | 0.000196 | 0.013720 |
四个 2、3、4 | 三十五 | 875,937,305 | 0.000527 | 0.018456 |
四个 5 到 K | 二十五 | 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,并将它们映射到牌堆中的十张牌上。前五个随机数决定玩家在发牌时会拿到的牌,后五个随机数决定玩家在抽牌时按顺序拿到的牌。例如,如果玩家弃掉两张牌,那么他将在抽牌时拿到牌表中的第6张和第7张牌。弃牌的位置无关紧要。
以下关于密码学应用的解释假设读者对该概念有所了解。有关基础知识,请参阅我的“骰子(加密版)”页面。对于更高级的读者,以下是游戏如何选择十张随机卡牌的过程。
- 定义一个名为“position”的指针并将其设置为 0。
- 按顺序加入服务器和客户端种子以及服务器种子。
- 生成步骤 2 中字符串的 SHA-512 哈希值。
- 从步骤 3 中的哈希“位置”开始,将前两个字符从十六进制转换为十进制。
- 从 4 中取出末两位数字。
- 如果步骤 5 的结果为 51 或更少,并且尚未找到,那么这将是前十张卡片之一。
- 将“位置”增加 2。
- 不断重复步骤 4 至 7,直到找到十张独特的卡片。
- 将从左到右开始发出前五张找到的牌。
- 后五张牌将按顺序排列,等待抽牌时发出。例如,如果玩家抽了三张牌,那么他将获得队列中的第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,然后删除余数。
- D. 将步骤 11C 的结果映射为花色,如下所示:0 为黑桃,1 为红桃,2 为方块,3 为梅花。
下表显示了从数字到扑克牌的转换。
卡牌转换表
秩 | 黑桃 | 红心 | 钻石 | 俱乐部 |
---|---|---|---|---|
一个 | 0 | 十三 | 二十六 | 三十九 |
2 | 1 | 14 | 二十七 | 40 |
3 | 2 | 15 | 二十八 | 41 |
4 | 3 | 16 | 二十九 | 四十二 |
5 | 4 | 17 | 三十 | 43 |
6 | 5 | 18 | 31 | 四十四 |
7 | 6 | 19 | 三十二 | 45 |
8 | 7 | 20 | 33 | 46 |
9 | 8 | 21 | 三十四 | 四十七 |
10 | 9 | 22 | 三十五 | 四十八 |
J | 10 | 23 | 三十六 | 49 |
问 | 11 | 24 | 三十七 | 50 |
钾 | 12 | 二十五 | 三十八 | 51 |
这很需要一个例子,不是吗?我们来举一个例子吧。
在上面的“可能公平”屏幕中,我希望完成的两件重要的事情是选择我自己的(而不是默认的)客户端种子(bc7v9bn70d7n07sn),并记录下一个服务器种子的哈希值(64e701539ecf4c03b90ecd957d6675b2f72c3fd84f04dc5eb63eed8b9a58b95b),它位于标题为“下一个服务器种子 SHA256”的行中。
在上面的屏幕中,我持有不同花色的 J/A,分别位于第一和第四个位置。
在上面的屏幕中,我的牌改进为一对 J。
在上面的屏幕截图中,我回到“公平游戏”来观察赌场如何利用两颗种子来获得游戏中看到的实际牌。
上面的屏幕显示了我需要知道的信息,以便确定应该发哪些牌。让我一步一步地讲解一下:
- 说明很模糊,但你应该按顺序加入服务器种子和客户端种子。这样你就能得到 2XMpPAbEw3qdH3HQla2K5zNwoNEFHOEYolkB969jbc7v9bn70d7n07sn。
- 接下来,对步骤 1 的结果进行哈希处理。结果为 3a959bbaffd9b3928b28431c2ee688792c67a45f1933b9e11af3c7784a7bbda5674d2e768ac330a04982b9fa943c4c2cf49c952d9db956b1cd3b38c006c3a2d6。注意,每个字符都是 0 到 9 的数字或 A 到 F 的字母。用十六进制表示,整个结果是一个非常大的数字。
- 取哈希值(3a)中的前两个字符,并将其从十六进制转换为十进制:3*16 1 + a*16 0 = 48 + 10 = 58。
- 取步骤3中的末两位数字(只有两位数字),仍为58。
- 如果步骤4的结果在0到51之间,则将其映射到一张卡片上。由于58>51,我们继续哈希值中的后两位数字。
- 哈希中的下两位数字是 95。以 10 为基数,这转换为 9*16 1 + 5*16 0 = 144 + 5 = 149。
- 149 的末两位数是 49,介于 0 到 51 之间,因此将其映射到一张牌上。具体来说,49 映射到梅花 J。这张牌应该是从左边开始发出的第一张牌。
- 取哈希值(9b)中的下两位数字,并将其从十六进制转换为十进制:9*16 1 + b*16 0 = 144 + 11 = 155。
- 取最后一步的末两位数,即55。
- 55 不在 0 到 51 的范围内,因此在哈希中跳过这两位数字。
- 取哈希值 (ba) 中的下两位数字,并将其从十六进制转换为十进制:b*16 1 + a*16 0 = 11*16 + 10*1 = 176 + 10 = 186。
- 取最后一步的末两位数,即86。
- 86 不在 0 到 51 的范围内,因此在哈希中跳过这两位数字。
- 取哈希值 (ff) 中的下两位数字,并将其从十六进制转换为十进制:f*16 1 + f*16 0 = 15*16 + 15*1 = 240 + 15 = 255。
- 取最后一步的末两位数,即55。
- 55 不在 0 到 51 的范围内,因此在哈希中跳过这两位数字。
- 取哈希值 (d9) 中的下两位数字,并将其从十六进制转换为十进制:d*16 1 + 9*16 0 = 13*16 + 9*1 = 208 + 9 = 217。
- 取上一步的末两位数,即17。
- 17 在 0 到 51 的范围内,所以将其映射到一张牌上。具体来说,17 映射到红桃 5。这应该是从左边数第二张牌。
- 取哈希值(b3)中的下两位数字,并将它们从十六进制转换为十进制:11*16 1 + 3*16 0 = 13*16 + 9*1 = 176 + 3 = 179。
- 取最后一步的末两位数,即79。
- 79 不在 0 到 51 的范围内,因此在哈希中跳过这两位数字。
- 取哈希值(92)中的下两位数字,并将其从十六进制转换为十进制:9*16 1 + 2*16 0 = 9*16 + 2*1 = 208 + 9 = 146。
- 取最后一步的末两位数,即46。
- 46 的范围是 0 到 51,所以将其映射到一张牌上。具体来说,46 映射到 8 或梅花。这应该是从左边数起第三张牌。
- 取哈希值(8b)中的下两位数字,并将其从十六进制转换为十进制:8*16 1 + 11*16 0 = 9*16 + 2*1 = 128 + 11 = 139。
- 取最后一步的末两位数,即39。
- 39 的范围是 0 到 51,所以将其映射到一张牌上。具体来说,39 映射到梅花 A。这张牌应该是从左边数起第四张牌。
- 取哈希值(28)中的下两位数字,并将其从十六进制转换为十进制:2*16 1 + 8*16 0 = 2*16 + 8*1 = 32 + 8 = 40。
- 40 的点数在 0 到 51 之间,所以它对应一张牌。具体来说,40 对应梅花 2。这张牌应该是这手牌中最后一张牌,在右边。
- 我丢弃了三张牌,这意味着我们需要在 Hash 中找到接下来的三张独特的牌来替换它们。
- 取哈希值(43)中的下两位数字,并将其从十六进制转换为十进制:4*16 1 + 3*16 0 = 4*16 + 3*1 = 67。
- 取哈希值(1c)中的下两位数字,并将其从十六进制转换为十进制:1*16 1 + c*16 0 = 1*16 + 12*1 = 38。
- 38 在 0 到 51 的范围内,是唯一的,所以把它映射到一张牌上,也就是方块 3。这是抽到的第一张牌。
- 取哈希值 (2e) 中的下两位数字,并将其从十六进制转换为十进制:2*16 1 + e*16 0 = 2*16 + 14*1 = 32 + 14 = 46。
- 46 也已经在哈希中找到,所以我们跳过这两个位置。
- 取哈希值 (e6) 中的下两位数字,并将其从十六进制转换为十进制:e*16 1 + 6*16 0 = 14*16 + 6*1 = 230。
- 取最后一步的末两位数,即30。
- 30 位于 0 到 51 的范围内,尚未找到,因此将其映射到一张牌上。具体来说,30 映射到方块 5。这将是第二张替换牌。
- 取哈希值(88)中的下两位数字,并将其从十六进制转换为十进制:8*16 1 + 8*16 0 = 136。
- 取上一步的末两位数,即36。
- 36 位于 0 到 51 的范围内,尚未找到,因此将其映射到一张牌上。具体来说,36 映射到方块 J。这将是第三张替换牌。
- 我们不需要再找牌了。这手牌已经准备好计分,玩家可以付钱了。
总而言之,下表每次显示来自哈希、十进制转换和卡片转换(如果有)的两个字符。
哈希到卡的转换
哈希 人物 | 十进制 转换 | 右二 数字 | 播放 卡片 |
---|---|---|---|
3a | 58 | 58 | 或者 |
95 | 49 | 49 | 梅花 J |
9b | 155 | 55 | 或者 |
巴 | 186 | 86 | 或者 |
ff | 55 | 55 | 或者 |
d9 | 217 | 17 | 红桃5 |
b3 | 179 | 79 | 或者 |
92 | 146 | 46 | 梅花 8 |
8b | 139 | 三十九 | 梅花 A |
二十八 | 40 | 40 | 梅花2 |
43 | 67 | 67 | 或者 |
1c | 二十八 | 二十八 | 3颗钻石 |
2e | 46 | 46 | 右/右/右 |
e6 | 230 | 三十 | 5张方块 |
88 | 136 | 三十六 | 方块 J |
钥匙:
o/r = 十进制转换超出卡的范围
r/p/c = 重复上一张牌
如果为了确保公平结果而费尽周折,那么我有个好消息要告诉你!我编写了一个脚本来帮你完成,它保存在PHP 沙盒中。这是一个很棒的资源!要使用它,只需在第 4 行输入服务器(赌场)种子,在第 5 行输入客户端(你自己的)种子,然后点击“执行代码”。你注定获得的牌就会显示在下面的结果框中。
如果那里的代码出现任何问题,您可以点击下面的按钮查看代码。
本页面介绍一种使用加密技术来确保所发牌的顺序是预定顺序的视频扑克游戏方法。如果您不熟悉视频扑克的基本规则,请参阅我的视频扑克主页。
就本页而言,我目前关注的是 Cypto.Games。他们有三种版本的视频扑克,如下:
- 杰克或更好
- 十或更好
- 红利扑克
玩家必须下注10个积分,尽管玩家可以选择加密货币的价值。在我看来,10个积分的步骤不必要地混淆了游戏的本质。
接下来,点击“执行代码”。您预定获得的卡牌将显示在下面的结果框中,同时还会验证服务器种子的哈希值是否与下注前提供的哈希值一致。
我还提供了下面的代码副本。
[剧透=视频扑克公平游戏规则]
// 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("黑桃","红心","方块","梅花"); $cards_found=0; $位置=0; $combined_seed = $server_seed.$client_seed; echo "组合种子 = $combined_seed\n"; $combined_hash = 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++) { 如果($hex_to_dec == $card_array[$i]) { $重复=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] of $suit_array[$suit]\n"; } 别的 { echo "抽牌 $game_position =\t$rank_array[$rank] of $suit_array[$suit]\n"; } } } $位置+=2; 如果 ($位置==128) { echo“错误——哈希中没有更多空间。\n”; $cards_found=10; } } 当 ($cards_found<10) 时; $server_seed_hash = 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 中的哈希“位置”开始,将前两个字符从十六进制转换为十进制。 // 5. 从 4 中取出末两位数字。 // 6. 如果步骤 5 的结果为 51 或更小,并且尚未找到,那么这将是前十张卡片之一。 // 7. 将“位置”增加 2。 // 8. 不断重复步骤 4 到 7,直到找到十张不同的卡片。 // 9. 找到的前五张牌将从左到右开始发牌。 // 10. 后五张牌将按顺序排列,等待抽牌。例如,如果玩家抽了三张牌,那么他将获得队列中的第 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 并丢弃余数。 // D. 将步骤 11C 的结果映射到花色,如下所示:0 到黑桃,1 到红心,2 到方块,3 到梅花。 ?>[剧透]