天天看點

PGN檔案格式

一、概述      PGN(Portable Game Notation)是棋類遊戲過程的檔案格式,既然國際象棋以這個規範作為記錄棋譜的标準,那麼對于中國象棋來說,在還沒有一個統一标準的今天, PGN無疑是一個好的選擇。 PGN檔案有以下特點:    (1) PGN檔案是文本格式的,可以用任何文本編輯軟體建立和修改;    (2) PGN檔案分為“标簽部分”和“着法部分”,兩部分都規範整齊,既友善閱讀,也便于棋譜編輯軟體産生和解讀;    (3) 一個 PGN檔案允許包含多個棋局,形成簡易的棋譜資料庫;    (4) PGN檔案的格式是公開的,現在已經被絕大多數棋譜編輯軟體所接受 (僅指國際象棋,目前還沒有可以産生 PGN檔案的中國象棋軟體 )。   二、标簽部分      PGN的标簽都是由方括号“ []”表示的内容,每個标簽占一行,它們反映了棋局的一些基本情況。中國象棋的 PGN記譜規範同國際象棋類似,基本标簽有:    (0) Game:遊戲類型,國際象棋沒有這個标簽,中國象棋的 PGN檔案中這個标簽必須放在第一位,其值必須為“ Chinese Chess”;    (1) Event:比賽名;    (2) Site:比賽地點;    (3) Date:比賽日期,格式統一為“ yyyy.mm.dd”;    (4) Round:比賽輪次;    (5) Red:紅方棋手,不同與國際象棋的 White;    (6) Black:黑方棋手;    (7) Result:比賽結果,“紅先勝”用“ 1-0”表示,“黑先勝”用“ 0-1”表示,和棋用“ 1/2-1/2”表示,未知用“ *”表示。     另外還要增加具有中國象棋比賽特點的資訊:    (8) RedTeam和 BlackTeam:這是棋手所屬的代表隊 (俱樂部、棋協、省份或國家 ),它們通常寫在 Red和 Black标簽的前面;    (9) Opening、 Variation和 ECCO:開局名稱、變例和 ECCO編号,這些都代表開局的資訊,可參考《 中國象棋開局編号——說明》一文;   這裡舉一個例子說明:   [Game "Chinese Chess"] [Event "第24屆“五羊杯”全國冠軍邀請賽"] [Site "廣州"] [Date "2004.01.05"] [Round "決賽(加賽)"] [RedTeam "廣州"] [Red "呂欽"] [BlackTeam "廣州"] [Black "許銀川"] [Result "1-0"] [Opening "中炮過河炮對左三步虎"] [ECCO "B24"]      (10) FEN:開始局面,中局、殘局和排局等擺出來的局面,作棋譜記錄時通常要規定這個選項;    (11) Format:表示記譜方法,可以是 Chinese(中文縱線格式 )、 WXF(WXF縱線格式 )和 ICCS(ICCS坐标格式 ),預設為 Chinese。     以下資訊可以作為标簽存在,也可以寫在注釋中:    (1) 棋手相關資訊:紅方有 RedTitle、 RedElo、 RedNA(這項通常會被 RedTeam所取代 )、 RedType等,黑方寫法雷同;    (2) 賽事相關資訊: EventDate、 EventSponsor、 Section、 Stage、 Board、 Time等;    (3) 時限:以 TimeControl為标簽的多種表示。    (4) 對局結論,以 Termination為标簽的多種表示。    (5) 其他,諸如 Annotator、 Mode、 PlyCount等,請參閱《 國際象棋譯文苑》文摘—— 關于PGN和FEN記譜規範(上)一文。   三、棋譜部分     這部分是 PGN的主要内容,記錄了每一回合的着法、評注和結果。對于這部分内容的格式,有以下幾個規定:    (1) 棋譜部分必須在标簽部分的後面,棋譜部分當中不能插入标簽;    (2) 每一回合都由“回合數”、“紅方着法”和“黑方着法”三部分組成,回合數後面要跟“ .” (句點 ),三者之間用兩個分隔符隔開 (回合數後面的句點也不例外 ),回合之間也用分隔符隔開;    (3) 着法的表示必須和 Format标簽相統一,如果沒有 Format标簽,則用中文縱線格式來表示;    (4) 分割符隻能是空格、制表符或換行符,一個着法當中不能有分割符 (回合數也一樣 );    (5) 評注用花括号“ {}”表示,評注内可以是除花括号以外的任何字元 (包括分割符 ),評注可以插在任何着法的後面,它和着法之間必須用分割符隔開;    (6) 整個棋局結束時必須用“ 1-0” (紅方勝 )、“ 0-1” (黑方勝 )、“ 1/2-1/2” (和棋 )或“ *” (未知 )表示結果,結果和着法之間必須用分割符隔開;    (7) 結果以後隻能有評注,不能有着法;如果出現标簽,則說明這是下一局棋。     例如,下列 PGN檔案的片段是允許的: 51. 兵五平六 {紅方這一步長将還不足以判負, 但是下一次就要判負了。} 将4平5 52. 兵六平五 将5平4 53. 兵五平六 0-1 {紅方長将判負}     又例如,下列 PGN檔案的片段是不合理的: 51.兵五平六 将4平5      // 句點後面應該加分割符 [Format "WXF"] 52. P6.5 K5.4  // 棋譜部分不能含有标簽 53. 兵五{再平六就要判負了}平四 // 評注不能把一個着法拆散   四、舉例     下面是一個很經典的例子,這個例子能很好地反映中國象棋 PGN格式的特點:

