最近在做ejcees,花時間最多的還是不同格式的導出導入。
下面總結一下東萍和PGN格式的差別。
首先是東萍格式,它大概從2004年左右就定下了,這挺好,以後不會再改了。當存在兩條縱線上都有多個兵卒,則會有「前二進一」這種描述,等於是「前兵二進一」的「兵」省略了。
東萍的說法是:
适用于各种兵卒特殊情况,是目前中文表示法的完善和补充,车马炮士象和兵卒普通局面下仍然采用老中文记谱方法,目前本中文棋谱表示方法已与华工橘中秘排局研究会核心成员667、将族、yjr123等取得一致。
在兵卒有两排达到或超过2个的时候,省略兵卒名称,本着法本来为前兵三进一,省略后就是前三进一了!
就是這麼任性!不需要任何特級大師的背書!我們網友自己決定!
寡人謹此代表「弈趣極光」,向667、將族、yjr123等華工橘中秘排局研究會的核心成員前輩,致以誠摯的問候!
雖然是網友決定的,但是這種表示法已經成為了大多數網站的標準,連皮卡魚網頁版都是用的這套。
但是在此之前還有另一套,就是《象棋百科全書》規定的方法(來自這裡):
中文纵线格式
这种格式对于广大象棋爱好者来说再熟悉不过了,但是这里还是要说明两个重要的细节。
一、仕(士)和相(象)如果在同一纵线上,不用“前”和“后”区别,因为能退的一定在前,能进的一定在后。
二、兵要按情况讨论:
(1) 三个兵在一条纵线上:用“前”、“中”和“后”来区别;
(2) 三个以上兵在一条纵线上:最前面的兵用“一”代替“前”,以后依次是“二”、“三”、“四”和“五”;
(3) 在有两条纵线,每条纵线上都有一个以上的兵:按照“先从右到左,再从前到后”(即先看最左边一列,从前到后依次标记为“一”和“二”,可能还有“三”,再看右边一列)的顺序,把这些兵的位置标依次标记为“一”、“二”、“三”、“四”和“五”,不在这两条纵线上的兵不参与标记。
如右图局面,四个兵分别位于四线和六线,下表列举了几种走法的坐标格式和纵线格式。
中文纵线格式 数字纵线格式 坐标格式 一兵平五 Pa.5 F8-E8 二兵平五 Pb.5 F6-E6 兵五进一 P5+1 E7-E8 三兵平五 Pc.5 D8-E8 四兵平五 Pd.5 D6-E6 另外需要注意的是:
(1) 如果黑方出现数字,不管数字代表纵线标号还是前进或后退的格数,都用阿拉伯数字表示,在计算机中显示全角的数字。但是代表同一纵线上不同兵的“一二三四五”(它们类似于“前中后”的作用)例外,例如例局面红黑互换,那么某步着法就应该写成“一卒平5”。
(2) 在传统的象棋记谱中,如果发生以上这种情况,通常用五个字来表示,例如“前兵四平五”等,在计算机处理过程中就比较麻烦,因为4个汉字(一个汉字占16位)的着法可以储存在一个64位的字当中(在C语言中数据类型为__int64或long long),而增加到5个汉字就比较麻烦了。黑方用全角的数字是同一个道理。
《象棋百科全書》並不是一本書,它其實是一個網站,網址為:https://www.xqbase.com/,它也是著名象棋軟體「象棋巫師」的官方網站。
我的抉擇
我一開始做ejcees時,主要還是想兼容皮卡魚網頁版,所以我一開始用的就是東萍的那套,同時內碼直接就使用東萍英文。
但是當ejcees項目接近尾聲時,我發現我更喜歡象棋百科全書規定的方法,尤其是我在網上找到一個網站也用的是這套之後。原因是它不會把「兵卒」省略掉。
於是ejcees程式代碼又要大改,把機器碼(如h2e2)作為「內碼」。
印象中,很多棋書用的就是百科全書的這套,它的年代是「2004年11月初稿,2006年2月修订」。看上去挺正式,不像東萍那樣,幾個網友商量之後就確定了。
糾結XWF
WXF是世界象棋联合会(World XiangQi Federation)的缩写,在该组织建议的记谱方式中,汉字被字母和数字所代替,即“进”、“退”和“平”分别用符号“+”、“-”和“.”表示,“前”、“中”和“后”也分别用符号“+”、“-”和“.”表示,并且写在棋子的后面(例如“前炮退二”写成“C+-2”而不是“+C-2”),多个兵位于一条纵线时,代替“前中后”的“一二三四五”分别用“abcde”表示(这种情况极少发生)。
另外,代表棋子名称的第一个字母,还可以用数字1到7表示,这是为了方便数字小键盘的输入,例如“炮二平五”可以记作“62.5“(6代表炮)选用符号“+”、“-”和“.”也是出于这个考虑。
然而我找到WXF的官網,卻沒有見到這種格式的介紹。
原本一開始我是放棄支援這種格式的,因為如果它用「abcde」來表示「一二三四五」的話,那「a、b、c」分別指「士、象、炮」,不就有歧義了嗎?直到我見到這個頁面中,了解到它的黑方也是用大寫字母(而不是像東萍英文格式那樣轉小寫),則小寫的abc就只能代表數字了。
