中國象棋電腦FEN文件格式詳解
中國象棋電腦FEN文件格式詳解
中國象棋是起源于中國的一種棋戲,屬于二人對抗性游戲的一種,在中國有著悠久的歷史。由于用具簡單,趣味性強(qiáng),成為流行極為廣泛的棋藝活動(dòng)。下面學(xué)習(xí)啦小編給你介紹中國象棋電腦FEN文件格式詳解,歡迎閱讀。
中國象棋電腦FEN文件格式詳解
一、FEN的優(yōu)勢
FEN(Forsyth-Edwards Notation)是專門用來表示象棋局面的記錄規(guī)范,在這個(gè)規(guī)范下,一個(gè)局面可以簡單地用一行“FEN格式串”來表示,而不必?zé)┈嵉卣f:“紅帥在四路次底線,黑將在5路底線……”。由于它是文本格式的(只牽涉到很有限的幾個(gè)字母、數(shù)字和符號),因此網(wǎng)上傳遞棋局就非常方便,不用把棋圖畫在紙上或用文字笨拙地描述了,而是用棋譜編輯軟件擺好局面,自動(dòng)得到FEN格式串,再貼到諸如Web網(wǎng)頁、BBS、電子論壇等能夠傳遞文字的網(wǎng)絡(luò)應(yīng)用平臺上。讀者面對FEN格式傳,只要借助于棋譜編輯軟件,用“賦值”和“粘貼”就可以完全重現(xiàn)局面,使得棋譜交流快速而高效。
二、FEN格式串
國際象棋的FEN格式串是由6段ASCII字符串組成的代碼(彼此5個(gè)空格隔開),這6段代碼的意義依次是:
(1) 棋盤上的棋子,這是FEN格式串的主要部分;
(2) 輪到哪一方走子;
(3) 每方及該方的王翼和后翼是否還存在“王車易位”的可能;
(4) 是否存在吃過路兵的可能,過路兵是經(jīng)過哪個(gè)格子的;
(5) 最近一次吃子或者進(jìn)兵后棋局進(jìn)行的步數(shù)(半回合數(shù)),用來判斷“50回合自然限著”;
(6) 棋局的回合數(shù)。
中國象棋沒有“王車易位”和“吃過路兵”的著法,所以FEN格式串的這兩項(xiàng)空缺,以最初局面為例說明:
rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1
(1) 紅色區(qū)域,表示棋盤布局,小寫表示黑方,大寫表示紅方,其他規(guī)則同國際象棋的FEN規(guī)范(請參閱《國際象棋譯文苑》文摘——關(guān)于PGN和FEN記譜規(guī)范(下)一文)。這里要注意兩點(diǎn),一是中國象棋棋盤有10行,所以要用9個(gè)“/”把每一行隔開;二是棋子名稱用英文字母表示,國際象棋中沒有的棋子是仕(士)和炮,這里分別用字母A(a)和C(c)表示。
(2) 綠色區(qū)域,表示輪到哪一方走子,“w”表示紅方,“b”表示黑方。(有人認(rèn)為紅方應(yīng)該用“r”表示,很多象棋軟件確實(shí)是這樣表示的。ElephantBoard盡管用“w”表示,但識別時(shí)采取靈活的辦法,即“b”表示黑方,除此以外都表示紅方。)
(3) 深紫色區(qū)域,空缺,始終用“-”表示。
(4) 紫紅色區(qū)域,空缺,始終用“-”表示。
(5) 藍(lán)色區(qū)域,表示雙方?jīng)]有吃子的走棋步數(shù)(半回合數(shù)),通常該值達(dá)到120就要判和(六十回合自然限著),一旦形成局面的上一步是吃子,這里就標(biāo)記“0”。(這個(gè)參數(shù)對于普通局面的意義不大,ElephantBoard的規(guī)則處理器并不是根據(jù)這一項(xiàng)來判斷和棋的,所以總是計(jì)為“0”。)
(6) 棕色區(qū)域,表示當(dāng)前的回合數(shù),在研究中局或排局時(shí),作為研究對象的局面,這一項(xiàng)可以寫1,隨著局勢的發(fā)展逐漸增加。
三、FEN文件
FEN格式串有很多載體,通常的做法是把它保存成后綴為“.FEN”的文件。FEN文件是ASCII碼文件,可以用任何文本編輯軟件來建立和修改,也可以通過象棋棋譜軟件來產(chǎn)生。
四、歷史局面的表示
這是只在“中國象棋通用引擎協(xié)議”(UCCI協(xié)議)中采用的方法,用來表示歷史局面。在UCCI協(xié)議中,局面用position fen 來傳遞,由于FEN格式串無法記錄歷史局面,所以該指令后面必須用moves選項(xiàng)來說明。例如右圖局面,發(fā)生時(shí),界面向引擎?zhèn)鬟f局面信息:
position fen 9/9/3k5/9/9/9/4R4/3A5/8r/4K4 b - - 0 1
此時(shí)引擎走車9進(jìn)1是沒有問題的。然而當(dāng)它是某個(gè)長將局面的延續(xù)時(shí),界面向引擎?zhèn)鬟f的局面信息就必須用moves選項(xiàng)來說明:
position fen 9/9/3k5/9/9/9/4R4/3A5/4K4/8r b - - 0 1 moves i0i1 e1e0 i1i0 e0e1 i0i1 e1e0 i1i0 e0e1 i0i1 e1e0
盡管也是右圖的局面,但意義已經(jīng)發(fā)生了變化,此時(shí)引擎不可能再走車9進(jìn)1,因?yàn)榫o接著一步帥五進(jìn)一,導(dǎo)致局面重復(fù)第三次,黑方被判長將作負(fù)。
ElephantBoard向引擎?zhèn)鬟f局面時(shí),總是最近一次吃過子的局面(或開始局面),后面所有的著法都用moves選項(xiàng)來傳遞給引擎,這樣就包含了判斷自然限著和長打的歷史信息,這些信息可由引擎來處理。
看了“中國象棋電腦FEN文件格式詳解 ”的人還看了: