中國象棋電子棋譜PGN格式研究
正文
PGN(Portable Game Notation)是棋類游戲過程的文件格式,既然國際象棋以這個規(guī)范作為記錄棋譜的標準,那么對于中國象棋來說,在還沒有一個統(tǒng)一標準的今天,PGN無疑是一個好的選擇。PGN文件有以下特點:
(1) PGN文件是文本格式的,可以用任何文本編輯軟件建立和修改;
(2) PGN文件分為“標簽部分”和“著法部分”,兩部分都規(guī)范整齊,既方便閱讀,也便于棋譜編輯軟件產(chǎn)生和解讀;
(3) 一個PGN文件允許包含多個棋局,形成簡易的棋譜數(shù)據(jù)庫;(很少有這么做的,多半是建成CBL格式)
(4) PGN文件的格式是公開的,現(xiàn)在已經(jīng)被絕大多數(shù)棋譜編輯軟件所接受(僅指國際象棋,目前還沒有可以產(chǎn)生PGN文件的中國象棋軟件(這句話已經(jīng)失效,大部分打譜軟件都可以做pgn格式))。
一個正常的PGN格式如下(注釋用 ’ 表示,不標注必須存在可以舍棄)
[Game "Chinese Chess"] ’?必須存在,缺省值Chinese Chess
[Event "賽事"] ’ 文本內(nèi)對應漢字為對應定義,如有下同
[Site "地點"]
[Date "時間格式如yyyy.mm.dd"] ’ 這里只接受yyyy.mm.dd
[Time "hh:mm:ss"] ’ 這里只接受hh:mm:ss。
[Round "輪次"]
[Red "紅方"] ’ 紅方名字
[Black "黑方"] ’ 黑方名字
[Result "*"] ’ 此部分詳見開局注釋,必須存在
[Title "標題"]
[TimeControl "計時"]
[RedElo "紅方積分"]
[BlackElo "黑方積分"]
[RedTeam "紅方團隊"]
[BlackTeam "黑方團隊"]
[Annotator "解說者,如蔴球電子"]
[Creator "創(chuàng)建者,如蔴球電子"]
{注釋例子,result中*表示未知結果,1/2-1/2表示和棋,1-0表示紅方贏,0-1表示黑方贏。} ’ 開局注釋
1. 炮八平五 {紅方第一步}
馬8進7 {黑方第一步}
......(略)
其他格式如Opening、Variation和ECCO:開局名稱、變例和ECCO編號,這些都代表開局的信息,F(xiàn)EN表示開始局面,中局、殘局和排局等擺出來的局面,作棋譜記錄時通常要規(guī)定這個選項,F(xiàn)ormat:表示記譜方法,可以是Chinese(中文縱線格式)、WXF(WXF縱線格式)和ICCS(ICCS坐標格式),默認為Chinese。其他如EventDate、EventSponsor、Section、Stage、Board、Time等; 時限以TimeControl為標簽的多種表示,對局結論,以Termination為標簽的多種表示。其他,諸如Annotator、Mode、PlyCount等,請參閱《國際象棋譯文苑》文摘——關于PGN和FEN記譜規(guī)范(上)一文。(這段話中很多格式并非必須存在的,由于原文章過于古老,很多已經(jīng)棄用)
棋譜規(guī)范(有改動)
這部分是PGN的主要內(nèi)容,記錄了每一回合的著法、評注和結果。對于這部分內(nèi)容的格式,有以下幾個規(guī)定:
(1) 棋譜部分必須在標簽部分的后面,棋譜部分當中不能插入標簽;
(2) 每一回合都由“回合數(shù)”、“紅方著法”和“黑方著法”三部分組成,回合數(shù)后面要跟“.”(句點),三者之間用兩個分隔符隔開(回合數(shù)后面的句點也不例外),回合之間也用分隔符隔開;
(4) 分割符只能是空格、制表符或換行符,一個著法當中不能有分割符(回合數(shù)也一樣);
(5) 評注用花括號“{}”表示,評注內(nèi)可以是除花括號以外的任何字符(包括分割符),評注可以插在任何著法的后面,它和著法之間必須用分割符隔開;
(7) 結果以后只能有評注,不能有著法;如果出現(xiàn)標簽,則說明這是下一局棋。
8.紅方統(tǒng)一用漢字表示數(shù)字,黑方統(tǒng)一用全角數(shù)字表示數(shù)字。(半角數(shù)字只是為了方便舉例錯誤寫法)
例如,下列PGN文件的片段是允許的:
51. 兵五平六
{紅方這一步長將還不足以判負,
但是下一次就要判負了。}
將4平5
52.?兵六平五 將5平4 53. 兵五平六 0-1 {紅方長將判負}
又例如,下列PGN文件的片段是不合理的:
51.
兵五平六 將4平5 // 句點后面應該加空格
53. 兵五{再平六就要判負了}平四 // 評注不能把一個著法拆散。
變著用圓括號“()”表示,變著是以棋譜的形式對棋譜的評注,因此括號里的內(nèi)容本身也是棋譜,里面還可以嵌套評注(用花括號)和變著(用圓括號)。變著針對的是括號前的著法,例如在下面一段棋譜中,變著指的是“炮2進7”改走“炮2平3”:
7. 車六進八 炮2進7 (7. ... 炮2平3 8. 帥五平六 炮3進5 9. 車六進一 將5進1 10. 炮五退二 {黑方不易駕馭局面})
1. 炮八平五 {紅方第一步}
馬8進7 {黑方第一步} (1. ... 炮8平5 2.?馬八進七?馬8進7?3. 車九平八 車9進8??{測試例子})
本人的文章參考了以下網(wǎng)站,謝謝!
https://www.xqbase.com/protocol/cchess_pgn.htm
(2004年11月初稿,2006年2月修訂,由于某些說明過老,個人注釋用中文括號表示)