介绍
PGN就是“可移植式棋局记号法”(Portable Game Notation),是一种以ASCII文本文件表示国际象棋棋局数据的标准设定。PGN设计成使人们很容易进行阅读和编写,电脑程序很容易进行解析和产生。定义和传播PGN的目的,是为了促进公开对局数据的共享交流,包括来自全世界的棋手(不管有无组织)、出版人和电脑国际象棋研究的。
PGN不是万能;也没有什么标准无所不能。它被希望作为数据交换的一种通用可移植式表示法,就是给予国际象棋应用群体能够从PGN本身导入导出来快速方便地处理对局数据的。对它的要求是:简洁明了、可在不同平台工作、多数人们和多种处理程序都能理解运用和产生,也就是说“同一种语言”、公开而不加密、易于扩展和升级、国际化、以及具有继承性。
一个标准的PGN对局
虽然初看上去它似乎比较冗长,但实际上PGN相当简单。以下是一个范例,而它具有的重要特征将在后文中展开描述:
[Event "F/S Return Match"]
[Site "Beijing, China"]
[Date "2020.04.28"]
[Round "29"]
[White "AAAAAAA"]
[Black "BBBBBBB"]
[Result "1/2-1/2"]
1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7 11. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4 15. Nb1 h6 16. Bh4 c5 17. dxe5 Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21. Nc4 Nxc4 22. Bxc4 Nb6 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1 Kxf7 27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd5 33. f3 Bc8 34. Kf2 Bf5 35. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5 40. Rd6 Kc5 41. Ra6 Nf2 42. g4 Bd3 43. Re6 1/2-1/2
结构
一个PGN数据文件是从零到很多盘PGN棋局的顺序性集合。空文件也是合法的PGN数据文件,虽然有点不太常规。
一个PGN棋局由两部分组成。第一是“标签对部分”,第二是“棋谱部分”。标签对部分用于识别棋局,有着标准的参数;棋谱则用“标准代数记谱法”表示,也将在后文加以描述。
标签对部分
标签对部分由一系列空的或更多的“标签对”组成。而标签对则由左右方括号、象征符号、字符串符号组成。象征符号是标签的名字,而字符串符号就是如之一起的标签值,它们的表示法都有一定标准。在一个标签对部分里不能出现同一个标签名多于一次以上。标签名是分大小写的,所有用于档案储存的标签名都是以大写字母开头
七个标签项
这是最基本七个标签项目,实际上输入时,顺序不一定这样严格,而且还可能根据需要进行扩展和增加。这七个基本标签项依顺序是:
1) Event 比赛名。比如:
[Event "FIDE World Championship"] //国际棋联世界锦标赛
[Event "Casual Game"] //即兴比赛
[Event "?"] //比赛名不详
2) Site 比赛地点。比如:
[Site "New York City, NY USA"] //美国纽约
[Site "Beijing, China"] //中国北京
3) Date 该局开始时日期,使用当地时间。比如:
[Date "2020.04.27"] //一看就懂了吧!
[Date "2020.??.??"] //2020年但月、日不详
注意日期的格式是:年.月.日
4) Round 该局在比赛中的轮次。比如:
[Round "1"]
[Round "3.1"] //第3大轮的第1小轮 ,以“.”分开;有更小的轮次则类似表示下去
[Round "?"] //轮次不详
5) White 白方棋手名字。有一定的书写规则,不同民族的人的姓名不好一概而论,但至少看懂是不难的。电脑棋手则在名字后加上版本信息。比如:
[White "Tal, Mikhail N."] //米哈依尔·N·塔尔
[White "Kasparov, Garry"] //加里·卡斯帕罗夫
6) Black 黑方棋手名字,与白方的规则没有区别。
7) Result 该局结果。比如:
[Result "0-1"] //黑胜
[Result "1-0"] //白胜
[Result "1/2-1/2"] //和棋
[Result "*"] //可能还在进行,可能该局作废,可能其它原因,反正结果不详
棋谱部分
包括棋步、回合数、可选的评注、以及棋局终止符。不合法的棋步不能出现在棋谱部分中,不过可以出现在注释中。
使用“标准代数记谱法”,以一个大写英文字母表示棋子:P=兵,N=马,B=象,R=车,Q=后,K=王 。但兵往往不需要用字母表示,一般省略。以小写字母“x”表示吃子,兵吃子与其他棋子吃子的表示法有少许区别。注意某方假如有不止一只棋子可以走到特定某一格的话,为了区别究竟是哪一只在走,有一套规定的表示法,但这与通常见到的书上的棋谱表示法类似……
短王车易位以“O-O”、长易位以“O-O-O”表示,注意这里是大写字母“O”,而不是数字“零”。
吃过路兵没有什么特殊表示法。至于兵的升变,以“=”后面紧接升变棋子的符号来表示。
一步棋带将军的就在后面加个“+”,将死就是用“#”表示。举个复杂点的棋谱写法,比如:fxg1=Q#,意思就是黑方f2上的兵吃掉g1格的某白子,升变为后,并且将死白方。
表示某着棋质量的有六种后缀:"!", "?", "!!", "!?", "?!", 以及 "??" ,意思都跟书上棋谱的默认意义类似。
必须要有一个棋局结束标记,那就是总是在棋谱最后的那个:1-0、或0-1、或1/2-1/2,表示结果,注意是数字“零”而不是字母“O”;如果结果不详则注个星号* 。这里的棋局结束标记必须要与前面Result标签对符合,但注意棋局结束标记不用引号引起来。
补充标签项
补充标签项不是必须的,实际上来自不同地方的PGN棋谱往往不一样。
棋手相关信息
- WhiteTitle 白方头衔,例如FM、IM、GM
- WhiteElo 白方国际等级分,指国际棋联的ELO等级分
- WhiteNA 白方email或其它网上地址
- WhiteType 白方类型,human指人类;program指软件(电脑),黑方写法雷同;如果这些补充信息欠奉,则用“-”表示。
赛事相关信息
- EventDate 赛事开始日子,与标签对里的Date不同,这是指整个赛事的开始日
- EventSponsor 赛事赞助者
- Section 区域,比如公开还是保留
- Stage 阶段,比如预赛还是决赛
- Board 台数,也就是表示团体赛或车轮战中的第几台(盘)
- Time 以“小时:分钟:秒钟”表示该局开始的当地时间
开局信息
- Opening 以字符串表示传统的开局名称
- Variation 变例名,以后将有提炼
- SubVariation 分支变例名
- ECO “开局百科”(Encyclopedia of Chess Openings)里定义的开局编号
- NIC 著名的“New in Chess”数据库里定义的开局编号
时限
以TimeControl作为标签名,有6种不同表示,举例:
- [TimeControl "?"] //时限不知道
- [TimeControl "-"] //无限时
- [TimeControl "40/9000"] //9000秒内(即2个半小时)走满40步
- [TimeControl "300"] //每方300秒包时制对局,也就是5分钟快棋
- [TimeControl "4500+60"] //用于“加时制”对局,这里是4500秒(90分钟)基础时限,然后每走一步往加60秒
- [TimeControl "*180"] //每步限时的“沙漏制”时限,这里星号后面的数字是秒数,即每一步都要在180秒之内走完,其实还可以定义额外的时限表示法。
开始局面
默认的开始局面,当然就是对局最初的原始局面。不过假如对局规定是从某一局面开始的,就会用到如下标签项。
- SetUp 如果数值是1,表示该局开始局面是“摆”出来的
- FEN 以“福斯夫-爱德华兹记号法”(Forsyth-Edwards Notation) 表示开始局面,关于FEN的表示法,下一篇再来解释
对局结论
以Termination标签名表示Result标签项没有能披露的额外信息
- [Termination "abandoned"] //该局放弃
- [Termination "adjudication"] //结果由第三方宣判
- [Termination "death"] //哦……
- [Termination "emergency"] //出现无法预料的情况
- [Termination "normal"] //常规结束
- [Termination "rules infraction"] //失利方违规
- [Termination "time forfeit"] //失利方超时
- [Termination "unterminated"] //没有结束
其它
这是不好归入以上各类的标签项。
- Annotator 评注者(们)的名字
- Mode 这是下该局的方式,比如OTB代表棋盘上,PM代表通过书面邮件,EM代表通过电子邮件,ICS指在网上站点下的,TC代表通过通常的长途电讯
- PlyCount 表示该局的步数,严格来说是指“半”步数