FEN(局面码)是什么?
FEN(Forsyth-Edwards Notation)是一种记录象棋局面的方法,源自国际象棋。
只需要一串字符串就可以代表一个局面,非常方便,引擎接收局面也是靠 FEN。
一串 FEN 至少有局面信息和轮走方信息。
FEN 的基础记录方法如下
- 先开始从黑方底线记录,一直到红方底线;同时每条横线从左到右记录(红方视角下)。
- 每个字母分别代表一类子力:k 帅将,a 士,b 象,c 炮,n 马,r 车,p 兵卒,大写字母代表红方的子,小写字母代表黑方的子。
- 遇到空格时,记录连续的空格数(也有每个空格单独记作 1 的记法)。
- 一条横线记录完后,以 / 结束,然后开始记录下一条横线。最后一条横线(红方底线)记录完时,不要写 /。
- 全部横线记录完后,写一个空格,然后写 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。
