分页: 24 / 24

Re: 將製作ejcees(中國象棋打譜程式)

发表于 : 2026年 4月 23日 01:38
ejsoon
標準pgn格式:

代码: 全选

[Game "Chinese Chess"]
[Title "尹昇 先胜  赵攀伟"]
[Event "2026年第二届胡林翼杯象棋公开赛"]
[Red "尹昇"]
[RedTeam ""]
[Black "赵攀伟"]
[BlackName ""]
[Opening ""]
[Date ""]
[Site ""]
[Round ""]
[Format "ICCS"]
1. C3-C4 B7-C7
2. H2-E2 C9-E7
3. C0-A2 I9-I8
4. H0-G2 I8-B8
5. B2-D2 B8-B1
6. I0-I1 H7-H1
7. E2-E1 B1-B2
8. I1-H1 B2-D2
9. H1-H9 D2-G2
10. E1-E6 D9-E8
11. H9-G9 G2-G3
12. B0-D1 B9-D8
13. E6-E4 A9-B9
14. G9-H9 B9-B5
15. D1-F2 G3-E3
16. D0-E1 B5-E5
17. A0-B0 D8-E6
18. B0-B9 E8-D9
19. B9-B7 E5-E4
20. F2-E4 E3-E4
21. H9-H2 E7-G9
22. H2-E2 C7-G7
23. E1-D0 G7-G0
24. E0-E1 E4-E2
25. E1-E2 F9-E8
26. B7-B3 G0-D0
27. B3-E3 E6-G5
28. E3-D3 D0-A0
29. D3-D6 G5-F3
30. D6-G6 G9-E7
31. G6-G3 F3-G5
32. G3-E3 E7-G9
33. E2-E1 A6-A5
34. E1-E0 A5-A4
35. A3-A4 A0-A4
36. E3-A3 A4-B4
37. A3-A6 B4-B7
38. A6-C6 B7-E7
39. C6-G6 G9-I7
40. E0-D0 I6-I5
41. C4-C5 E8-F7
42. F0-E1 I5-I4
43. G6-H6 I4-I3
44. H6-H9 E9-E8
45. H9-D9 I3-H3
46. C5-D5 H3-G3
47. D9-D6 E8-E9
48. D6-D7 I7-G9
49. D7-C7 F7-E8
50. D5-D6 E8-D9
51. C7-C4 E7-G7
52. C4-C7 G7-E7
53. C7-C5 G5-F3
54. D6-D7 E7-E4
55. C5-F5 D9-E8
56. D7-D8 E4-D4
57. D0-E0 E8-D7
58. F5-D5 G3-G2
59. E0-D0 D7-E8
60. D0-D1 G2-G1
61. D5-F5 E8-D7
62. F5-F3 D4-D8
63. E1-D2 G9-E7
64. F3-E3 G1-F1
65. E3-E7  *

Re: 將製作ejcees(中國象棋打譜程式)

发表于 : 2026年 4月 23日 08:25
ejsoon
講解中國象棋的標準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 格式來整理私人的棋譜庫,還是為了開發某種程序需要校對格式呢?