引擎实际发牌的方式
Hi-Lo其实就是把同一个问题问了十三遍。桌上有一张牌;下一张牌会更高还是更低;你来猜,猜对了就把奖池翻倍,然后对着一张新牌继续问同样的问题。这里没有牌靴要追踪,没有第三张牌规则,也没有荷官。这使它成为少数几款整张价目表能放进一页纸的赌场游戏之一——也是少数几款在你读了代码之后会改变你对按钮理解的游戏之一。
引擎已验证hilo/hiloApi.ts:32 —— 一张牌的点数是`Math.floor(rng() * 13) + 1`,十三个点数中等概率出现的一个。花色也会同时被抽出(hiloApi.ts:30–34),但结算代码从未读取过它:hiloWinSet()(hiloApi.ts:122–142)中的赢牌集合全都是基于点数的集合。这款游戏里不存在对子、同花或顺子。
点数从Ace(最小)到King(最大),一到十三。由于每张牌都是独立的均匀抽取,已经发过的牌不会影响接下来会发什么——没有哪个点数会被“用光”,连续出现五张小牌也不会让大牌“该来了”。棋盘上方的历史条只是记录,不是预测。
引擎已验证hilo/hiloApi.ts:122–142,hiloWinSet():对于中间点数r,“更高或相同”在点数r到13上获胜,“更低或相同”在点数1到r上获胜——当前点数同时属于两个集合。在King上,两个按钮变成“相同”(仅限点数13)和“更低或相同”(1–12);在Ace上,变成“更高或相同”(2–13)和“相同”(仅限点数1)。hiloOdds()(hiloApi.ts:70–91)将每个按钮定价为1÷其概率,计算结果正好是13÷(赢牌集合的大小)。
这个共享点数是第一件值得注意的事。在从2到Queen的任何一张牌上,两个按钮加起来覆盖了十三个点数中的十四个——107.69%——因为平局会判给你所选的那一边。庄家在这里不保留平局,也不需要保留:两个按钮的价格都是按平局归你计算的,优势完全是从别的地方取得的。
每一种猜法,及其定价
Hi-Lo里实际上只有十二种不同的猜法,而不是二十六种。一个按钮完全由十三个点数中有多少个能让它获胜来定义,棋盘上的每一个按钮都属于下面这十二种规模之一。
| 获胜点数 | 概率 | 公平赔率 | 显示 | 因两位小数取整而损失 | 出现位置 |
|---|---|---|---|---|---|
| 1 | 7.6923% | 13.0000 | ×13.00 | — | 在Ace或King上的“相同” |
| 2 | 15.3846% | 6.5000 | ×6.50 | — | 在2以下,在Q以上 |
| 3 | 23.0769% | 4.3333 | ×4.33 | 0.0769% | 在3以下,在J以上 |
| 4 | 30.7692% | 3.2500 | ×3.25 | — | 在4以下,在10以上 |
| 5 | 38.4615% | 2.6000 | ×2.60 | — | 骰子为5时选低,骰子为9时选高 |
| 6 | 46.1538% | 2.1667 | ×2.16 | 0.3077% | 骰子为6时选低,骰子为8时选高 |
| 7 | 53.8462% | 1.8571 | ×1.85 | 0.3846% | 骰子为7时任选一个按钮 |
| 8 | 61.5385% | 1.6250 | ×1.62 | 0.3077% | 骰子为8时选低,骰子为6时选高 |
| 9 | 69.2308% | 1.4444 | ×1.44 | 0.3077% | 小于9,大于5 |
| 10 | 76.9231% | 1.3000 | ×1.30 | — | 小于10,大于4 |
| 11 | 84.6154% | 1.1818 | ×1.18 | 0.1538% | 小于J,大于3 |
| 12 | 92.3077% | 1.0833 | ×1.08 | 0.3077% | 在Q或K时选低,在A或2时选高 |
概率是中奖区间大小除以13。公允赔率是13 ÷ 中奖区间大小,也就是 hiloOdds() 返回的数值。图中所示是引擎经过两位小数向下取整后的数值。第五列是在未考虑任何配置的庄家优势前,仅取整本身在该次下注中占本金的比例。
十二种选择中有五种能被13整除、不会因取整而有任何损失:×13.00、×6.50、×3.25、×2.60 和 ×1.30。其余的都是无限循环小数,被直接截断而非四舍五入,而且截断的方向总是有利于庄家——是向下取整,从不是就近取整。损失最大的一次出现在7点上,这是唯一一张两个按钮对应同一结果的牌:×1.8571 变成 ×1.85,本金的0.3846%消失在小数点第三位。
这种向下取整并非粗心。赔付必须是一个账本能够精确保存、验证器能够逐位复现的数字,因此引擎只在一个固定的位置、朝一个固定的方向取整一次——这与一次取整,而非多次中描述的原则一致。这种做法的代价虽小但确实存在,理应被列入价目表。
两次取整,一个优势
Hi-Lo的一轮游戏不是按每次下注赔付的,而是不断累积。每次猜对都会将当前累计值乘以该次猜测存储的赔率,而你最终可以提现的赔付,是这个累积值在扣除庄家抽成后的结果——抽成只在整轮结束时扣一次,而不是每次下注都扣一次。
引擎验证hilo/hiloApi.ts:202–203 — 每次猜中后执行 `product *= floor2(13 / winSet.size)`,随后 `multiplier = floor2(product * ctx.rtp)`。floor2 是 `Math.floor(x * 100 + 1e-9) / 100`(_shared/serverMath.ts:12–14)。hiloApi.ts:56–59 处的注释记录了这与后端的 BigDecimal 运算是一致的:每一步猜中的公允赔率都被取整到两位小数后存储,最终的整轮倍数是这些存储步骤的乘积再乘以(1减去庄家优势),然后再次取整到两位小数。
所以这里存在两次取整,而不是一次:上表中的每次下注取整,以及最终倍数的第二次取整。两次都是向下取整。庄家优势本身是配置项而非写死的代码——它随游戏的详情记录一起返回,如果该请求失败,客户端会退回使用1%这个默认值。
引擎验证_shared/coinGame.ts:111 — 每局游戏的返还率来自 /getGameDetail 响应中的 `1 − rtpRes.body.rtp`,客户端的默认回退值是 `0.99`(_shared/coinGame.ts:92)。Hi-Lo源码中的示例(hiloApi.ts:63–64)使用的是0.985。下面两种设置都会标出价格;上面给出的概率在任何设置下都成立。
| 显示值 | 概率 | 1%设置下的首次下注赔付 | 庄家优势 | 1.5%设置下 |
|---|---|---|---|---|
| ×13.00 | 7.6923% | ×12.87 | 1.0000% | 1.5385% |
| ×6.50 | 15.3846% | ×6.43 | 1.0769% | 1.5385% |
| ×4.33 | 23.0769% | ×4.28 | 1.2308% | 1.6923% |
| ×3.25 | 30.7692% | ×3.21 | 1.2308% | 1.5385% |
| ×2.60 | 38.4615% | ×2.57 | 1.1538% | 1.5385% |
| ×2.16 | 46.1538% | ×2.13 | 1.6923% | 2.1538% |
| ×1.85 | 53.8462% | ×1.83 | 1.4615% | 2.0000% |
| ×1.62 | 61.5385% | ×1.60 | 1.5385% | 2.1538% |
| ×1.44 | 69.2308% | ×1.42 | 1.6923% | 2.3846% |
| ×1.30 | 76.9231% | ×1.28 | 1.5385% | 1.5385% |
| ×1.18 | 84.6154% | ×1.16 | 1.8462% | 1.8462% |
| ×1.08 | 92.3077% | ×1.06 | 2.1538% | 2.1538% |
庄家优势是指恰好一次猜中后立即提现的一轮游戏中,预期损失占本金的比例:1 − 概率 × 赔率。赔率这一列是 floor2(floor2(13 ÷ k) × 0.99),也就是按钮本身在一轮游戏第一次点击时所显示的数字。
正因如此,按钮上的说明值得仔细阅读。在一轮游戏的第一次点击时,每轮仅扣一次的那部分恰好在同一步生效,所以显示的数字会下降——你原本预期的 ×1.08 实际显示为 ×1.06。从第二次点击开始,乘积已经被扣减过了,同一个按钮又会显示 ×1.08。你的概率其实并没有变化,只是你看到的是同一套运算的两个不同阶段。
而这正是没人预料到的结果。设定的 1% 优势只是一个目标值,而非实际结果。由于取整(floor)在那些公平赔率小数位最难看的点击上影响最大,单次点击的实际成本范围从 1.00% 到 2.15% 不等——庄家在几乎必中的 ×1.06 上抽取的比例,是其在 ×12.87 这种小概率一击上抽取比例的两倍还多。盘面上看起来最安全的按钮,反而是按下去代价最高的那个。
哪一边的代价更小,逐张分析
每张牌都会在你面前摆出两个价格,而它们几乎从不相等。这就是在1%设置下、单次猜牌后提现的完整表格。
| 牌面 | 更高或相同 | 更低或相同 | 更便宜的一方 |
|---|---|---|---|
| A | ×1.08 · 92.31% · 2.1538% | “相同” ×13.00 · 7.69% · 1.0000% | 更低 |
| 2 | ×1.08 · 92.31% · 2.1538% | ×6.50 · 15.38% · 1.0769% | 更低 |
| 3 | ×1.18 · 84.62% · 1.8462% | ×4.33 · 23.08% · 1.2308% | 更低 |
| 4 | ×1.30 · 76.92% · 1.5385% | ×3.25 · 30.77% · 1.2308% | 更低 |
| 5 | ×1.44 · 69.23% · 1.6923% | ×2.60 · 38.46% · 1.1538% | 更低 |
| 6 | ×1.62 · 61.54% · 1.5385% | ×2.16 · 46.15% · 1.6923% | 更高 |
| 7 | ×1.85 · 53.85% · 1.4615% | ×1.85 · 53.85% · 1.4615% | 相同 |
| 8 | ×2.16 · 46.15% · 1.6923% | ×1.62 · 61.54% · 1.5385% | 更低 |
| 9 | ×2.60 · 38.46% · 1.1538% | ×1.44 · 69.23% · 1.6923% | Higher |
| 10 | ×3.25 · 30.77% · 1.2308% | ×1.30 · 76.92% · 1.5385% | Higher |
| J | ×4.33 · 23.08% · 1.2308% | ×1.18 · 84.62% · 1.8462% | Higher |
| Q | ×6.50 · 15.38% · 1.0769% | ×1.08 · 92.31% · 2.1538% | Higher |
| K | “相同” ×13.00 · 7.69% · 1.0000% | ×1.08 · 92.31% · 2.1538% | Higher |
显示的赔率·概率·在一次下注和提现时的庄家优势。在1.5%的设定下,两个例外会消失:可能性较小的一方永远不会是更贵的一方,不过在4、6、7、8和10上,两边的成本则完全相同。
规律是可能性较小的一方几乎总是更便宜的一方,这与游戏所鼓励的直觉相反。有两张牌打破了这个规律。在6和8上,可能性较大的一方反而更便宜,而这在游戏设计上没有任何原因。两种选择在第一层都同样放弃了0.3077%;是第二层,也就是最终倍数,才将它们区分开来——×2.16在1%的抽成下变为2.1384,被削减为×2.13,损失0.3928%,而×1.62则变为1.6038,被削减为×1.60,损失0.2369%。在7上这个问题不存在,因为两个按钮其实是同一个选择。
| 按钮是如何选择的 | 1% 设置 | 1.5% 设置 |
|---|---|---|
| 总是选更便宜的一边 | 1.2249% | 1.6923% |
| 总是选概率较低的一边 | 1.2485% | 1.6923% |
| 随机选择,各占一半 | 1.5207% | 1.8639% |
| 总是选概率较高的一边 | 1.7929% | 2.0355% |
在十三张等概率的牌上取平均。第一行与最后一行之间的差距——在1%设置下约为0.57个百分点——就是按钮选择对单次猜测的全部影响。
这些数字没有一个对玩家来说是正数,这正是关键所在。在Hi-Lo中选得好并不能扭转局势;它只是把成本在大约1.2%到大约1.8%的总投注额之间移动。这个差异是真实存在的,也值得了解。但它比下一节所描述的差异要小。
一路加注(riding the ladder)的代价
兑现的决定才是这个游戏的核心,也是算术开始转折的地方。每多猜一次,都会把乘积乘以一个向下取整的数字,所以每多猜一次都会再被多抽一次小头。配置好的优势只收取一次,而取整带来的损耗则会一次又一次地被收取。
| 正确次数 | 达成概率 | 倍数 | 公平倍数 | House Edge |
|---|---|---|---|---|
| 1 | 92.3077% | ×1.06 | ×1.0833 | 2.1538% |
| 3 | 78.6527% | ×1.24 | ×1.2714 | 2.4706% |
| 5 | 67.0177% | ×1.45 | ×1.4921 | 2.8243% |
| 10 | 44.9137% | ×2.13 | ×2.2265 | 4.3338% |
| 22 | 17.1883% | ×5.38 | ×5.8179 | 7.5268% |
| 31 | 8.3632% | ×10.75 | ×11.9571 | 10.0951% |
| 60 | 0.8209% | ×100.24 | ×121.8222 | 17.7161% |
一次完全在92.31%按钮上进行的连续游戏。“公平倍数”是(13 ÷ 12)的调用次数次方——如果没有下限设置、没有配置的优势,同样的连续游戏会支付多少。十次调用这一行已通过该引擎自身演示循环的三千万次模拟运行进行了交叉验证。
在安全按钮上将本金翻倍需要十次正确调用,大约不到一半的次数能达成,而到那时庄家的份额已经从2.15%上升到4.33%。达到×100需要连续六十次正确调用,大约每122次尝试发生一次,并会消耗所投入全部资金的17.72%。随着倍数的提升,赔率会诚实地累积;舍入误差也会随之累积。
| 正确调用次数 | 概率 | 倍数 | 庄家优势 |
|---|---|---|---|
| 1 | 53.8462% | ×1.83 | 1.4615% |
| 3 | 15.6122% | ×6.26 | 2.2676% |
| 5 | 4.5266% | ×21.45 | 2.9041% |
| 10 | 0.2049% | ×464.89 | 4.7430% |
在接近持平的赔率下连续猜对十次,大约是488次尝试中才会出现一次。
两张表用不同的货币说明了同一件事。长连击并不是比高赔率短连击更便宜地达到大数字的方式——恰恰相反,它更贵,因为庄家在每一级都要抽成。唯一的例外是×13.00的
跳过,以及它做不到的事
Hi-Lo有第三个按钮。在连击进行中,你可以跳过桌面上的这张牌,重新发一张而不对其进行猜测——奖池不变,倍数不变,也没有任何风险。
ENGINE-VERIFIEDhilo/hiloGame.tsx:376–377 — the “Skip this card” button is rendered for the whole of a live run, and hiloApi.ts:193–196 shows what it does: a new card is drawn, the pass is counted, and the multiplier, win count and balance are returned unchanged. A skipped card cannot lose the run.
它确实是免费的,但它能买到的东西确实有限。跳过并不会改善任何一次猜测——它只是用同一副十三张牌里的另一张替换了当前这张,所以它提供的价目表其实还是同一份价目表。它能让你做的,是等到一张你更喜欢按哪个更便宜按钮的牌出现,这会把你的成本移动到国王“相同”猜测的1.00%与旁边按钮的2.15%之间——仅此而已。没有任何一种跳过序列能让这场游戏中的某次猜测变得零成本。
跳过——或者面板上的任何其他操作——也不会改变下一张牌会是什么。每张牌都是从同样的十三个点数中独立抽取的,所以你刚刚跳过的那串小牌对接下来的牌没有任何影响。这种直觉有一个名字,也有悠久的历史:赌徒谬误。
对Hi-Lo的诚实总结很简短。概率正是按钮所暗示的那样,赔付是向下取整两次后的公平价格,而游戏成本从单次精心选择的猜测约1%,到长连击的两位数以上不等,具体取决于你按了哪些按钮以及走了多远。知道其中的区别能让游戏变得更便宜。但它不会让游戏变得免费,无论你把引擎读多少遍也不会。
遊Hi-Lo,每次猜测都可验证
十三个点数,一个问题,以及一份你可以对照引擎核实的价目表Hilo →
常见问题
Hi-Lo纸牌游戏的赔率是多少?
每张牌都是从十三个点数中均匀抽取的。在点数为r的牌上,“更高或相同”在13次中赢(14 − r)次,“更低或相同”在13次中赢r次——当前点数在两边都能赢。在A或K上,其中一个按钮会变成“相同”,在13次中赢1次。花色对结算没有影响。
Hi-Lo的庄家优势是多少?
这取决于你按的是哪个按钮。在客户端1%的配置下,一次猜测后立即兑现,在×12.87的“相同”上成本为1.00%,在×1.06的近乎必中项上成本为2.15%,因为引擎将每笔赔付向下取整到两位小数,而取整效应在公平赔率重复出现的地方影响最大。随机按按钮的平均成本为1.52%。
为什么Hi-Lo按钮显示×1.06而不是×1.08?
92.31%猜测的公平价格是13 ÷ 12 = 1.0833,引擎将其存储为×1.08。在一次连击的第一次正确猜测中,每次连击仅收取一次的庄家抽成会在同一步中扣除,所以按钮显示的是扣除后的数字×1.06。从第二次猜测开始,同一个按钮会显示×1.08,因为抽成已经被扣过了。
在Hi-Lo中,押可能性大的一边好还是押冷门的一边好?
在1%的设置下,在十三张牌中有十张牌是可能性较小的一边价格更便宜——6和8是例外,而在7上两个按钮的赔率相同。两种选择之间的差距大约是0.57个百分点的庄家优势。无论选哪一种,这个游戏都不会变得对玩家有利。
Hi-Lo连续押注更久会比提前结算收益更好吗?
不会。每次正确的押注都会把累计乘数乘以一个已经被截断到小数点后两位的数字,所以每多一级都会多一点损耗。连续十次×1.08的押注会达到×2.13,成功概率为44.91%,此时庄家优势为4.33%;六十次则达到×100.24,成功概率为0.82%,庄家优势为17.72%。
在Hi-Lo中跳过一张牌有用吗?
跳过不花钱也没有风险——会发一张新牌,乘数和奖池不变。但替换的牌仍然来自同样的十三个点数,赔率表也相同,所以跳过只是让你重新选择要支付哪种价格而已。它无法消除任何押注本身的庄家优势。
来源与参考资料
- Betkyo引擎源码:hiloWinSet(),位于hilo/hiloApi.ts:122–142(决定哪些点数赢得哪个按钮,平局两边都赢,A和K上的“Same”按钮);以及hiloOdds(),位于hilo/hiloApi.ts:70–91(公平赔率 = 13 ÷ 获胜集合大小)
- Betkyo引擎源码:均匀点数抽取,位于hilo/hiloApi.ts:32;连续累积,位于hilo/hiloApi.ts:202–203(每一步先取整,再对乘积×回报率取整);后端镜像说明,位于hilo/hiloApi.ts:56–59;displayStepOdds()中的首次押注显示规则,位于hilo/hiloApi.ts:65–68;跳过分支,位于hilo/hiloApi.ts:193–196,其按钮位于hilo/hiloGame.tsx:376–377
- Betkyo引擎源码:floor2(),位于_shared/serverMath.ts:12–14;以及每款游戏的回报率读取,位于_shared/coinGame.ts:111,默认回退值0.99位于_shared/coinGame.ts:92
- 为本文撰写的精确计算:枚举全部二十六个按钮对照引擎的获胜集合,按引擎的顺序应用两次取整,计算1%和1.5%设置下单次及多次押注的庄家优势,并进行三千万次模拟运行演示循环作为交叉验证
本文涉及的游戏