柿木形式V4について


Kifu for Windows で分岐する棋譜を入力して保存すると、 以下の例のような構造でファイルに書き出されます。 (指し手の部分だけ抽出してあります)
棋譜ファイルをダウンロードして見たい人はこちら → bunki.kif
手数----指手---------消費時間--
   1 2六歩(27)   ( 0:07/00:00:07)+
   2 3四歩(33)   ( 0:03/00:00:03)
   3 2五歩(26)   ( 0:01/00:00:08)
   4 3三角(22)   ( 0:02/00:00:05)
   5 7六歩(77)   ( 0:02/00:00:10)
   6 4四歩(43)   ( 0:02/00:00:07)+
   7 4八銀(39)   ( 0:06/00:00:16)
   8 4二飛(82)   ( 0:11/00:00:18)
   9 6八玉(59)   ( 0:12/00:00:28)+
  10 6二玉(51)   ( 0:04/00:00:22)
  11 7八玉(68)   ( 0:01/00:00:29)
  12 7二玉(62)   ( 0:01/00:00:23)
  13 投了         ( 0:03/00:00:32)
まで12手で後手の勝ち

変化:9手
   9 5六歩(57)   ( 0:15/00:00:31)
  10 6二玉(51)   ( 0:03/00:00:21)

変化:6手
   6 2二銀(31)   ( 0:02/00:00:07)+
   7 7八金(69)   ( 0:11/00:00:21)
   8 3二金(41)   ( 0:03/00:00:10)
   9 4八銀(39)   ( 0:11/00:00:32)+
  10 8四歩(83)   ( 0:04/00:00:14)

変化:9手
   9 3八銀(39)   ( 0:04/00:00:25)
  10 8四歩(83)   ( 0:02/00:00:12)

変化:6手
   6 3二金(41)   ( 0:48/00:00:53)
   7 3三角成(88) ( 0:04/00:00:14)
   8 同 金(32)   ( 0:02/00:00:55)

変化:1手
   1 7六歩(77)   ( 0:01/00:00:01)
   2 3四歩(33)   ( 0:03/00:00:03)
   3 2六歩(27)   ( 0:02/00:00:03)
   4 4四歩(43)   ( 0:02/00:00:05)
   5 2五歩(26)   ( 0:01/00:00:04)
   6 3三角(22)   ( 0:01/00:00:06)
   7 4八銀(39)   ( 0:02/00:00:06)+
   8 4二飛(82)   ( 0:03/00:00:09)
   9 6八玉(59)   ( 0:12/00:00:18)
  10 9四歩(93)   ( 0:02/00:00:11)
  11 9六歩(97)   ( 0:01/00:00:19)
  12 7二銀(71)   ( 0:02/00:00:13)
  13 7八玉(68)   ( 0:01/00:00:20)

変化:7手
   7 5六歩(57)   ( 0:04/00:00:08)
   8 5四歩(53)   ( 0:03/00:00:09)
   9 4八銀(39)   ( 0:03/00:00:11)
  10 5二飛(82)   ( 0:05/00:00:14)

一本道の棋譜と違って複雑ですが、整理すると次の表のようになります。
手数本譜変化1変化2変化3変化4変化5変化6
12六歩 7六歩
23四歩 3四歩
32五歩 2六歩
43三角 4四歩
57六歩 2五歩
64四歩 2二銀 3二金 3三角
74八銀 7八金 3三角成4八銀5六歩
84二飛 3二金 同 金 4二飛5四歩
96八玉5六歩4八銀3八銀 6八玉4八銀
106二玉6二玉8四歩8四歩 9四歩5二飛
117八玉 9六歩
127二玉 7二銀
13投了 7八玉

ファイルには、本譜の手順、変化1の手順、…、変化6の手順、の順に書き出されます。
変化手順の分岐する前の指し手は、表の左にある列の手順です。例えば
なお「本譜」「変化1」などは、本稿での説明のために付けた名前であり、 柿木形式には含まれていません。

勝田将棋盤のパラメータへの変換

