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(将);1,2(士);3,4(象);5,6(马);7,8(车);9,10(炮);
11,12,13,14,15(卒)。
若是红方走子,则:
16(帅);17,18(士);19,20(相);21,22(马);23,24(车);25,26(炮);
27,28,29,30,21(兵)。
每组的第二个数字不变,总为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       
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
XML和JSON是两种常用的数据传输格式。XML是可扩展标记语言(Extensible Markup Language)的缩写,它使用标记来表示数据的结构和内容。XML的解析通常包括解析器和DOM或SAX两种解析方式,其中DOM方式将整个XML文档加载到内存中,以树结构的形式表示,而SAX方式则是在解析过程中逐行读取XML文档并触发相应的事件。 JSON是JavaScript对象表示法(JavaScript Object Notation)的缩写,它是一种轻量级的数据交换格式。JSON使用简洁的键值对的形式来表示数据,并且易于阅读和编写。在解析JSON格式数据时,可以使用各种编程语言中提供的JSON库或框架,如Java中的Gson或FastJson。这些库可以将JSON字符串解析为对象或将对象转换为JSON字符串。 XML和JSON都有各自的优缺点。XML的优点是结构清晰,可扩展性强,适用于复杂的数据结构。但是XML的缺点是冗余性较高,数据量较大,解析速度相对较慢。JSON的优点是体积小,解析速度快,适合在网络传输中使用。然而,JSON的缺点是可读性较差,不支持注释。 在项目中,XML和JSON格式的数据解析常用于数据交换和传输。通过解析XML或JSON格式的数据,我们可以获取并处理其中的内容,从而实现对数据的操作和分析。具体使用哪种格式取决于项目需求和技术栈的选择。例如,如果项目需要与其他系统进行数据交互,可能会使用XML格式;如果项目使用的是前端框架或后端语言支持JSON格式,那么可能会选择使用JSON格式进行数据解析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [XML与JSON格式数据解析方法](https://blog.csdn.net/qq_35523015/article/details/81053662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [json和xml格式数据的解析(java代码+相关的jar包)](https://download.csdn.net/download/zdd1065493823/10335380)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [XML 与 JSON 解析教程](https://blog.csdn.net/weixin_44715733/article/details/114749650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值