講解中國象棋的標準pgn格式
代码: 全选
在中國象棋(Xiangqi)的數位化記錄中,雖然我們常用 **PGN (Portable Game Notation)** 這個詞,但嚴格來說,中國象棋使用的是基於國際象棋 PGN 格式修改而來的 **XQFE** 或 **WXF** 標記標準。
以下是中國象棋標準棋譜格式的詳細拆解:
---
## 1. 檔案結構
一個標準的中國象棋 PGN 檔案通常由兩個部分組成:**標籤部份 (Tag Section)** 和 **著法部份 (Movetext Section)**。
### 標籤部份 (Tag Section)
這部分用中括號包裹,提供對局的背景資訊。常見的標籤包括:
* `[Game "Chinese Chess"]`:遊戲類型。
* `[Event "賽事名稱"]`:比賽名稱。
* `[Round "輪次"]`:第幾輪比賽。
* `[Red "棋手名"]`:紅方姓名。
* `[Black "棋手名"]`:黑方姓名。
* `[Result "1-0"]`:結果(1-0 紅勝,0-1 黑勝,1/2-1/2 和棋)。
* `[FEN "起始陣式"]`:如果不是從開局開始,需註明 FEN 字串。
### 著法部份 (Movetext Section)
這部分記錄具體的走子過程,序號後接紅方走子,再接黑方走子。
---
## 2. 座標標記法 (Algebraic Notation)
與國際象棋類似,中國象棋的標準電子格式通常採用**縱線座標法**。
### 棋盤座標系統
* **水平軸(橫向):** 從左到右用字母 **a 到 i** 表示(共 9 條線)。
* **垂直軸(縱向):** 從下到上用數字 **0 到 9** 表示(共 10 條線)。
> **注意:** 紅方底線為 `0`,黑方底線為 `9`。
> 例如:紅方左側底角車的位置是 `a0`,黑方右側底角炮的位置是 `h7`。
### 著法格式:`[起點座標][終點座標]`
不同於中文傳統棋譜(如「炮二平五」),電子格式直接記錄格點的移動:
* **h2e2**:代表位於 h2 的子移動到了 e2(相當於炮二平五)。
* **h0g2**:代表位於 h0 的子移動到了 g2(相當於馬二進三)。
---
## 3. 中文傳統格式 vs. 電子標準格式
雖然 PGN 內部存儲的是座標,但許多軟體會將其轉換為中文術語以供閱讀。
| 類型 | 電子座標 (ICCS) | 中文傳統格式 |
| :--- | :--- | :--- |
| 進步 | `h0g2` | 馬二進三 |
| 平移 | `h2e2` | 炮二平五 |
| 退步 | `e2e1` | 炮五退一 |
---
## 4. FEN (Forsyth-Edwards Notation) 記法
在 PGN 中,如果對局不是從初始狀態開始,會使用 `[FEN "..."]` 標籤。中國象棋的 FEN 與國際象棋略有不同:
* **棋子縮寫:**
* **紅方 (大寫):** `R` (車), `N` (馬), `B` (相), `A` (仕), `K` (帥), `C` (炮), `P` (兵)。
* **黑方 (小寫):** `r` (車), `n` (馬), `b` (象), `a` (士), `k` (將), `c` (砲), `p` (卒)。
* **結構:** 從第 9 行(黑方底線)描述到第 0 行,斜線 `/` 分隔每一行,數字代表連續的空格。
**初始局面的 FEN 範例:**
`rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1`
---
## 5. 範例展示
一個完整的中國象棋 PGN 檔案看起來像這樣:
```text
[Game "Chinese Chess"]
[Event "2024 友誼賽"]
[Red "玩家A"]
[Black "玩家B"]
[Result "1-0"]
1. h2e2 h7e7 2. h0g2 h9g7 3. i0h0 i9h9 4. g2f4 b9a7
```
> **重點提示:**
> 如果你在編寫程式或分析棋譜,請確保使用 **UTF-8** 編碼,以防止標籤中的中文姓名或賽事名稱出現亂碼。
您目前是在處理現有的棋譜檔案,還是正打算為自己的對局寫一個記錄器?
會否可以有[Date ""]
[Site ""]
[Round ""]
這樣的屬性?是否可以認為可以擅自添加屬性?
代码: 全选
是的,你的理解完全正確。在 PGN 格式中,這些屬性(Tags)不僅是**標準組成部分**,而且 PGN 協議本身就設計為**可擴展的**。
以下是針對你疑問的詳細解答:
---
### 1. 標準的「七大標籤」 (STR)
在 PGN 規範中,有七個標籤被稱為 **STR (Seven Tag Roster)**,它們被認為是必不可少的。如果你在使用專業的象棋數據庫軟體(如象棋橋、XQWizard),它們通常會自動生成這七項:
1. `[Event ""]` (賽事)
2. `[Site ""]` (地點)
3. `[Date ""]` (日期,格式通常為 YYYY.MM.DD)
4. `[Round ""]` (輪次)
5. `[Red ""]` (紅方棋手)
6. `[Black ""]` (黑方棋手)
7. `[Result ""]` (結果)
所以,你提到的 `[Date ""]`、`[Site ""]`、`[Round ""]` 絕對不是擅自添加,而是**標準要求**的內容。
---
### 2. 是否可以「擅自」添加屬性?
**可以。** PGN 格式非常靈活,它允許定義「用戶自定義標籤」。只要符合格式規範(中括號包裹、標籤名在先、值在雙引號內),任何解析器都會將其視為合法的元數據。
常見的自定義或擴展標籤包括:
* `[Annotator ""]`:記錄棋譜註解者。
* `[RedTitle ""]` / `[BlackTitle ""]`:棋手頭銜(如:特級大師)。
* `[RedTeam ""]` / `[BlackTeam ""]`:所屬隊伍。
* `[ECO ""]`:開局分類代碼。
* `[Opening ""]`:開局名稱(例如:當頭炮對屏風馬)。
* `[Time ""]`:具體比賽時間。
* `[Termination ""]`:比賽結束的具體原因(如:超時、認輸)。
---
### 3. 添加屬性時的注意事項
雖然你可以隨意添加屬性,但為了確保檔案在不同軟體間的**兼容性**,建議遵循以下原則:
* **唯一性:** 標籤名稱不要與標準標籤衝突。
* **格式:** 標籤名只能包含字母、數字和下劃線(不建議使用中文做標籤名,但標籤的值可以使用中文)。
* **順序:** 雖然規範建議將 STR(七大標籤)放在最前面,但大多數軟體對自定義標籤的位置並不敏感。
---
### 4. 示例
這是一個包含了標準標籤與自定義標籤的完整頭部:
```text
[Event "2026年五一盃"]
[Site "廣州"]
[Date "2026.05.01"]
[Round "1"]
[Red "王天一"]
[Black "鄭惟桐"]
[Result "1/2-1/2"]
[RedTeam "杭州"]
[BlackTeam "四川"]
[Annotator "人工智慧助手"]
[Opening "中炮過河車對屏風馬左馬盤河"]
```
> **小貼士:**
> 如果你的 `Date` 標籤中某個部分未知,規範要求用 `??` 代替。
> 例如:`[Date "2026.??.??" ]`(只知道年份)。
您是打算用 PGN 格式來整理私人的棋譜庫,還是為了開發某種程序需要校對格式呢?