柿木形式V4の場合、変化手順と分岐前の手順の親子関係を表すために、 ファイル内で登場する順番が重要な意味を持ちます。
ところが、Java Applet のパラメータは登場する順番は区別できません。すなわち
<applet code="ksbp2.class">
<param name="1" value="7776">
<param name="2" value="3334">
</applet>
と
<applet code="ksbp2.class">
<param name="2" value="3334">
<param name="1" value="7776">
</applet>
は同じ扱いになります。また、同じ名前のパラメータを2つ以上与えた場合は、 どちらか一方だけが有効になります。例えば
<applet code="ksbp2.class">
<param name="1" value="7776">
<param name="1" value="2726">
</applet>
とすると、Windows98 + IE5.0 では「7六歩」、 Windows98 + NC4.7 では「2六歩」と動きました。 つまりブラウザによって、どちらが有効なのかは異なります。

V3.0のパラメータは、V2.0のパラメータとできる限り互換性を持たせるために、 以下のようにします。
前出の柿木形式V4の表に対応させて書きます。
上段は指し手、下段で / の左側はname、右側はvalueです。
手数本譜変化1変化2変化3変化4変化5変化6
12六歩
1/2726
7六歩
1A1/7776
23四歩
2/3334
3四歩
1A2/3334
32五歩
3/2625
2六歩
1A3/2726
43三角
4/2233
4四歩
1A4/4344
57六歩
5/7776
2五歩
1A5/2625
64四歩
6/4344
2二銀
6A1/3122
3二金
6B1/4132
3三角
1A6/2233
74八銀
7/3948
7八金
6A2/6978
3三角成
6B2/8833*
4八銀
1A7/3948
5六歩
1A7A1/5756
84二飛
8/8242
3二金
6A3/4132
同 金
6B3/3233
4二飛
1A8/8242
5四歩
1A7A2/5354
96八玉
9/5968
5六歩
9A1/5756
4八銀
6A4/3948
3八銀
6A4A1/3938
6八玉
1A9/5968
4八銀
1A7A3/3948
106二玉
10/5162
6二玉
9A2/5162
8四歩
6A5/8384
8四歩
6A4A2/8384
9四歩
1A10/9394
5二飛
1A7A4/8252
117八玉
11/6878
9六歩
1A11/9796
127二玉
12/6272
7二銀
1A12/7172
13投了 7八玉
1A13/6878

name で分岐を表現します。value の方はV2.0と同様です。
V2.0 に V3.0 のパラメータを与えると、変化手順を無視して本譜だけを再生します。
V3.0 に V2.0 のパラメータを与えると、正常に再生します。

一般化して記述すると、 以上の規則で、前出の柿木形式V4の内容を勝田将棋盤V3.0のパラメータに変換すると 以下のようになります。
<applet code="ksbp3.class" width="450" height=340">	width, heightの値は変更の可能性あり
<param name="1" value="2726">
<param name="2" value="3334">
<param name="3" value="2625">
<param name="4" value="2233">
<param name="5" value="7776">
<param name="6" value="4344">
<param name="7" value="3938">
<param name="8" value="8242">
<param name="9" value="5968">
<param name="10" value="5162">
<param name="11" value="6878">
<param name="12" value="6272">
<param name="9A1" value="5756">
<param name="9A2" value="5162">
<param name="6A1" value="3122">
<param name="6A2" value="6978">
<param name="6A3" value="4132">
<param name="6A4" value="3948">
<param name="6A5" value="8384">
<param name="6A4A1" value="3938">
<param name="6A4A2" value="8384">
<param name="6B1" value="4132">
<param name="6B2" value="8833*">
<param name="6B3" value="3233">
<param name="1A1" value="7776">
<param name="1A2" value="3334">
<param name="1A3" value="2726">
<param name="1A4" value="4344">
<param name="1A5" value="2625">
<param name="1A6" value="2233">
<param name="1A7" value="3948">
<param name="1A8" value="8242">
<param name="1A9" value="5968">
<param name="1A10" value="9394">
<param name="1A11" value="9796">
<param name="1A12" value="7172">
<param name="1A13" value="6878">
<param name="1A7A1" value="5756">
<param name="1A7A2" value="5354">
<param name="1A7A3" value="3948">
<param name="1A7A4" value="8252">
</applet>