关于RENLIB棋谱格式阅读问题。 ( 积分: 200 )

  • 主题发起人 homerocker
  • 开始时间
H

homerocker

Unregistered / Unconfirmed
GUEST, unregistred user!
Rena的注释如何组织不讲了。
单讲棋谱格式。
Rena棋谱是二进制存储。
以下用16制表示。
比如11代表一个Byte字节=1*16+1=1700是0,ff是255。
以上表示,懂编程的一看便知,不再解释。
每手棋用两个字节表示,前一个字节表示坐标,后一个表示与后面坐标的关系。

比如7840的78表示天元的第一手棋。第一个坐标需要加1(如果你使用1-15为坐标,便是88),反之第二个减1(如果你用0-14为坐标,便是77)。40代表这手棋是叶结点。
这个棋谱就是两个byte数 120和64。
那么字再看棋谱7800 0140
78表示天元1子。00表示后面只有子节点。01表示左上角的坐标,40表示叶结点。如果坐标后面是c0,表示自己没有子节点,但是有兄弟节点。如果坐标后面是80,表示自己有子节点也有兄弟节点。同时子节点紧跟其后。
这些规则综合使用可以表示任何复杂局面。

归纳一下:
美一手棋后面的步骤只有4种情况,
1最后一个叶子。用40。
2后面有子,但没有兄弟,用00。
3后面只有兄弟,用c0。
4后面有儿子和兄弟,用80。
后面的棋递归使用这些规则。
如果某手棋有兄弟和儿子,儿子在前面,儿子的儿子和兄弟等表示完毕,再轮到它的兄弟。

Renlib3.0以前版本和Rena的表示方法相同。3.0以后增加了新的
注释方法,同时棋谱前面加了个标注。

如上解释,我如何将一个字符串格式的棋谱转换成一棵树。
 
顶部