FEN(局面码)是什么?
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。