FEN(局面码)是什么?

来自皮卡鱼 Wiki
跳到导航 跳到搜索

返回“棋软知识”

FEN(Forsyth-Edwards Notation)是一种记录象棋局面的方法,源自国际象棋。

只需要一串字符串就可以代表一个局面,非常方便,引擎接收局面也是靠FEN。

一串FEN至少有局面信息和轮走方信息。


FEN的基础记录方法如下:

1.先开始从黑方底线记录,一直到红方底线;同时每条横线从左到右记录(红方视角下)。

2.每个字母分别代表一类子力:k帅将 a士 b象 c炮 n马 r车 p兵卒,大写字母代表红方的子,小写字母代表黑方的子

3.遇到空格时,记录连续的空格数(也有每个空格单独记作1的记法)

4.一条横线记录完后,以/结束,然后开始记录下一条横线。最后一条横线(红方底线)记录完时,不要写/。

5.全部横线记录完后,写一个空格,然后写w或者b(w红先,b黑先),也有用r代表红先的写法。


例子


该图的FEN就是 3k1a3/4a4/5n3/9/9/9/9/9/9/4KR3 w

看图,先从黑方底线开始,从左到右,第一、二、三格是空的,因为连续3个空,所以先记一个3。然后是黑将,记为k,接着又是一个空格和黑士,记1a。然后又是连续3个空,记3。至此黑方底线记录完毕,再写一个/,这就是第一段3k1a3/的由来。然后就是记黑的底二路...一直到红方底线记完,注意红方子力用大写字母表示。最后空格加w,w代表这图轮红先走。


FEN的其他信息

完整的FEN可能是这样的:

3k1a3/4a4/5n3/9/9/9/9/9/9/4KR3 w - - 0 1

后面多出了- - 0 1,其中“- -”无意义,因为FEN是从国际象棋移植而来,所以保留了国际象棋的易位和过路兵符号;

而后面的0 1,前者代表未吃子步数是0,后者代表当前回合是第1回合。未吃子步数就是自然限招信息,比如60回合自然限招代表这个数字到120就和棋。

如果FEN只有最简单的局面信息+轮走方信息,那么引擎和界面将会默认为- - 0 1或者- - 0 0


movelist

FEN仅仅代表一个局面,而FEN+movelist就可以表示历史着法信息。

比如:

5a3/3ka4/5n3/9/9/9/9/9/9/4K1R2 w moves g0f0 d8d9

这个movelist形成的局面就是“例子”中的局面。

这一串FEN+movelist代表了,从局面“5a3/3ka4/5n3/9/9/9/9/9/9/4K1R2 w”开始,走了g0f0 d8d9后。

movelist是单纯的坐标→坐标记录,从红方视角,从左到右所有的纵线记为a到i,从下到上所有横线(红底线到黑底线)记为0到9,至此90个点位都有一个坐标对应。g0f0指g0位置的子移动到了f0。