[Game "Chinese Chess"]
[Event "許銀川讓九子對聶棋聖"]
[Site "廣州"]
[Date "1999.12.09"]
[Red "許銀川"]
[Black "聶衛平"]
[Result "1-0"]
[FEN "rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/9/1C5C1/9/RN2K2NR r - - 0 1"]
{  評注:許銀川
  象棋讓九子原屬茶餘飯後的娛樂,不意今日卻被擺上賽桌,更為離奇的是:我的對手竟是在圍棋棋壇上叱咤風雲的聶大帥。賽前我并不了解對手的實力,但相信以聶棋聖在圍棋上所展現出來的過人智慧,必能在棋理上觸類旁通。是以我在賽前也作了一些準備,在對局中更是小心翼翼,不敢掉以輕心。
  許銀川讓去5隻兵和雙士雙相,執紅先行。棋盤如右圖所示。當然,PGN檔案裡是無法嵌入圖檔的。}
PGN檔案格式
1. 炮八平五 炮8平5
{  紅方首着架中炮必走之着,聶棋聖還架中炮拼兌子力,戰術對頭。}
2. 炮五進五 象7進5 3. 炮二平五
{  再架中炮也屬正着,如改走馬八進七,則象5退7,紅方帥府受攻,當然若紅方仍再架中炮拼兌,那麼失去雙炮就難有作用了。}
馬8進7 4. 馬二進三 車9平8 5. 馬八進七 馬2進1 6. 車九平六 車1平2
{  聶棋聖仍按正常戰法出動主力,卻忽略了紅方車塞象眼的兇着,應走車1進1。}
7. 車六進八
{  紅車疾點象眼,局勢霎時有劍拔弩張之感。這種對弈不能以常理揣度,紅方隻能像程咬金的三闆斧一般猛攻一輪,若黑方防守得法則勝負立判。}
炮2進7
{  卻說聶棋聖見我來勢洶洶,神色頓時頗為凝重,一番思索之後沉下底炮以攻為守,果是身手不凡。此着如改走炮2平3,則帥五平六,炮3進5,車六進一,将5進1,炮五退二,黑方不易駕馭局面。}
8. 車一進四 炮2平1 9. 馬七進八 炮1退4 10. 馬八退七 炮1進4 11. 馬七進八 車2進2
{  其實黑方仍可走炮1退4,紅方若續走馬八退七,則仍炮1進4不變作和,因黑右車叫将紅可車六退九,故不算犯規。}
12. 炮五平八 炮1退4
{  劣着,導緻失子,應走車2平3,紅方如馬八進六,則車3退1,紅方無從着手。但有一點必須注意,黑車躲進暗道似與棋理相悖,故聶棋聖棄子以求局勢緩和情有可原。}
13. 炮八進五 炮1平9 14. 炮八平三 車8進2 15. 炮三進一 車8進2 16. 馬八進六 炮9平5
17. 炮三平一 士6進5 18. 馬六進四 車8平5 19. 帥五平六
{  可直接走馬四進三叫将再踩中象。}
車5平6 20. 馬四進三 将5平6 21. 車六退四 卒5進1 22. 車六進二 炮5平7
23. 前馬退二 象5進7 24. 馬二退三 卒5進1 25. 車六平三 卒5平6 26. 車三進三 将6進1
27. 後馬進二 士5進6 28. 馬二進三 将6平5 29. 前馬進二
{  紅方有些拖沓,應直接走車三平六立成絕殺。}
将5進1 30. 車三平六 士6退5 31. 馬二退三 車6退1 32. 車六退三
{  再擒一車,以下着法僅是聊盡人事而已。}
車6平7 33. 車六平三 卒6平7 34. 車三平五 将5平6 35. 帥六平五 将6退1
36. 車五進二 将6退1 37. 車五進一 将6進1 38. 車五平七
{  至此,聶棋聖認負。與此同時,另一盤圍棋對弈我被屠去一條大龍,已無力再戰,遂平分秋色,皆大歡喜。}
1-0
  五、變着     變着用圓括号“ ()”表示,變着是以棋譜的形式對棋譜的評注,是以括号裡的内容本身也是棋譜,裡面還可以嵌套評注 (用花括号 )和變着 (用圓括号 )。變着針對的是括号前的着法,例如在下面一段棋譜中,變着指的是“炮2進7”改走“炮2平3”:
 
