FEN文件格式

一、 FEN 的优势
 
   FEN(Forsyth-Edwards Notation)是专门用来表示象棋局面的记录规范,在这个规范下,一个局面可以简单地用一行“ FEN格式串”来表示,而不必烦琐地说:“红帅在四路次底线,黑将在5路底线……”。由于它是文本格式的 (只牵涉到很有限的几个字母、数字和符号 ),因此网上传递棋局就非常方便,不用把棋图画在纸上或用文字笨拙地描述了,而是用棋谱编辑软件摆好局面,自动得到 FEN格式串,再贴到诸如 Web网页、 BBS、电子论坛等能够传递文字的网络应用平台上。读者面对 FEN格式传,只要借助于棋谱编辑软件,用“赋值”和“粘贴”就可以完全重现局面,使得棋谱交流快速而高效。
 
二、 FEN 格式串
 
  国际象棋的 FEN格式串是由 6ASCII字符串组成的代码 (彼此 5个空格隔开 ),这 6段代码的意义依次是:
   (1) 棋盘上的棋子,这是 FEN格式串的主要部分;
   (2) 轮到哪一方走子;
   (3) 每方及该方的王翼和后翼是否还存在“王车易位”的可能;
   (4) 是否存在吃过路兵的可能,过路兵是经过哪个格子的;
   (5) 最近一次吃子或者进兵后棋局进行的步数 (半回合数 ),用来判断“ 50回合自然限着”;
   (6) 棋局的回合数。
  中国象棋没有“王车易位”和“吃过路兵”的着法,所以 FEN格式串的这两项空缺,以最初局面为例说明:
 
rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1
 
   (1) 红色区域,表示棋盘布局,小写表示黑方,大写表示红方,其他规则同国际象棋的 FEN规范 (请参阅《 国际象棋译文苑》文摘—— 关于PGNFEN记谱规范()一文 )。这里要注意两点,一是中国象棋棋盘有 10行,所以要用 9个“ /”把每一行隔开;二是棋子名称用英文字母表示,国际象棋中没有的棋子是仕 ()和炮,这里分别用字母 A(a)C(c)表示。
   (2) 绿色区域,表示轮到哪一方走子,“ w”表示红方,“ b”表示黑方。 (有人认为红方应该用“ r”表示,很多象棋软件确实是这样表示的。 ElephantBoard尽管用“ w”表示,但识别时采取灵活的办法,即“ b”表示黑方,除此以外都表示红方。 )
   (3) 深紫色区域,空缺,始终用“ -”表示。
   (4) 紫红色区域,空缺,始终用“ -”表示。
   (5) 蓝色区域,表示双方没有吃子的走棋步数 (半回合数 ),通常该值达到 120就要判和 (六十回合自然限着 ),一旦形成局面的上一步是吃子,这里就标记“ 0”。 (这个参数对于普通局面的意义不大, ElephantBoard的规则处理器并不是根据这一项来判断和棋的,所以总是计为“ 0”。 )
   (6) 棕色区域,表示当前的回合数,在研究中局或排局时,作为研究对象的局面,这一项可以写 1,随着局势的发展逐渐增加。
 
三、 FEN 文件
 
   FEN格式串有很多载体,通常的做法是把它保存成后缀为“ .FEN”的文件。 FEN文件是 ASCII码文件,可以用任何文本编辑软件来建立和修改,也可以通过象棋棋谱软件来产生。
 
四、历史局面的表示
 
  这是只在“ 中国象棋通用引擎协议(UCCI协议 )中采用的方法,用来表示历史局面。在 UCCI协议中,局面用 position fen <fen_string>来传递,由于 FEN格式串无法记录历史局面,所以该指令后面必须用 moves选项来说明。例如右图局面,发生时,界面向引擎传递局面信息:
position fen 9/9/3k5/9/9/9/4R4/3A5/8r/4K4 b - - 0 1
  此时引擎走车9进1是没有问题的。然而当它是某个长将局面的延续时,界面向引擎传递的局面信息就必须用 moves选项来说明:
position fen 9/9/3k5/9/9/9/4R4/3A5/4K4/8r b - - 0 1 moves i0i1 e1e0 i1i0 e0e1 i0i1 e1e0 i1i0 e0e1 i0i1 e1e0
  尽管也是右图的局面,但意义已经发生了变化,此时引擎不可能再走车9进1,因为紧接着一步帅五进一,导致局面重复第三次,黑方被判长将作负。
FEN文件格式

  ElephantBoard向引擎传递局面时,<fen_string>总是最近一次吃过子的局面(或开始局面),后面所有的着法都用moves选项来传递给引擎,这样就包含了判断自然限着和长打的历史信息,这些信息可由引擎来处理。

  
  转自: http://www.xqbase.com/protocol/cchess_fen.htm

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