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) RedTeamBlackTeam:这是棋手所属的代表队 (俱乐部、棋协、省份或国家 ),它们通常写在 RedBlack标签的前面;
   (9) OpeningVariationECCO:开局名称、变例和 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) 棋手相关信息:红方有 RedTitleRedEloRedNA(这项通常会被 RedTeam所取代 )RedType等,黑方写法雷同;
   (2) 赛事相关信息: EventDateEventSponsorSectionStageBoardTime等;
   (3) 时限:以 TimeControl为标签的多种表示。
   (4) 对局结论,以 Termination为标签的多种表示。
   (5) 其他,诸如 AnnotatorModePlyCount等,请参阅《 国际象棋译文苑》文摘—— 关于PGNFEN记谱规范()一文。
 
三、棋谱部分
 
  这部分是 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

你可能感兴趣的:(文件)