国际象棋-关于PGN和FEN记谱规范(上)

介绍

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棋谱往往不一样。

棋手相关信息

  1. WhiteTitle 白方头衔,例如FM、IM、GM
  2. WhiteElo 白方国际等级分,指国际棋联的ELO等级分
  3. WhiteNA 白方email或其它网上地址
  4. WhiteType 白方类型,human指人类;program指软件(电脑),黑方写法雷同;如果这些补充信息欠奉,则用“-”表示。

赛事相关信息

  1. EventDate 赛事开始日子,与标签对里的Date不同,这是指整个赛事的开始日
  2. EventSponsor 赛事赞助者
  3. Section 区域,比如公开还是保留
  4. Stage 阶段,比如预赛还是决赛
  5. Board 台数,也就是表示团体赛或车轮战中的第几台(盘)
  6. Time 以“小时:分钟:秒钟”表示该局开始的当地时间

开局信息

  1. Opening 以字符串表示传统的开局名称
  2. Variation 变例名,以后将有提炼
  3. SubVariation 分支变例名
  4. ECO “开局百科”(Encyclopedia of Chess Openings)里定义的开局编号
  5. NIC 著名的“New in Chess”数据库里定义的开局编号

时限

以TimeControl作为标签名,有6种不同表示,举例:

  1. [TimeControl "?"]  //时限不知道
  2. [TimeControl "-"]  //无限时
  3. [TimeControl "40/9000"]  //9000秒内(即2个半小时)走满40步
  4. [TimeControl "300"]  //每方300秒包时制对局,也就是5分钟快棋
  5. [TimeControl "4500+60"]  //用于“加时制”对局,这里是4500秒(90分钟)基础时限,然后每走一步往加60秒
  6. [TimeControl "*180"]  //每步限时的“沙漏制”时限,这里星号后面的数字是秒数,即每一步都要在180秒之内走完,其实还可以定义额外的时限表示法。

开始局面

默认的开始局面,当然就是对局最初的原始局面。不过假如对局规定是从某一局面开始的,就会用到如下标签项。

  1. SetUp 如果数值是1,表示该局开始局面是“摆”出来的
  2. FEN 以“福斯夫-爱德华兹记号法”(Forsyth-Edwards Notation) 表示开始局面,关于FEN的表示法,下一篇再来解释

对局结论

以Termination标签名表示Result标签项没有能披露的额外信息

  1. [Termination "abandoned"]      //该局放弃
  2. [Termination "adjudication"]    //结果由第三方宣判
  3. [Termination "death"]        //哦……
  4. [Termination "emergency"]      //出现无法预料的情况
  5. [Termination "normal"]       //常规结束
  6. [Termination "rules infraction"]  //失利方违规
  7. [Termination "time forfeit"]    //失利方超时
  8. [Termination "unterminated"]    //没有结束

其它

这是不好归入以上各类的标签项。

  1. Annotator 评注者(们)的名字
  2. Mode 这是下该局的方式,比如OTB代表棋盘上,PM代表通过书面邮件,EM代表通过电子邮件,ICS指在网上站点下的,TC代表通过通常的长途电讯
  3. PlyCount 表示该局的步数,严格来说是指“半”步数
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容