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。