7. 車六進八 炮2進7 (7. ... 炮2平3 8. 帥五平六 炮3進5 9. 車六進一 将5進1 10. 炮五退二 {黑方不易駕馭局面})
  六、 PGN 與 XML     如今網絡技術發展飛快,棋譜要能釋出在網際網路上,需要一種容易被網際網路應用程式所識别的格式, XML 無疑是一種好的選擇。由于 PGN 的标簽和 XML 的容器具有類似之處,是以 PGN 和 XML 的轉換非常友善。目前 XML 的棋譜規範尚未形成,但是隻要照搬 PGN 格式的内容,就不難形成一個公認的 XML 格式。例如,上面一個執行個體轉化為 XML 格式的文本,就可以是以下形式:
 
<pgn>
 <game> Chinese Chess </game>
 <event> 許銀川讓九子對聶棋聖 </event>
 <site> 廣州 </site>
 <date> 1999.12.09 </date>
 <red> 許銀川 </red>
 <black> 聶衛平 </black>
 <result> 1-0 </result>
 <fen> rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/9/1C5C1/9/RN2K2NR r - - 0 1 </fen>
 <comment>評注:許銀川
  象棋讓九子原屬茶餘飯後的娛樂,不意今日卻被擺上賽桌,更為離奇的是:我的對手竟是在圍棋棋壇上叱咤風雲的聶大帥。賽前我并不了解對手的實力,但相信以聶棋聖在圍棋上所展現出來的過人智慧,必能在棋理上觸類旁通。是以我在賽前也作了一些準備,在對局中更是小心翼翼,不敢掉以輕心。
  許銀川讓去5隻兵和雙士雙相,執紅先行。在XML中,圖檔可以用超連結的形式嵌入,例如:<img src="cchess_pgn.gif">。
 </comment>
 <move> 炮八平五 </move>
 <move> 炮8平5 </move>
 <comment> 以後省略…… </comment>
 <end> 1-0 </end>
</pgn>
    轉自: http://www.xqbase.com/protocol/cchess_pgn.htm

轉載于:https://www.cnblogs.com/yang_sq/archive/2009/12/24/1631396.html