福斯夫-爱德华兹记号法

来自WHY42

福斯夫-爱德华兹记号法(Forsyth–Edwards Notation),简称FEN,是苏格兰人David Forsyth发明的国际象棋可完整叙述局面的记谱法,也可用于中国象棋。例如:

rnbqkbnr/ppp2ppp/4p3/3pP3/8/8/PPPP1PPP/RNBQKBNR b KQkq d5 0 2

记谱规则

使用ASCII字符串代码,代码意义依次是:

  • 棋子位置数值区域(Piece placement data):
  • 按白方视角,描述由上至下、由左至右的盘面,以/符号来分隔相邻横列。白方、黑方分别以大写、小写英文字母表达兵种:P、N、B、R、Q、K分别代表士兵、骑士、主教、城堡、皇后、国王。各横列的连续空格以阿拉伯数字表示,例如5即代表连续5个空格。
  • 轮走棋方(Active color):以w表示白方;b表示黑方。
  • 吃过路兵目标格(En passant target square):写走棋方若吃过路兵后会到的棋格,若无则写-。
  • 易位可行性(Castling availability):写KQ表示白方可易位;kq表示黑方可易位;KQkq表示两方均可易位。
  • 半回合计数(Halfmove clock):以阿拉伯数字表示,从最后一次吃子或移动兵开始计算的回合数,用于判断五十回合自然限著和局。
  • 回合数(Fullmove number):以阿拉伯数字表示,从开局开始计算的回合数。

用于中国象棋

福斯夫-爱德华兹记号法用于记录中国象棋时,与记录国际象棋相似但稍有不同。记法如下:。

rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1

由ASCII字符串代码,代码意义依次是:

  • 棋子位置数值区域(Piece placement data)
  • 由红方为观点。红方以大写字元来表达兵种:PABNCRK分别代表兵、仕、相、马、炮、车、帅;黑方以小写字元表达:pabncrk分别代表卒、士、象、马、炮、车、将。各横列的连续空位以阿拉伯数字表示,例如5即代表连续的5个空位。
  • 轮走棋方(Active color):w表示红方(也有用r表示红方);b表示黑方。
  • 吃过路兵目标格(En passant target square):中国象棋中无“吃过路兵”规则,因此此项写-。
  • 易位可行性(Castling availability):中国象棋中无易位规则,因此此项写-。
  • 半回合计数(Halfmove clock):从最后一次吃子开始计算的回合数,用于判断六十回合自然限著和局。
  • 回合数(Fullmove number):以阿拉伯数字表示,从开局开始计算的回合数。

这里要注意两点:

  1. 中国象棋棋盘有10行,所以要用9个“/”把每一行隔开
  2. 是棋子名称用英文字母表示,国际象棋中没有的棋子是仕(士)和炮,这里分别用字母A(a)和C(c)表示。

与二维数组的转换