象棋演播室(XQStudio) 1.0 版XQF文件格式说明 (XQF 1.0) (过河象, xqstudio@qipaile.net) 2001年4月16日 一、说明 本文件格式是XQStudio 1.0所使用的文件格式,现公布该格式的主要目的是为了 方便程序员将棋谱数据保存为XQF文件格式,以便借助于XQStudio的打谱功能。 各下 棋网站或对弈软件均可将棋谱保存为此格式,这样XQStudio的任意版本均可以使用该 文件。 由于XQStudio 1.0的后续版本使用了更为复杂的文件格式,使用该格式不保证能 读出XQStudio更高版本的XQF文件。换句话说,该格式只保证可以产生一个正确的XQF 文件,不保证所有的XQF文件都是该格式。 二、XQF文件使用的棋盘坐标 在XQF文件中,用数字坐标表示棋盘上交叉点的位置,其中X坐标从0到8,Y坐标从 0到9,坐标的原点(0,0)在棋盘的左下角。如下图,黑方的将在位置(4,9)处,红方的 帅在位置(4,0)处。 Y   09 19 29 39 49 59 69 79 89         9 [车][马][象][士][将][士][象][马][车]  │ │ │ │\│/│ │ │ │  8  ├─┼─┼─┼─※─┼─┼─┼─┤   │ │ │ │/│\│ │ │ │  7  ├-[炮]-┼─┼─┼─┼─┼-[炮]-┤   │ │ │ │ │ │ │ │ │  6 [卒]-┼-[卒]-┼-[卒]-┼-[卒]-┼-[卒]  │ │ │ │ │ │ │ │ │  5  ├─┴─┴─┴─┴─┴─┴─┴─┤   │               │  4  ├─┬─┬─┬─┬─┬─┬─┬─┤   │ │ │ │ │ │ │ │ │  3 (兵)-┼-(兵)-┼-(兵)-┼-(兵)-┼-(兵)  │ │ │ │ │ │ │ │ │  2  ├-(炮)-┼─┼─┼─┼─┼-(炮)-┤   │ │ │ │\│/│ │ │ │  1  ├─┼─┼─┼─※─┼─┼─┼─┤   │ │ │ │/│\│ │ │ │  0 (车)(马)(相)(士)(帅)(士)(相)(马)(车)    00 10 20 30 40 50 60 70 80  X-> 0 1 2 3 4 5 6 7 8 在XQF文件中,一个棋盘位置用一个字节表示,字节值 = X * 10 + Y。因此上图 中的黑帅可用字节值49(十进制)表示,也就是十六进制的0x31;红方的帅可用字节值 40表示,也就是十六进制的0x28。所有被吃掉的子,用位置255,即十六进制的0xFF表 示。 三、XQF文件中初始局面的表示 在XQF文件中,使用连续的32个字节表示棋盘的初始局面。 这32个字节的位置顺 序是固定的,含义如下: 01 - 16: 依次为红方的车马相士帅士相马车炮炮兵兵兵兵兵 17 - 32: 依次为黑方的车马象士将士象马车炮炮卒卒卒卒卒 用这32个字节的含义加上前面所说的字节值和棋盘位置的对应关系,可以用连续 32个字节的值表示一个当前的局面。例如,全局的初始局面可以用如下的32个字节表 示(注:所有的值为十进制,红方和黑方均从右到左排列): (80,70,60,50,40,30,20,10,00,72,12,83,63,43,23,03, 09,19,29,39,49,59,69,79,89,17,77,06,26,46,66,86) 四、XQF 1.0 文件格式说明 下面的部分是XQF 1.0的文件格式说明,请严格按该格式生成XQF文件。下面说明 中文件的偏移量用16进制表示。 XQF文件由文件头和棋谱记录两部分组成,分别说明 如下: A. 文件头部 (0000 - 03FF) -------------------------------------------------------------------------- 0000 - 0001 XQF文件标记,必须为 'XQ' (0000 = 'X', 0001 = 'Q') 0002 XQF文件版本号,必须为0x0A = (XQF 1.0)。 0003 - 000F 保留:必须全部为0x00 0010 - 002F 这32个字节是棋局的开局局面,局面说明见“局面表示” 0030 - 0032 保留:必须全部为0x00 0033 棋局的结果: 0x00-未知,0x01-红胜,0x02-黑胜,0x03-和棋 0034 - 003F 保留:必须全部为0x00 0040 棋局的类型: 0x00-全局文件, 0x01-布局文件, 0x02-中局文件, 0x03-残局文件 0041 - 004F 保留:必须全部为0x00 0050 标题的长度(即下面文字的长度,下同) 0051 - 008F 标题文字 ---------------------------------- 从0050-008F实际是一个字符串的保存方法,先在第一个 字节保存字符串的长度,接着存字符串的内容,不足的部 分用0x00填充(下同)。 0090 - 00CF 保留:必须全部为0x00 00D0 比赛名称的长度 00D1 - 010F 比赛名称 0110 比赛日期的长度 0111 - 011F 比赛日期 0120 比赛地点的长度 0121 - 012F 比赛地点 0130 红方棋手名字的长度 0131 - 013F 红方棋手名字 0140 黑方棋手名字的长度 0141 - 014F 黑方棋手名字 0150 用时规则的长度 0151 - 018F 用时规则 0190 红方用时的长度 0191 - 019F 红方用时 01A0 黑方用时的长度 01A1 - 01AF 黑方用时 01B0 - 01CF 保留: 必须全部为0x00 01D0 棋谱讲评人名字的长度 01D1 - 01DF 棋谱讲评人名字 01E0 文件作者名字的长度 01E1 - 01EF 文件作者名字 01F0 - 03FF 保留: 全部为0x00 B. 棋谱记录 (0400 - 文件尾部) -------------------------------------------------------------------------- 从0x0400开始存放棋谱记录,每步记录的存放格式为: 8个棋谱记录字节 + 0个或 多个字节的棋谱注解文本。其中,8个棋谱记录字节的格式为: 第 1 字节: 本步棋的开始位置坐标的字节值(X*10+Y) + 24 (十进制)。 第 2 字节: 本步棋的到达位置坐标的字节值(X*10+Y) + 32 (十进制)。 第 3 字节: 如果不是最后一步棋,为0xF0;如果是最后一步棋,为0x00。 第 4 字节: 保留: 必须为0x00。 第5-8字节: 为一个32位整数(x86格式,高字节在后),表明本步注解的大小, 如果没有注解,则为0x00000000。 如果本步没有评注,即5-8字节全部为0x00,则本步结束,否则,随后存放本 步评注文本,文本不以'\0'结束(由于前面已经有大小, 该文本的长度必须等 于5-8字节处的整数值)。如此反复,可将所有棋步存入。(暂时不支持变着的 保存)。从上面可以看出如果没有注解,一步棋的记录共占8个字节。 需要说明的是,在真正的对局记录开始前,必须有一步空的着法,称为第0步,该 步的第1 - 8字节必须是 0x18, 0x20, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00。由于 这些字节是固定的,所以真正的棋谱记录是从0x0408处开始的。如果您的棋局只有初 始局面而没有任何着法记录(即只有一个残局局势),则文件中棋谱记录只有第0步的记 录,并且该记录的8个字节为:0x18,0x20,0x00,0xFF,0x00,0x00,0x00,0x00。 详细的 格式请参见本文后面的文件例子。 四、给程序员 -------------------------------------------------------------------------- 使用上面的格式,可以将全局或残局的主变着存入XQF文件, 也可以编写XQF文件 信息的处理程序,XQF文件信息在各版本中是相同的,并且没有任何加密措施。 该文件格式的最新版本可到作者的主页(http://www.qipaile.net)上下载,如有不 明白的地方,可以向作者询问,欢迎大家将文件保存为XQF文件。 过河象(xqstudio@qipaile.net) http://www.qipaile.net 2001年4月16日 ************************************************************************** * * * 最新文件格式的版本请看“http://www.qipaile.net/xqstudio/XqfFormat.txt”* * 以上URL请注意字母的大小写。 * * * ************************************************************************** ========================================================================== 附: XQF 1.0 格式文件的例子(为节省篇幅,只有8个回合的记录) .......................................................................... A. 棋谱文件内容如下: ----------------------------------------------------------------------- 标题: 仙人指路对起马局 赛事: "中立杯"象棋电视快棋赛 日期: 1997年11月16日 地点: 北京 红方: 柳大华 黑方: 吕 钦 结果: 黑方胜 评论: 刘殿中 作者: 过河象 ---------------------------------------------------- 1. 兵七进一 马8进7 2. 兵三进一 炮2平3 3. 相七进五 马2进1 4. 马八进七 车1平2 5. 车九平八 车2进4 6. 炮八平九 车2平8 7. 炮二进五 炮3平8 8. 马二进三 车9平8 ---------------------------------------------------- 棋谱由XQStudio生成 (http://www.qipaile.net/xqstudio) B. 对应上面棋局的XQF文件内容如下: ---------------------------------------------------------------------- 请参照前面的说明进行分析。 0000: 58 51 0A 00 00 00 00 00-00 00 00 00 00 00 00 00 ----- -- 'XQ' . - 这三个字节是重要的文件标记,不可改变。 0010: 50 46 3C 32 28 1E 14 0A-00 48 0C 53 3F 2B 17 03 0020: 09 13 1D 27 31 3B 45 4F-59 11 4D 06 1A 2E 42 56 ----------------------------------------------- 以上32个字节为棋局的初始局面的位置,如过您要生 成的文件是全局文件,可直接使用上面的数据。 0030: 00 00 00 02 00 00 00 00-00 00 00 00 00 00 00 00 -- 棋局的结果,0x02=黑胜 0040: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 -- 棋局文件的类型: 0x00=全局文件 0050: 10 CF C9 C8 CB D6 B8 C2-B7 B6 D4 C6 F0 C2 ED BE 0060: D6 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0070: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0080: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上64个字节为文件标题,第一个字节为长度(0x10), “仙人指路对起马局”共16个字节,所以长度为0x10。 下面所有的字符串规律相同。 0090: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 00A0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 00B0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 00C0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上64个字节为保留字节,必须为0x00。 00D0: 16 22 D6 D0 C1 A2 B1 AD-22 CF F3 C6 E5 B5 E7 CA 00E0: D3 BF EC C6 E5 C8 FC 00-00 00 00 00 00 00 00 00 00F0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0100: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上64个字节为比赛名称“"中立杯"象棋电视快棋赛” 0110: 0E 31 39 39 37 C4 EA 31-31 D4 C2 31 36 C8 D5 00 ----------------------------------------------- 以上16个字节为比赛日期“1997年11月16日” 0120: 04 B1 B1 BE A9 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上16个字节为比赛地点“北京” 0130: 06 C1 F8 B4 F3 BB AA 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上16个字节为红方棋手“柳大华” 0140: 06 C2 C0 20 20 C7 D5 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上16个字节为黑方棋手“吕 钦” 0150: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0160: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0170: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0180: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上64个字节为用时规则,空,没有输入 0190: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上16个字节为红方用时,空,没有输入 01A0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上16个字节为红方用时,空,没有输入 01B0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 01C0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上64个字节为保留字节,必须为0x00 01D0: 06 C1 F5 B5 EE D6 D0 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上16个字节为棋谱讲评“刘殿中” 01E0: 06 B9 FD BA D3 CF F3 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上16个字节为文件作者“过河象” 01F0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ... 为节省篇幅,省去许多0x00 ... 03F0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ----------------------------------------------- 以上从0x1F0-0x3F0的所有字节为保留字节,为0x00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 从下面(0x400)出开始为棋谱记录 0400: 18 20 F0 FF 00 00 00 00-2F 38 F0 00 00 00 00 00 ----------------------- ----------------------- 第0步,内容固定(8字节) 第1步: 兵七进一 ----------------------- 第1步“兵七进一”内容分析如下: ----------------------------------------------- 兵七进一的起点坐标(2, 3), 落点坐标(2, 4),则 1. 起点字节值=(X*10+Y)+24 = 23+24 = 47 (0x2F) 2. 落点字节值=(X*10+Y)+32 = 24+32 = 56 (0x38) 3. 本步不是最后一步,所以第3个字节为 (0xF0) 4. 第4个字节是保留字节,必须为0x00 (0x00) 5. 本步没有注解,所以5-8字节为0x00. (0x00) 6. (0x00) 7. (0x00) 8. (0x00) 如果棋谱记录中没有任何着法,则只有第0步的棋谱记 录,并且第0步棋谱记录的第三个字节为0x00, 文件内 容到0x0407处就结束了。 0410: 67 63 F0 00 00 00 00 00-57 60 F0 00 00 00 00 00 ----------------------- ----------------------- 马8进7 兵三进一 0420: 29 3B F0 00 00 00 00 00-2C 4A F0 00 00 00 00 00 ----------------------- ----------------------- 炮2平3 相七进五 0430: 2B 27 F0 00 00 00 00 00-22 36 F0 00 00 00 00 00 ----------------------- ----------------------- 马2进1 马八进七 0440: 21 33 F0 00 00 00 00 00-18 2A F0 00 00 00 00 00 ----------------------- ----------------------- 车1平2 车九平八 0450: 2B 2F F0 00 00 00 00 00-24 22 F0 00 00 00 00 00 ----------------------- ----------------------- 车2进4 炮八平九 0460: 27 6B F0 00 00 00 00 00-60 6D F0 00 00 00 00 00 ----------------------- ----------------------- 车2平8 炮二进五 0470: 33 6D F0 00 00 00 00 00-5E 5E F0 00 00 00 00 00 ----------------------- ----------------------- 炮3平8 马二进三 0480: 71 6F 00 00 00 00 00 00 ----------------------- 车9平8 (注意第3个字节,最后一步, 应为0x00) 注:1. 如果将上面的全部数据存到一个文件中,即形成一个标准的XQF文件,该文件 的大小为0x0488(十进制1160)个字节。 2. 为研究和测试XQF 1.0文件结构,可下载XQStudio 1.0的版本生成多个不同的 文件进行比较和分析,下载地址: “http://www.qipaile.net/xqstudio/XQStudio_1_0.zip” (注意大小写) ========================================================================== (☆☆☆ 欢迎访问“http://www.qipaile.net” ☆☆☆)