Tic-Tac-Chec:規則與已被解決的遊戲
Tic-Tac-Chec 給每位玩家四枚西洋棋棋子,目標是在 4×4 棋盤上連成四子。被吃掉的棋子會回到手上重新使用,兵會在棋盤兩端來回折返,局面也可能無限重複。
我強解了 1998 年的 Dream Green 原版遊戲。雙方最佳著法的結果是和棋。這個殘局庫收錄 2,476,597,610 個索引局面,給出每一個合法著法的確切結果,並為每個必勝或必負局面提供到終局的距離。
可在下方探索。每個著法都以當前行棋方的角度標示結果。距離以著(一方走一步)為單位;和棋沒有有限距離。
拖動棋子或點選排序後的著法即可跟進一條變化。綠色為勝,灰色為和,紅色為負。
規則
每位玩家擁有一兵、一馬、一象、一車。把四枚棋子排成同一橫列、同一縱行或長對角線即獲勝。
- 開局:棋盤一開始是空的。前六著中,雙方各放置三枚棋子。
- 輪次:一旦解鎖移動,玩家可以放置手上的棋子或移動盤上的棋子。之後發生吃子時,移動仍保持解鎖狀態。
- 西洋棋走法:馬、象、車依常規走法移動與吃子。沒有王、將軍或將死。
- 棋子回收:被吃的棋子會回到擁有者手上,而不是從遊戲中移除。
- 兵:直走一格,斜前方吃子,到達棋盤任一端時反轉方向。重新放置時方向會重設為朝向對手。
結果
空盤是和棋,而全部 64 種首著放置也都維持和棋。在強制放置的開局階段之後,遊戲依然偏向和棋:索引到的開局後局面中有 91.51% 是和棋。
| 區段 | 勝 | 負 | 和 |
|---|---|---|---|
| 開局後 | 184,895,598 | 24,178,920 | 2,253,286,227 |
| 僅放置的開局 | 147,472 | 30,468 | 14,058,925 |
數值皆以行棋方角度計。勝表示該方能強制連成四子;負表示所有防守都失敗。開局後最深的必勝在 41 著結束,而從必負局面出發最長可抵抗 40 著。僅放置的開局中,最深的決定性局面達 39 著。
和棋長什麼樣子
我從空盤抽出一條確定性的和棋變化。它走了 32 著後進入一個精確的 18 著循環。棋盤、行棋方、手上棋子與兵的方向全部重複。
這條變化上的某個局面,比開局結果所暗示的要尖銳得多:
| 黑方的選擇 | 著法 |
|---|---|
| 合法 | 18 |
| 維持和棋 | 3 |
| 兩著內落敗 | 15 |
黑方行棋。只有
a1-b2、d2-c2 與 c3-a2 能成和;其餘 15 個選擇都在兩著內落敗。
這條變化只是把結果具體呈現。完整的勝/負/和表格才是證明,而且它為每個和棋局面都提供至少一條維持和棋的續著。
一場注意力的比賽
殘局庫可以檢驗一種更貼近人類感受的描述:這個遊戲通常很寬容,但當對手把三枚棋子排好時,你必須注意到。
只有當對手存在能立刻連成四子的合法著法時,我才算作一次實質威脅。這排除了那些具誤導性的三子連線:第四枚棋子被阻擋、兵的方向不對,或移動尚未解鎖。兩個彼此獨立的偵測器在每個索引局面中都找出完全相同的獲勝著法。
| 在開局後的和棋局面中 | 結果 |
|---|---|
| 能維持和棋的合法著法 | 93.20% |
| 多數著法都成和的局面 | 94.63% |
| 所有著法都成和的局面 | 77.45% |
| 存在實質威脅的和棋局面 | 108,060,290 |
| 受到威脅時能維持和棋的著法 | 25.12% |
| 受威脅且只有唯一一種成和應手的局面 | 15.23% |
這個模式非常鮮明:
- 通常寬容:在多數和棋局面中,多數著法都沒問題。
- 局部強制:一次實質威脅會把能成和的選擇從 93.20% 的著法壓縮到 25.12%。
- 並非總能防守:開局後所有實質威脅中有 96.89% 存在安全應手。剩下的 3,762,536 個正好就是殘局庫中的兩著內必負局面。
在和棋局面中的每一次實質威脅都有防守方法。但「任何局面中的任何威脅都能被阻止」這個更強的說法並不成立。
這些是對完整結構索引的計數,而不是對局面在人類對局中出現頻率的估計。它們支持「注意力遊戲」的解讀,但不把它變成機率上的斷言。
解一個帶環的遊戲
棋子回收使遊戲不會朝殘局逐步收斂。這個圖含有環,因此搭配簡單置換快取的前向 minimax 並不安全:一個依賴路徑的重複判定可能滲入某個局面所儲存的值。
每個值都以當前行棋方的角度計。走一著之後,子局面屬於對手。我以逆向方式解這個圖,並把視角轉換明確寫出:
- 把已完成的四子連線標記為下一個該行棋的玩家落敗。
- 當存在任一著法能讓對手處於負的局面時,把該局面標記為勝。
- 當所有合法著法都讓對手處於勝的局面時,把它標記為負。
- 重複直到沒有任何值改變。所有未定的局面都是和棋:雙方都無法把這個圖逼進終局結果。
原始規則並未規定重複的上限。殘局庫把無限的非獲勝對局視為和棋;人為的重複規則可以提供停止條件。
| 表格 | 局面數 | 表示方式 |
|---|---|---|
| 開局後 | 2,462,360,745 | 帶環的圖,以顏色互換與 180° 旋轉正規化 |
| 僅放置的開局 | 14,236,865 | 獨立的六著無環表 |
每個局面都由其棋盤排列與兵的方向直接對應到一個整數。工作結果每個局面使用一個位元組:距離的奇偶性編碼勝或負,另有一個代碼表示和棋。
- 原始表:2.48 GB,包含每個局面的結果與剩餘步距。
- 局面瀏覽器用表:463 MiB,僅為決定性局面儲存距離。
- 壓縮稽核:每筆精簡條目都與原始表比對過。
驗證結果
正式求解在一台 M3 Max 上使用扁平位元組陣列。它按需生成 28,730,418,180 個開局後的有向著法,而不是儲存邊的圖,使整個求解過程能在一台筆電上完成。
結果接著通過了幾項獨立檢查:
- 值稽核:在全部 24.6 億個開局後局面中重新生成每個合法後繼局面,並在不使用求解器前驅計數器的情況下檢驗 minimax 等式。
- 距離稽核:以獨立的一輪檢查全部 209,074,518 個開局後決定性局面。
- 開局重播:使用另一套可讀性較高的規則引擎。
- 表示方式檢查:獨立測試編號/解編號、顏色正規化、兵的方向,以及生成的前驅邊。
- 威脅普查:兩個獨立偵測器在每個索引局面上對即刻獲勝著法完全一致。
發佈的表格也帶有自身的身分標記。一個規則標籤指明它所依據的確切變體,內部的 CRC-64/XZ 檢查碼覆蓋所有條目,因此局面瀏覽器絕不會無聲地用某套規則的局面去查詢另一套規則的表格。
| 欄位 | 值 |
|---|---|
| 規則標籤 | 0x54544303 |
| 開局後局面數 | 2,462,360,745 |
| 僅放置局面數 | 14,236,865 |
| 表格 CRC-64/XZ | 0xeb952765179a695e |
在先前技術的檢索中,我沒有找到更早的公開強解或弱解。這是一個有範圍限制的否定結果,並不證明沒有人私下解過。
哪一套規則?
這次求解屬於 1998 年的 Dream Green 版本。這個名字現在涵蓋不只一套規則:
| 規則版本 | 兵/開局的解讀 | 空盤 | 狀態 |
|---|---|---|---|
| 1998 年,依行進方向 | 折返的兵依其當前方向吃子 | 和棋 | 標準殘局庫 |
| 1998 年,僅去程 | 折返的兵不能吃子 | 和棋 | 替代殘局庫 |
| 2025 年鮑比·菲舍爾復刻版 | 宣稱有新的兵首著與開局規則 | 未知 | 需要完整規則書並另行求解 |
原始規則單說兵在遠端反轉方向,且只在「向前」移動時吃子,卻從未畫出折返吃子的示意圖。我採用行進方向的讀法:它的吃子斜線隨之轉向。一份詳細的法文轉錄與一個獨立可玩的實作都採同一解讀。設計者或出版者的直接裁定才能定案。
較嚴格的「僅去程」讀法會移除 426,173,880 個合法著法,並改變 16,529,908 個局面的值。其中有些完全翻轉:9,366 個標準版的勝在僅去程版變成負,810 個負變成勝。開局結果仍是和棋,但由於有數百萬筆表格條目不同,局面瀏覽器仍能辨識出是哪個變體。
結論
十六格就足以產生 24.8 億個索引局面,原因是吃子會回收棋子而非移除它們。這條規則造就了和棋背後的環,也造就了讓守和變得困難的戰術。
到 tic-tac-chec.brianhliou.com 與完整解對局。
資源:
- Tic-Tac-Chec 殘局庫局面瀏覽器:每個合法著法都依確切結果與決定性距離排序。
- 標準殘局庫 v1:463 MiB 的精簡殘局庫與 SHA-256 檢查碼。
- 求解器與研究紀錄:Rust 求解器、規則帳、驗證測試與重現指令。
- 正式求解紀錄:局面數、耗時、稽核與檢查碼。
- 自動產生的策略報告:完整的剩餘步距直方圖與重播的變化。
- 威脅與防守普查:窮盡式的著法寬度與即刻威脅統計。
- 兵規則變體比較:兩種兵解讀之間的確切轉換數量。
- Dream Green 原始規則:標準求解所依據的主要規則單。