第 2 课 · 五种吃子图形
得子几乎从不是「对方随手送」来的,而是由少数几种固定图形产生的。这一课把它们收成五个:捉双、牵制、串击、闪击、双将。共同点是都只需要算两三步——恰好是初学者算得清的深度。
1 · 五种图形
捉双(fork):一个子同时攻击两个目标,对方只能救一个。马的捉双最常见,因为马的攻击范围不成直线,很难被一手挡开;「马后炮」式地同时打王与后是它最贵的形态。
牵制(pin):己方的远程子沿一条线打过去,对方两个子恰好一前一后在这条线上,前面那个一动,后面那个就暴露。若后面站着的是王,前面那个子在规则上根本不能动,称作绝对牵制。被牵制的子等于暂时从棋盘上消失——这一点在第 0 课的兑换清算里也算进去了:被牵制的子不算保护者。
串击(skewer):与牵制同一条线,但贵贱倒过来——先打贵的,贵子一躲,后面便宜的那个就被吃掉。
闪击(discovered attack):己方的一个子挪开,让它身后的远程子沿这条线打出去。挪开的那个子往往顺手还做另一件事(吃子或将军),所以对方要同时应付两处。
双将(double check):一步棋同时由两个子将军。这是唯一不能靠吃掉攻击者或挡线来化解的将军——只能动王,因为一步棋不可能同时解掉两个方向。
2 · 为什么这五种对这台对手特别管用
本页 NPC 的搜索深度是实测出来的,低于档位标称的八层:
| 局面类型 | 最强档实际搜到的深度 | 用时 |
|---|---|---|
| 满子力中局 | 5 层 | 2.5 秒(预算跑满) |
| 同一局面,给足二十秒 | 仍是 5 层 | 20 秒 |
| 车兵残局 | 6–7 层 | 2.5 秒(预算跑满) |
| 王兵残局 | 8 层(顶到档位上限) | 0.1 秒 |
它没有置换表(transposition table),因此中局的分支因子一大,深度就上不去。上表第二行是这件事最直接的证据:同一个满子力局面,把时间从两秒半放宽到二十秒,八倍的思考时间一层都没多搜出来。五层意味着两个半回合:一个三回合才兑现的图形,它看不见。
这给出两条与直觉相反的做法。其一,不要急着兑子简化:残局它能顶到档位上限的八层,满子力的中局只有五层,兑成残局等于把它送回它算得最清楚的地方(这条判据在第 4 课里量化过)。其二,局面越复杂越有利,因为复杂只是让人多花时间,却直接压低了它的搜索深度。
它的评估函数还漏掉了王安全这一项(见第 1 课 §2 的分项)。一个下一步就要被将杀的局面,只要它当时子力上多着,它的静态评估依然报「自己大优」。因此针对它的王发动的攻击、包括弃子撕开兵阵,它在补偿这一侧的账面上记的是零。
3 · 算清一条变化的顺序
图形是模式识别,但下手之前仍要把变化算完。顺序固定为三步:
- 先数强制着法:吃子、将军、以及被打的子的逃跑路线——只有这几类是对方「不得不应」的,只算这些就够,其余的不必展开。
- 每一步都替对方找最好的应手——初学者算错变化,几乎全是因为替对方选了一个配合自己的走法。
- 算到局面平静为止:不能停在吃子吃到一半的地方,否则会把「我吃了他的车」当成结论,而下一步对方正要吃回。这正是引擎里静态搜索(quiescence search)要解决的同一件事,而人也一样会犯这个错误。
4 · 练习
建议 · 这一课的图形要在对局中认出来才算学会。对局结束后点右侧面板的「分析本局」,凡是「本来有一路强制将杀」或「漏了白吃的子」的手数都会被标出来——那些正是练习里练过、实战中却没看见的图形。
课程目录 · 0 子力安全 · 1 开局三件事 · 2 五种吃子图形 · 3 攻王 · 4 该不该兑子 · 5 四个必会残局 · 6 名字