速攻是隱形的

走 b 路會自報行蹤:黑方的炮盯著這條縱線,能看見有東西落到河沿上。但紅方不必走那條路。沿著空空的 d 路上去,黑方沒有任何棋子能看見其中任何一個點:d3、d5、e5,第 4 回合擒將。唯一的警報只是「有一枚紅子離開了原位」,而這句話描述的是古往今來的每一盤棋。

真實局面楚 河 漢 界黑方所見楚 河 漢 界??
擒將前一步。左:真實局面。右:黑方能看見的一切。炮自始至終沒有進入畫面。

所以防守不能等警報響了再做,它必須每盤都走。本文其餘部分為了圖示清晰,一律畫可見的那條路線。兩條路線的威脅完全相同。

最自然的防守是顆地雷

炮與將之間恰好隔著一個炮架:黑方自己的中卒。炮吃子恰好需要一個炮架,所以在中路上再墊進任何一枚棋子,擒將就不成立了。最順手的選擇是補士。它封住中路,除此之外什麼也不做,還埋下一顆地雷:紅炮平到一側象所在的縱線,隔著卒把象吃掉。

有毒的補士楚 河 漢 界
紅方猜中了士還留在原位的那一翼。炮沿底線隔著這枚士開火,標記的出逃點同樣挨這記炮,而支上去的那枚士又恰好堵住了唯一的解法。經引擎窮舉,41 種合法應著全部敗北。紅方猜向另一翼時,黑方只損失一個象。

有一手解救:立刻把有毒一翼的象飛上中路,兩個吃象點就同時失效。但這本該是你開局的第一步。補士花掉整整一步,卻只做了飛象工作的一小部分,而在你補救的同時,紅方白吃一個邊線的車。

一步飛象守住一切

真正管用的,是象棋裡最標準的出子著法:飛中象。

一步守三線楚 河 漢 界
中路多了第二個炮架,狙擊宣告失效(圖中打叉處);兩個象位原點都有回吃保護。

狙擊廢了,兩翼的象都有保護,只用一步。象棋理論比迷霧早幾百年就走到了這個點上。把炮走到同一個點同樣管用。

賭車

剩下的是兩條邊線:炮從河沿的邊角隔著邊卒打車,而中象對此無能為力。

這件事由行棋次序決定。擒將最早也要等到紅方第三步,所以黑方第二步飛象還來得及。邊線卻等不起:紅方第二步就要選定邊角,之後再推的卒已經遲了。所以先挺卒,再飛象。推上去的卒正好盯住炮必須開火的那個點,炮一落地就被吃掉。

先挺卒楚 河 漢 界挺卒已遲楚 河 漢 界
同一步挺卒,只差一個回合。先走,卒盯住落點,炮一落地就死。後走,炮直接隔著它把車打掉:推過的卒照樣只算一個炮架。

於是只剩一場堂堂正正的賭局。紅方第二步盲選一個邊角:一半機率選中被盯住的那邊,用炮換一個卒;另一半機率贏下一個車。交給引擎跑完後續,兩條分支大致相抵。每盤只有一次公平的擲硬幣,而且紅方必須立刻下注:只要多給黑方一步,兩條邊線就都關上了。

炮死之後

擲硬幣的一半結果裡,紅炮死在卒的手上。紅方回吃這個卒(引擎在每一盤推演裡都這麼走了),而這步回吃是份大禮:它自己成了炮架,黑炮隔著它一炮打穿角上的車。引擎給紅方打出 -0.55:攻勢結束,淨虧一炮,一無所獲。

回吃是份大禮楚 河 漢 界
紅方在 a5 回吃之後,黑炮平到邊線,隔著紅方自己的兵開火。Misty 在每一盤推演裡都找到了這個後續。

紅方擋得住這一炮嗎?有兩條路,都不痛快。不回吃可以在這條線上留住兩個炮架,可過河的黑卒會繼續一路吃過去,一步之後炮線重新開啟,紅方還多丟一個兵。回吃之後再跳馬墊線,車是保住了。在從絆索觸發開始的六盤引擎推演裡,整套流程自動上演,吃、回吃、反擊炮一樣不缺,黑方拿下了其中五盤(配套研究裡的 Tripwire 系列對局)。墊擋是這樣的:

車丟之後

另一半結果裡,黑方淨虧一個車。引擎給局面打分從 -1(必敗)到 +1(必勝);它給這個局面打 -0.75,大約是八盤贏一盤。接近輸定,但還沒完。而且落在角上的炮看著比實際嚇人:它能吃的每一子,吃完都會立刻被回吃。它真正的威力是凍結:旁邊的馬和象正把底線關得死死的,兩者只要有一個動了,下一炮打的就是將。

凍結楚 河 漢 界
炮能吃的兩個點(左側箭頭)都有回應:一個點由中象回吃,另一個點由將親自回吃。但馬和象現在就是底線的炮架。動其中任何一個,炮就擒將。讓它們待在家裡。

