近日突发奇想,又把军棋捡起来了,想想用数据来分析一些事情。首先普及些许基础知识:
1、复盘JGS文件数据存储方式
用Ultra Edit打开复盘文件,如图所示

这款软件可以将任何文件以16进制数字的方式展现出来,这是打开了复盘文件的效果,这些数据是有具体含义的。这里只写与研究相关的数据。FH,这是16进制数字的表达方法,H表示16进制数,F是10进制数字15的意思,这里表示地址,FH处如图右上角那个位置的数据(00)
FH:第一个走棋的人所处的位置,00本家,01下家,02对家,03上家;
从1CH开始,就是记录玩家信息的了,每个玩家的信息占用88个字节。1CH-73H记录的是第一个走棋玩家的信息,74H-CBH记录的是第四个走棋玩家的信息,CCH-123H记录第三个走棋玩家的信息,124H-17BH记录第二个走棋玩家的信息。注意是1、4、3、2排列的。
3CH-59H 玩家布阵。从布阵的第一排到最后一排,每一排从左到右录入。00表示空位,02军旗,03地雷,04炸弹,05司令,06军长,07师长,08旅长,09团长,0A营长,0B连长,0C排长,0D工兵。
同理,94H-B1H是第四个走棋玩家的布阵,ECH-109H是第三个走棋玩家的布阵,144H-161H是第二个走棋玩家的布阵。

从19CH开始,就是记录具体走棋的过程了,每一步棋用10个字节记录,如第一步就是从19CH-1A5H共10个字节。每一步的起始地址可以用公式 192H+AH*步数 来计算出来
以某一特定的文件记录为例:5F 1B 0B 06 0A 05 00 00 00 00
第1个字节:走棋模式。5F为正常走棋(即把棋子从一个位置移动到另一个位置),F5为非正常走棋(战败、玩家离开、游戏结束、超时等等)
第2个字节:走棋结果。根据第1个字节的不同,有不同的含义。
当第1字节为5F时,
00:上家移动棋子但没有吃子
01:上家成功吃子
02:上家主动吃子但被吃掉
03:上家吃子但是双方兑掉
08:对家移动棋子但没有吃子
09:对家成功吃子
0A:对家主动吃子但被吃掉
0B:对家吃子但是双方兑掉
10:下家移动棋子但没有吃子
11:下家成功吃子
12:下家主动吃子但被吃掉
13:下家吃子但是双方兑掉
18:本方移动棋子但没有吃子
19:本方成功吃子
1A:本方主动吃子但被吃掉
1B:本方吃子但是双方兑掉
43:双方兑掉,并且至少有一个司令阵亡;
5B:双方兑掉,并且至少有一个司令阵亡;
4B:双方兑掉,并且至少有一个司令阵亡;
当第1个字节为F5时
05:本局游戏结束
04:某玩家退出游戏
03:某玩家战败
02:某玩家超时
第3个字节:根据第1字节的数据,有不同的含义。
当第1字节为5F时:所走棋子初始位置的横坐标。横纵坐标的方向是有规律的,以橙色玩家为主视角,横坐标的方向是↓,纵坐标的方向是←,坐标从00开始计算,到10为止(注意是十六进制数)。
当第1字节为F5,并且第二字节为02、03、04时:表示玩家,00第一个走棋的玩家(橙色),01第四个走棋的玩家(蓝色),02第三个走棋的玩家(绿色),03第二个走棋的玩家(紫色)。
当第1字节为F5,并且第二字节为05:含义不明。
第4个字节:根据第1字节的数据,有不同的含义
当第1字节为5F时:所走棋子初始位置的纵坐标。
当第1字节为F5,并且第二字节为02时:某玩家超时次数
当第1字节为F5,并且第二字节为03、04、05时:不明含义。
第5个字节:根据第1字节的数据,有不同的含义
当第1字节为5F时:所走棋子最终位置的横坐标。
当第1字节为F5时:含义不明。
第6个字节:根据第1字节的数据,有不同的含义
当第1字节为5F时:所走棋子最终位置的纵坐标。
当第1字节为F5时:含义不明。
第7-10字节:含义不明。但是无论是多少,不影响棋谱记录。
1、复盘JGS文件数据存储方式
用Ultra Edit打开复盘文件,如图所示

