qq象棋棋谱格式详解及其解析

发布时间:2015-12-15 20:34:51   来源:文档文库   
字号:

qq象棋棋谱格式详解及其解析

qq游戏大厅里带的那个象棋游戏看起来很不爽,而且它导出的棋谱是左右颠倒的。以下是用记事本打开qq象棋棋谱文件经过一番观察后得出的结论:

下面是一份完整的che格式的文件:

1 62 21 32 1 0 1 2 2 0 1 0 10 32 0 7 7 7 4 0 2 0 26 32 1 2 7 2 5 0 3 0 6 32 0 9 7 7 6 0 4 0 17 32 1 0 3 1 4 0 5 0 1 32 0 9 3 8 4 0 6 0 30 32 1 3 6 4 6 0 7 0 8 32 0 9 8 9 7 0 8 0 22 32 1 0 7 2 6 0 9 0 5 32 0 9 1 7 2 0 10 0 22 32 1 2 6 4 5 0 11 0 13 32 0 6 4 5 4 0 12 0 28 32 1 3 2 4 2 0 13 0 9 32 0 7 1 7 0 0 14 0 25 32 1 2 1 6 1 0 15 0 8 32 0 9 7 5 7 0 16 0 22 32 1 4 5 5 3 0 17 0 5 32 0 7 2 6 4 0 18 0 25 32 1 6 1 6 4 0 19 0 6 32 0 7 6 6 4 0 20 0 22 32 1 5 3 7 4 0 21 0 3 32 0 9 2 7 4 0 22 0 23 32 1 0 0 0 1 0 23 0 14 32 0 6 6 5 6 0 24 0 21 32 1 2 2 4 3 0 25 0 6 32 0 6 4 7 6 0 26 0 30 32 1 4 6 5 6 0 27 0 8 32 0 5 7 5 6 0 28 0 19 32 1 0 2 2 4 0 29 0 9 32 0 7 0 3 0 0 30 0 21 32 1 4 3 6 2 0 31 0 9 32 0 3 0 3 2 0 32 0 21 32 1 6 2 4 3 0 33 0 7 32 0 9 0 9 3 0 34 0 23 32 1 0 1 0 3 0 35 0 8 32 0 5 6 3 6 0 36 0 24 32 1 0 8 0 7 0 37 0 8 32 0 3 6 3 4 0 38 0 24 32 1 0 7 7 7 0 39 0 8 32 0 3 4 3 6 0 40 0 26 32 1 2 5 4 5 0 41 0 13 32 0 5 4 4 4 0 42 0 26 32 1 4 5 4 6 0 43 0 13 32 0 4 4 4 3 0 44 0 24 32 1 7 7 7 6 0 45 0 8 32 0 3 6 3 5 0 46 0 28 32 1 4 2 5 2 0 47 0 9 32 0 3 2 3 4 0 48 0 28 32 1 5 2 6 2 0 49 0 13 32 0 4 3 3 3 0 50 0 26 32 1 4 6 4 4 0 51 0 13 32 0 3 3 2 3 0 52 0 23 32 1 0 3 0 1 0 53 0 8 32 0 3 5 4 5 0 54 0 23 32 1 0 1 4 1 0 55 0 13 32 0 2 3 1 3 0 56 0 26 32 1 4 4 4 3 0 57 0 8 32 0 4 5 4 3 0 58 0 23 32 1 4 1 4 3 0 59 0 7 32 0 9 3 4 3 0 60 0 17 32 1 1 4 2 3 0 61 0 9 32 0 3 4 0 4 0 62 0

把这些数据保存到文本文件中再把后缀名改为che就可以用qq象棋程序打开。

其中第一个1无意义,第二个数字62表示棋谱总共有多少步数。接下来可以发现32出现多次,而且间隔一都是10。所以从文件的第三个数字21开始每10个数字一组分组,然后和记录下来的棋谱相比,有以下规律:

21 32 1 0 1 2 2 0 1 0

10 32 0 7 7 7 4 0 2 0

这是前两组。每组的第一个数表示是哪个棋子,如21表示马,10表示炮。经过与记录下的棋谱对比后发现:

若是黑方走子,则:

0(将);12(士);34(象);56(马);78(车);910(炮);

1112131415(卒)。

若是红方走子,则:

16(帅);1718(士);1920(相);2122(马);2324(车);2526(炮);

2728293021(兵)。

每组的第二个数字不变,总为32

每组第三个数字表示此步走子为红方还是黑方,1代表红方,0代表黑方。

每组第四,五,六,七个数字表示源位置和目标位置的坐标。

每组第八个数字总是0

每组第九个数字表示是棋谱中的第几步走子。

第十个数字也总是为0

于是,根据以上分析,可得出qq棋谱文件格式的数据结构:

#define QQRED 1

#define QQBLACK 0

typedef struct tagQQFileHeader ...{

int id; // 一个整数,无意义

int totalMove; // 棋谱的总步数

} QQFILEHEADER;

typedef struct tagQQMoveCommand ...{

int chessManName;

int reserved; // 值为32

int redBlack; // 1 表示红方,0 表示黑方

int xSrc;

int ySrc;

int xDst;

int yDst;

int reserved2; // 值为0

int order; // 处于总棋谱中的第几步

int reserved3; // 值为0

} QQMOVECOMMAND;

以下解析qq棋谱的程序便轻而易举。

上述数据实际上描述的棋谱为:

马八进七 炮8平5

炮二平四 马8进7

土六进五 土4进5

兵三进一 车9平8

马二进三 马2进3

马三进四 卒5进1

兵七进一 炮2平1

炮八进四 车8进4

马四进六 马3进5

炮八平五 马7进5

马六进五 象3进5

车九平八 卒7进1

马七进六 马5退7

兵三进一 车8平7

相七进五 炮1进4

马六进七 炮1平3

马七退六 车1平4

车八平六 车7进2

车一平二 车7平5

车二进七 车5平7

炮四进二 卒5进1

炮四平三 卒5平4

车二平三 车7平6

兵七进一 炮3平5

兵七进一 卒4进1

炮三平五 卒4进1

车六平八 车6退1

车八进四 卒4进1

炮五平六 车6平4

车八平六 车4进5

土五进六 炮5进3

本文来源:https://www.2haoxitong.net/k/doc/316825c8581b6bd97e19ea41.html

《qq象棋棋谱格式详解及其解析.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式