那黑方怎麼打?引擎給出了三條思路。第一,耐心:底線上什麼都不碰。第二,立刻簡化:在我們最初的推演裡,它從這個局面走的第一步,每一盤都是用自己的炮隔著紅方還在原位的炮,把紅方原位的馬狙掉,以炮換馬,鈍化攻勢。第三,在另一翼反擊,你自己的炮在那邊還有戲;下一節會展示最鋒利的版本。而且這局面逃得出去:十盤強制抓車的對局裡,黑方直接贏下兩盤(配套研究裡的 Rim gambit 第 2、第 8 局,分別用了 84 著和 56 著),另有三盤撐到了著數上限。八分之一的勝率是評估值;在分出勝負的對局裡,實戰是四分之一。

誰先挪牆誰先死

有一個模式在每條分支裡都決定過勝負,而且它適用於任何帶遠端棋子的迷霧棋:站在開火點上的炮,同時也是擋住對面敵炮的牆。誰先離開,對方就從缺口裡開火。而迷霧偏偏會引誘你離開:站在牆上望過去,敵方的卒像是白送的。吃了它,下一著你就被擒將。

這也回答了一個合理的問題:黑方為什麼不自己也去河沿?可以去,而且它能懲罰任何伸手抓子的紅方。紅方只有一條穩妥的應法:先封住自己的中路,再碰任何東西。這樣一來,這門反架炮永遠開不了火。

凍結的反架炮楚 河 漢 界
變化如下:紅炮上河沿,黑方用自己的反架炮回應,紅方在抓子之前先飛相封中。這門反架炮與紅帥之間現在隔著兩個炮架(打叉處),被凍結在原地;它一動,紅炮就開火。引擎認為紅方在此領先四分之一個點(+0.25,對比挺卒主線的 0.00),並把炮轉向兩條邊線(箭頭處)。這是對付貪心對手的武器,不是預設選擇。

引擎怎麼說

我把速攻強制擺上棋盤,讓 Misty 執雙方下了三十盤:二十盤走狙擊嘗試,十盤走抓車。狙擊一次也沒有打響;二十盤裡有十八盤,黑方三步之內就完成了封堵。速攻組的戰績是黑方 9 勝、紅方 4 勝、7 盤達到著數上限;強制抓車組是紅方 5 勝、黑方 2 勝、3 盤到上限。然後我讓黑方用本文教的這條線應對同樣的強制速攻,又下了八盤:黑方贏了六盤,沒有和棋。這條線不只是適合人類;它拿下的分數比引擎自己選的防守還多。下面是其中一盤的完整棋譜:

本文背後的所有對局都收錄在配套研究裡:理論變化、二十盤強制速攻與十盤強制邊線抓車的引擎對局,以及十六盤自由自對弈。把研究棋盤切到黑方的迷霧視角,一步步看他當時究竟看見了什麼。

完全放開讓它自由選擇,再下十六盤,十二盤分出勝負的對局裡紅方贏了十一盤,而且一次也沒有走過速攻。樣本不大,這些計數只當方向看。局面評估值則站得更穩:算力加到十六倍,數值紋絲不動。

局面引擎判定
開局局面,紅方走子+0.06 紅優:真實但很小的先手優勢
理論定型:封堵完成,速攻炮停在 e50.00:完全均勢,速攻被徹底化解
紅方賭贏了車黑方 -0.75:接近輸定,仍有抵抗
紅方賭輸了炮紅方 -0.55:明顯敗勢
反架炮對先封中的紅方+0.25 紅優:反架炮比挺卒主線讓出更多

最後一項檢驗:我強制黑方按本文教的線走,對手是自由行棋的紅方,共八盤。七盤分出勝負的對局黑方贏了五盤,而自由選擇時是十二盤裡贏一盤。這三步保險著法毫無代價。

把賭局的兩條分支取平均,孤注一擲的速攻對紅方約值 +0.10,和開局自帶的 +0.06 屬於同一量級:整份先手優勢,在一場賭局裡一次花光。迷霧中的主動權是真實的,多半比國際象棋裡還大,因為防守是閉著眼睛付賬的。速攻是花掉主動權最響亮的方式,而最響亮的方式是有解的。

該學的那條線

三步答案楚 河 漢 界
黑方的三步:挺邊卒、飛中象、跳遠端馬。圓點是被盯住的開火點,叉是已失效的狙擊,箭頭是中象的保護範圍。

執黑:挺邊卒,飛中象,馬跳向另一側邊線。三步之後,剩下的唯一目標就是你沒推卒那一側的車,而且只有紅方第二步就下注時才吃得到。永遠不要用士封中。在挪動落地炮附近的任何棋子之前,先數炮架:我們找到的大多數敗局,都來自挪動了一枚正默默封著某條火線的棋子。

執紅:速攻能贏下所有沒讀到這裡的人,對讀過的人則是對半開的賭注。如果你要走它,第二步就選定邊線,否則乾脆別選,並且在兌現任何抓取之前先封住自己的中路:指令碼里每一個先抓子的紅方都被擒了將。

親手走一遍

本文的每條變化、每盤對局都在配套研究裡,棋盤可以切換到任何一方的迷霧視角。準備好之後,Misty 會在你練這條線的時候好好教訓你。無需帳號。

開啟配套研究对战电脑