JSONで将棋の棋譜を取り扱う標準形式JKFを定義しています.またJKFを既存のKIF, KI2, CSA等から変換するライブラリ及びJKFを用いて盤面再生を行うライブラリを提供します.
フォーマット | KIF | KI2 | CSA | JKF |
---|---|---|---|---|
0) 1) 元座標(from) | ○ | △(要相対逆算) | ○ | ○ |
1) 取った駒(capture) | × | × | × | ○ |
1) 2) 成り(promote) | ○(不成なし) | ○ | △ | ○ |
2) 相対情報(relative) | △ | ○ | △ | ○ |
2) 同〜(same) | ○ | ○ | × | ○ |
手番(color) | × | ○ | ○ | ○ |
消費時間(time) | ○ | × | ○ | ○ |
○=棋譜だけで可能 △=現在の局面を見れば可能 ×=不可能か,以前の局面を見れば可能
以下で定義される形式をVersion 1.0とします.1.x台では後方互換性を保つ変更のみを採用します. (TypeDoc も参照)
./src/Formats.tsにある内容です."?"はない場合があるという意味です.小文字で始まる型名
は組み込み型です.
string=>string
ヘッダ情報.キーはKI2,KIF等の日本語のものに準ずる.(例: "場所", "先手")InitialPresetString
手合名Color
初手の手番以下[][]
board[x-1][y-1]に(x,y)の駒情報.駒がない場合は空オブジェクト{}
Color
先手/後手string
駒の種類(string=>number)[]
駒種がkey, 枚数がvalueの連想配列.0番目が先手,1番目が後手の持駒MoveFormat[]
n番目はn手目の棋譜(0番目は初期局面のコメント用)上の定義で使うオブジェクトの補助定義は次の通り.
MoveFormat
指し手を表すstring[]
コメントColor
先手/後手PlaceFormat
移動元 打った場合はなしPlaceFormat
移動先string
駒の種類(FU
KY
等のCSA形式)boolean
直前と同じ場合Bool
成るかどうか true:成, false:不成, 無いかnull:どちらでもないstring
取った駒の種類RelativeString
相対情報TimeFormat
1手TimeFormat
合計string
特殊棋譜(CSAのTORYO, CHUDAN等)MoveFormat[][]
任意の長さの分岐を任意個格納する.分岐の初手はこのforksを持つ棋譜の代替の手とする(次の手ではなく)TimeFormat
時間を表すInteger
時Integer
分Integer
秒PlaceFormat
座標を表すInteger
1から9Integer
一から九エイリアスは次の通り.
Color = number
陣営を表す. 先手: 0, 後手: 1RelativeString = string
以下の文字列を連結したものInitialPresetString = string
平手,香落ち等KIFでサポートされている手合情報JSONで一般的なUTF-8を使用するものとします.
JSON Schema のバージョン 2020-12 による定義が ./specification/json-kifu-format.schema.json にあります。
また、 npm run schema:compile
によりこのJSON Schemaファイル自体の検証を、 npm run schema:validate
により specification/files/ 以下にあるJKFファイルのJSON Schemaファイルに対する検証を行います。
.test/ 以下にも例が載っています.
{
"header": {
"先手": "na2hiro",
"後手": "うひょ"
},
"moves": [
{},
{"move":{"from":{"x":7,"y":7},"to":{"x":7,"y":6},"color":0,"piece":"FU"}},
{"move":{"from":{"x":3,"y":3},"to":{"x":3,"y":4},"color":1,"piece":"FU"}},
{"move":{"from":{"x":8,"y":8},"to":{"x":2,"y":2},"color":0,"piece":"KA","capture":"KA","promote":false}},
{"move":{"from":{"x":3,"y":1},"to":{"x":2,"y":2},"color":1,"piece":"GI","capture":"KA","same":true}},
{"move":{"to":{"x":4,"y":5},"color":0,"piece":"KA"}},
{"special": "CHUDAN"}
]
}
{
"header": {},
"moves": [
{"comments":["分岐の例"]},
{"move":{"from":{"x":7,"y":7},"to":{"x":7,"y":6},"color":0,"piece":"FU"}},
{"move":{"from":{"x":3,"y":3},"to":{"x":3,"y":4},"color":1,"piece":"FU"}, "comments":["次の手で二種類が考えられる:7七桂か2二角成である.","2二角成を選ぶと筋違い角となる."]},
{"move":{"from":{"x":8,"y":9},"to":{"x":7,"y":7},"color":0,"piece":"KE"}, "forks":[
[
{"move":{"from":{"x":8,"y":8},"to":{"x":2,"y":2},"color":0,"piece":"KA","capture":"KA","promote":false}},
{"move":{"from":{"x":3,"y":1},"to":{"x":2,"y":2},"color":1,"piece":"GI","capture":"KA","same":true}},
{"move":{"to":{"x":4,"y":5},"color":0,"piece":"KA"}}
]
]},
{"move":{"from":{"x":2,"y":2},"to":{"x":7,"y":7},"color":1,"piece":"KA","capture":"KE","promote":true,"same":true}},
{"move":{"from":{"x":8,"y":8},"to":{"x":7,"y":7},"color":0,"piece":"KA","capture":"UM","same":true}},
{"move":{"to":{"x":3,"y":3},"color":1,"piece":"KE","relative":"H"}}
]
}
{
"header": {},
"initial": {"preset": "6"},
"moves": [
{},
{"move":{"from":{"x":5,"y":1},"to":{"x":4,"y":2},"color":1,"piece":"OU"}},
{"move":{"from":{"x":7,"y":7},"to":{"x":7,"y":6},"color":0,"piece":"FU"}},
{"move":{"from":{"x":6,"y":1},"to":{"x":7,"y":2},"color":1,"piece":"KI"}}
]
}
{
"header": {},
"initial": {
"preset": "OTHER",
"data": {
"board": [
[{"color":1, "kind":"KY"}, { },{"color":1, "kind":"FU"}, {}, {}, {}, {"color":0, "kind":"FU"}, { }, {"color":0, "kind":"KY"}],
[{"color":1, "kind":"KE"}, {"color":1, "kind":"KA"},{"color":1, "kind":"FU"}, {}, {}, {}, { }, {"color":0, "kind":"HI"}, {"color":0, "kind":"KE"}],
[{"color":1, "kind":"GI"}, { },{"color":1, "kind":"FU"}, {}, {}, {}, {"color":0, "kind":"FU"}, { }, {"color":0, "kind":"GI"}],
[{"color":1, "kind":"KI"}, { },{"color":1, "kind":"FU"}, {}, {}, {}, {"color":0, "kind":"FU"}, { }, {"color":0, "kind":"KI"}],
[{"color":1, "kind":"OU"}, { },{"color":1, "kind":"FU"}, {}, {}, {}, {"color":0, "kind":"FU"}, { }, {"color":0, "kind":"OU"}],
[{"color":1, "kind":"KI"}, { },{"color":1, "kind":"FU"}, {}, {}, {}, {"color":0, "kind":"FU"}, { }, {"color":0, "kind":"KI"}],
[{"color":1, "kind":"GI"}, { },{"color":1, "kind":"FU"}, {}, {}, {}, { }, { }, {"color":0, "kind":"GI"}],
[{"color":1, "kind":"KE"}, {"color":1, "kind":"HI"},{"color":1, "kind":"FU"}, {}, {}, {}, {"color":0, "kind":"FU"}, {"color":0, "kind":"KA"}, {"color":0, "kind":"KE"}],
[{"color":1, "kind":"KY"}, { },{"color":1, "kind":"FU"}, {}, {}, {}, {"color":0, "kind":"FU"}, { }, {"color":0, "kind":"KY"}]
],
"color": 0,
"hands":[
{"FU":0,"KY":0,"KE":0,"GI":0,"KI":0,"KA":0,"HI":0},
{"FU":0,"KY":0,"KE":0,"GI":0,"KI":0,"KA":0,"HI":0}
]
}
},
"moves": [
{"comments": ["飛車角先落ち."]},
{"move":{"from":{"x":2,"y":8},"to":{"x":2,"y":3},"color":0,"piece":"HI","promote":true,"capture":"FU"}}
]
}
Releases からどうぞ.json-kifu-format-*.*.*.min.js
を読み込むと,JSONKifuFormat
が使えるようになります.
$ npm install json-kifu-format
exportされているクラス群は次の通りです
Parsers
parseKIF
: KIFをJSON形式に一対一変換するパーサparseKI2
: KI2をJSON形式に一対一変換するパーサparseCSA
: CSA(V1, V2, V2.1, V2.2)をJSON形式に一対一変換するパーサNormalizer
: {KIF/KI2/CSA}と同等の情報しか持たないJKFを完全なJKFに変換するプログラムJKFPlayer
: JKFを扱う棋譜再生盤の例issues 参照. 読み込みエラーとなる棋譜があったら教えて下さい.
主な情報はmonorepoトップのREADMEをご覧ください。kifu-for-js
固有の情報は以下の通りです。
MIT License (see ./LICENSE.txt)
Generated using TypeDoc