这款软件可以将任何文件以16进制数字的方式展现出来,这是打开了复盘文件的效果,这些数据是有具体含义的。这里只写与研究相关的数据。FH,这是16进制数字的表达方法,H表示16进制数,F是10进制数字15的意思,这里表示地址,FH处如图右上角那个位置的数据(00)
FH:第一个走棋的人所处的位置,00本家,01下家,02对家,03上家;
从1CH开始,就是记录玩家信息的了,每个玩家的信息占用88个字节。1CH-73H记录的是第一个走棋玩家的信息,74H-CBH记录的是第四个走棋玩家的信息,CCH-123H记录第三个走棋玩家的信息,124H-17BH记录第二个走棋玩家的信息。注意是1、4、3、2排列的。
3CH-59H 玩家布阵。从布阵的第一排到最后一排,每一排从左到右录入。00表示空位,02军旗,03地雷,04炸弹,05司令,06军长,07师长,08旅长,09团长,0A营长,0B连长,0C排长,0D工兵。
同理,94H-B1H是第四个走棋玩家的布阵,ECH-109H是第三个走棋玩家的布阵,144H-161H是第二个走棋玩家的布阵。

从19CH开始,就是记录具体走棋的过程了,每一步棋用10个字节记录,如第一步就是从19CH-1A5H共10个字节。每一步的起始地址可以用公式 192H+AH*步数 来计算出来
以某一特定的文件记录为例:5F 1B 0B 06 0A 05 00 00 00 00
第1个字节:走棋模式。5F为正常走棋(即把棋子从一个位置移动到另一个位置),F5为非正常走棋(战败、玩家离开、游戏结束、超时等等)
第2个字节:走棋结果。根据第1个字节的不同,有不同的含义。
当第1字节为5F时,
00:上家移动棋子但没有吃子
01:上家成功吃子
02:上家主动吃子但被吃掉
03:上家吃子但是双方兑掉
08:对家移动棋子但没有吃子
09:对家成功吃子
0A:对家主动吃子但被吃掉
0B:对家吃子但是双方兑掉
10:下家移动棋子但没有吃子
11:下家成功吃子
12:下家主动吃子但被吃掉
13:下家吃子但是双方兑掉
18:本方移动棋子但没有吃子
19:本方成功吃子
1A:本方主动吃子但被吃掉
1B:本方吃子但是双方兑掉
43:双方兑掉,并且至少有一个司令阵亡;
5B:双方兑掉,并且至少有一个司令阵亡;
4B:双方兑掉,并且至少有一个司令阵亡;
当第1个字节为F5时
05:本局游戏结束
04:某玩家退出游戏
03:某玩家战败
02:某玩家超时
第3个字节:根据第1字节的数据,有不同的含义。
当第1字节为5F时:所走棋子初始位置的横坐标。横纵坐标的方向是有规律的,以橙色玩家为主视角,横坐标的方向是↓,纵坐标的方向是←,坐标从00开始计算,到10为止(注意是十六进制数)。
当第1字节为F5,并且第二字节为02、03、04时:表示玩家,00第一个走棋的玩家(橙色),01第四个走棋的玩家(蓝色),02第三个走棋的玩家(绿色),03第二个走棋的玩家(紫色)。
当第1字节为F5,并且第二字节为05:含义不明。
第4个字节:根据第1字节的数据,有不同的含义
当第1字节为5F时:所走棋子初始位置的纵坐标。
当第1字节为F5,并且第二字节为02时:某玩家超时次数
当第1字节为F5,并且第二字节为03、04、05时:不明含义。
第5个字节:根据第1字节的数据,有不同的含义
当第1字节为5F时:所走棋子最终位置的横坐标。
当第1字节为F5时:含义不明。
第6个字节:根据第1字节的数据,有不同的含义
当第1字节为5F时:所走棋子最终位置的纵坐标。
当第1字节为F5时:含义不明。
第7-10字节:含义不明。但是无论是多少,不影响棋谱记录。