Git Product home page Git Product logo

json-kifu-format's Introduction

(Moved) json-kifu-formatはmonorepoへ移行しました

https://github.com/na2hiro/Kifu-for-JS/tree/master/packages/json-kifu-format

JSON棋譜フォーマット(JKF) Build Status

JSONで将棋の棋譜を取り扱う標準形式JKFを定義しています.またJKFを既存のKIF, KI2, CSA等から変換するライブラリ及びJKFを用いて盤面再生を行うライブラリを提供します.

概要

  • 現状の問題として,既存のKIF, KI2, CSA形式が持つ情報はバラバラであり,アプリケーション側の対応に手間がかかる.
  • 上記形式の情報に加え,棋譜再生や表示に必要な情報を持った形式をJSONで表し,これを流通用の JSON棋譜フォーマット(JKF) とする.
    • JKFが一般的になれば,棋譜再生を行うアプリケーションの作成が容易になる.
    • 一例として,JKFを元に棋譜再生を行うJKFPlayerクラス(JavaScript)を提供する.
  • KIF, KI2, CSA各形式のパーサ(JavaScript)を用意し,JKFへ変換できるようにする.
    • これはパーサジェネレータによるパーサである.つまり, KIF, KI2, CSA形式のEBNF表現 を提供している.これは将棋界において画期的である.

棋譜形式の比較

フォーマット KIF KI2 CSA JKF
0) 1) 元座標(from) △(要相対逆算)
1) 取った駒(capture) × × ×
1) 2) 成り(promote) ○(不成なし)
2) 相対情報(relative)
2) 同〜(same) ×
手番(color) ×
消費時間(time) ×

○=棋譜だけで可能 △=現在の局面を見れば可能 ×=不可能か,以前の局面を見れば可能

  • 0: 局面を1手進めるために必要な情報
  • 1: 局面を1手戻すために必要な情報
  • 2: 可読棋譜にするために必要な情報
  • 相対情報: 上下左右など,同じ座標に複数の駒が移動できる場合に駒を区別するための情報.
  • 相対逆算: 局面と座標と相対情報から,その位置に移動する駒を特定すること.

形式の定義

以下で定義される形式をVersion 1.0とします.1.x台では後方互換性を保つ変更のみを採用します. (TypeDoc も参照)

JSONの形式 (Version 1.0)

./src/Formats.tsにある内容です."?"はない場合があるという意味です.小文字で始まる型名は組み込み型です.

  • JKFが持つフィールドの定義
    • header string=>string ヘッダ情報.キーはKI2,KIF等の日本語のものに準ずる.(例: "場所", "先手")
    • initial? 初期局面(なければ平手)
      • preset InitialPresetString 手合名
      • data? 初期局面データ(手合名がOTHERの時に使用)
        • color: Color 初手の手番
        • board: 以下[][] board[x-1][y-1]に(x,y)の駒情報.駒がない場合は空オブジェクト{}
          • color?: Color 先手/後手
          • kind?: string 駒の種類
        • hands: (string=>number)[] 駒種がkey, 枚数がvalueの連想配列.0番目が先手,1番目が後手の持駒
    • moves MoveFormat[] n番目はn手目の棋譜(0番目は初期局面のコメント用)

上の定義で使うオブジェクトの補助定義は次の通り.

  • MoveFormat 指し手を表す
    • comments? string[] コメント
    • move? 駒の動き
      • color Color 先手/後手
      • from? PlaceFormat 移動元 打った場合はなし
      • to PlaceFormat 移動先
      • piece string 駒の種類(FU KY等のCSA形式)
      • same? boolean 直前と同じ場合
      • promote? Bool 成るかどうか true:成, false:不成, 無いかnull:どちらでもない
      • capture? string 取った駒の種類
      • relative? RelativeString 相対情報
    • time? 消費時間
      • now TimeFormat 1手
      • total TimeFormat 合計
    • special? string 特殊棋譜(CSAのTORYO, CHUDAN等)
    • forks? MoveFormat[][] 任意の長さの分岐を任意個格納する.分岐の初手はこのforksを持つ棋譜の代替の手とする(次の手ではなく)
  • TimeFormat 時間を表す
    • h? Integer
    • m Integer
    • s Integer
  • PlaceFormat 座標を表す
    • x Integer 1から9
    • y Integer 一から九

エイリアスは次の通り.

  • Color = number 陣営を表す. 先手: 0, 後手: 1
  • RelativeString = string 以下の文字列を連結したもの
    • 左, 直, 右: それぞれL, C, R(Left, Center/Choku, Right)
    • 上, 寄, 引: それぞれU, M, D(Up, Middle, Down)
    • 打: H(Hit (本来はDrop))
  • InitialPresetString = string 平手,香落ち等KIFでサポートされている手合情報
    • HIRATE: 平手
    • KY: 香落ち
    • KY_R: 右香落ち
    • KA: 角落ち
    • HI: 飛車落ち
    • HIKY: 飛香落ち
    • 2: 二枚落ち
    • 3: 三枚落ち
    • 4: 四枚落ち
    • 5: 五枚落ち
    • 5_L: 左五枚落ち
    • 6: 六枚落ち
    • 7_L: 左七枚落ち
    • 7_R: 右七枚落ち
    • 8: 八枚落ち
    • 10: 十枚落ち
    • OTHER: その他

文字コード

JSONで一般的なUTF-8を使用するものとします.

JSON Schemaによる定義

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ファイルに対する検証を行います。

JKFの例

.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 が使えるようになります.

node.js用

$ 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を扱う棋譜再生盤の例

開発環境

$ nvm use && nvm i && npm i

上記コマンドを実行することで開発に必要なパッケージをインストールできます.

コマンド

$ npm run build
$ npm run build:watch
$ npm run build:analyze

ビルドが走ります.build:watchの場合,変更されるたびにビルドが走ります.build:analyzeの場合,バンドルの大きさの可視化ができます.

$ npm run test:watch

コンソールでテスト結果が表示されます.コードの変更が保存されるたびに必要なテストが再実行されるため,実装が既存の有効なテストを壊してないか簡単に確認できます.

$ npm run test

全てのテストが走るとともにカバレッジレポートが表示されます.coverage/lcov-report/index.htmlでは,行ごとのカバレッジを確認できます.追加されたコードのブランチカバレッジが100%になるようにしてください.push時にチェックされ満たしていなければ却下されるはずです.

$ npm run lint

コードの品質が検査されます.エラーがあればそれに従い直してください.push前にもチェックされます.

$ npm run lint:fix

自動的に修正可能な問題(インデント等)を直してくれます.

バグ報告、機能要望等

issues 参照. 読み込みエラーとなる棋譜があったら教えて下さい.

参考文献

ライセンス

MIT License (see ./LICENSE.txt)

Workflows (it's for me)

Publish

  1. Bump version using bump action
  2. Create a new release with the new version
  3. Check an email about publish result

json-kifu-format's People

Contributors

becausehama avatar dependabot[bot] avatar e9 avatar fhisa avatar gemmaro avatar hanachin avatar mizar avatar na-o-ys avatar na2hiro avatar orangain avatar paalon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

json-kifu-format's Issues

分岐

どう格納するか

  • ポインタ方式
    • KIF, KI2が採用
    • 分岐がある棋譜の末尾には+を書く
    • 一番後に出てくる分岐を一番前に書くっぽい
  • 埋め込み方式
    • MoveFormatの1フィールドに分岐fork: MoveFormat[][],つまり棋譜列を複数持つ配列を追加する
    • JSONであることを活かしている

後者に問題がなければ後者を選択したい

パーサテスト書き

  • 棋譜フォルダに突っ込んだ棋譜を片っ端からパースしていくスクリプト書く
  • できれば棋譜に対応する正解(最終局面図とか)セットがほしい

resultの形式

  • まで100手で先手勝ち
  • まで10手で中断

など棋譜列の最後にある情報をどのように持つか

  • 必要?
    • 棋譜に「投了」「中断」などと書かれる
      • 結果がこれに従属しているなら不要か?
      • CSAはこれだけを使用.KIF, KI2は両方.
    • とはいえ棋譜を辿らずに勝敗だけでも分かるフィールドがあると良い気もする

dropEffectフィールドについて

test/files/jkf/same_move_minimal.jkf を調べているときに、 dropEffect フィールドがあることに気付きました。

$ jq '.moves[1].move.to' test/files/jkf/same_move_minimal.jkf
{
  "dropEffect": "move",
  "x": 7,
  "y": 6
}

このフィールドは同ファイルにしか存在せず、JSONの形式 (Version 1.0)でも言及されておりません。
このフィールドの存在は仕様に含まれますでしょうか。もし含まれましたら、フィールドの説明を仕様に追記いただけますと幸いです。もし含まれないようでしたら、JKFファイルを修正することになりそうです。

文脈: #51 によるJSON Schemaの作成中、 test/files/jkf/*.jkf との照らし合わせを行っています。

Specify a data model

Currently, json-kifu-format only specifies JSON representation.
However, this format is not fully-strictly typed, and is somewhat looser than it actually is due to JSON's limited expressive power.
Therefore, I propose to specify the data model as well. That is, to provide a more strictly typed representation of the game record in TypeScript.

パーサのプロジェクトを独立

パーサとJKFPlayerが結合してしまっているが,パース時にJKFPlayerを使っているわけではない.
パーサ(+normalizer)を独立させるのが良さそう.

Missing dependency 'vinyl-source-stream'

エラー内容

gulp buildすると下記のエラーが発生しました

%gulp build

Error: Cannot find module 'vinyl-source-stream'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/path/to/.ghq/github.com/na2hiro/json-kifu-format/gulpfile.js:8:14)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

原因

https://github.com/na2hiro/json-kifu-format/blob/master/gulpfile.js#L8 で使っているモジュールがpackage.jsonに含まれていないようです。

対応

npm install vinyl-source-stream --save-dev

でpackage.jsonを更新すればビルドできました。

投了等の特殊棋譜からの分岐にも対応

投了等の特殊棋譜からの分岐も考えられる.
具体的には,投了図以下の詰み手順を分岐で指し示す.(コメントではなく)

  • Normalizerが対応していない(特殊棋譜の分岐について整合性をチェックされない)ので対応する
  • 既存の形式がそこまで対応しているのかどうかを調査する

ヘッダ情報のキーの値を決める

  • KIF, KI2は日本語で「開始日時」「先手」「手合割」などと持つ
  • CSAはローマ字でSTART_TIME, +記法などで持つ

局面の再生に不要で人間が読むだけなら日本語でもいいか?

ILLEGAL_ACTIONの扱いが先後逆の表記になっている

の定義が逆になっており、 CSA標準棋譜ファイル形式 第6版 バージョン2.2 (2008年1月12日) では

%+ILLEGAL_ACTION 先手(下手)の反則行為により、後手(上手)の勝ち
%-ILLEGAL_ACTION 後手(上手)の反則行為により、先手(下手)の勝ち

と説明されています。第32回世界コンピュータ将棋選手権で問題が起きた棋譜の例を挙げます。

#コメント対応

(涓滴さん情報)現在先頭行で弾いてるけど,多分どこに入れても無視するのがいい?

CSA対応

  • CSA 1(バージョンなし)はやった
  • CSA 2以降が未対応

指し手 (moves) の要素について

JSONの形式 (Version 1.0)に以下の記述があります。

  • moves MoveFormat[] n番目はn手目の棋譜(0番目は初期局面のコメント用)

こちらについて、見方によっては0番目の要素と1番目以降の要素の型が異なることにより、一部のJSONライブラリでJSONからデコードする際に不自由が生じると考えています(例:Elmの Json.Decode)。

そこで、初期局面のコメントはトップレベルのフィールドに移し、指し手を0オリジンで開始するのはいかがでしょうか。

補足:なお、例に挙げた例でも「コメントのみを含む要素」と「指し手の要素」の列挙型を定義し、一時的にその型で一律にデコードすることは可能です。ただし、その場合1番目以降の要素が「コメントのみを含む要素」でないことを検証する必要があります。

初期局面

  • どう格納するか
    • 少なくとも各形式にはあらゆる局面を初期局面とできるような書式がある
  • 既存形式の状況
    • CSAが3通りの表現
      • 平手マイナス指定した駒
      • 盤面みたまま
      • まっさらプラス指定した駒
    • KIF, KI2はBOD(盤面みたまま)を使っている
      • "手合割:平手"などいくつかのプリセットあり

CSA一括表現の後の `00AL`

'行き詰まり『新たなる殺意』 (看寿賞 平成元年短編賞)
P1 *  *  *  *  *  *  *  *  * 
P2 *  *  *  *  *  *  *  *  * 
P3 *  *  * -FU-FU *  *  *  * 
P4-RY *  * -OU * -FU *  *  * 
P5 *  * +KY * -TO *  *  *  * 
P6 *  * +RY *  *  *  *  *  * 
P7+KA *  *  *  *  *  *  *  * 
P8+KA *  *  *  *  *  *  *  * 
P9 *  *  *  *  *  *  *  *  * 
P-00AL
+

のように一括表現を使って盤面を表現した後に 00AL が出てきている場合に、盤面に使われた駒が考慮されないようです。
(後手の持駒は {FU: 14, KY: 3, KE: 4, GI: 4, KI: 4, KA: 0, HI: 0} となるのが正しいはず)

{
  "header": {},
  "initial": {
    "preset": "OTHER",
    "data": {
      "board": [ ... ],
      "hands": [
        {
          "FU": 0,
          "KY": 0,
          "KE": 0,
          "GI": 0,
          "KI": 0,
          "KA": 0,
          "HI": 0
        },
        {
          "FU": 18,
          "KY": 4,
          "KE": 4,
          "GI": 4,
          "KI": 4,
          "KA": 2,
          "HI": 2
        }
      ],
      "color": 0
    }
  },
  "moves": [
    {}
  ]
}

CSA形式: komabetsuline の中身が空だと読み込めない

Shogi.js の toCSAString() は例えば平手初期局面だと以下のような出力(P+,P-の行に記述される駒が空)をしますが、

input:

(new ShogiJS.Shogi()).toCSAString()

output:

'P1-KY-KE-GI-KI-OU-KI-GI-KE-KY\nP2 * -HI *  *  *  *  * -KA * \nP3-FU-FU-FU-FU-FU-FU-FU-FU-FU\nP4 *  *  *  *  *  *  *  *  * \nP5 *  *  *  *  *  *  *  *  * \nP6 *  *  *  *  *  *  *  *  * \nP7+FU+FU+FU+FU+FU+FU+FU+FU+FU\nP8 * +KA *  *  *  *  * +HI * \nP9+KY+KE+GI+KI+OU+KI+GI+KE+KY\nP+\nP-\n+'

output:

P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI *  *  *  *  * -KA * 
P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P4 *  *  *  *  *  *  *  *  * 
P5 *  *  *  *  *  *  *  *  * 
P6 *  *  *  *  *  *  *  *  * 
P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P8 * +KA *  *  *  *  * +HI * 
P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
P+
P-
+

これは JSONKifuFormat.JKFPlayer.parseCSA() では解釈できない文字列となっているようです。

input:

JSONKifuFormat.JKFPlayer.parseCSA((new ShogiJS.Shogi()).toCSAString())

error:

{
    "message": "Expected [0-9] but \"\\n\" found.",
    "expected": [
        {
            "type": "class",
            "parts": [
                [
                    "0",
                    "9"
                ]
            ],
            "inverted": false,
            "ignoreCase": false
        }
    ],
    "found": "\n",
    "location": {
        "start": {
            "offset": 272,
            "line": 10,
            "column": 3
        },
        "end": {
            "offset": 273,
            "line": 11,
            "column": 1
        }
    },
    "name": "SyntaxError"
}

komabetsuline = "P" teban:teban pieces:(xypiece)+ nl {return {teban: teban, pieces: pieces}}

にて、 pieces:(xypiece)+ と1つ以上の持ち駒が記述される前提となっている事が原因のようです。

手番をbooleanではなくnumberで表現するよう変更する

内容

  • 先手をtrue,後手をfalseで表しているが,これを先手を0,後手を1で表すように変更する.

理由

  • 対局者は真偽ではなくenumで表すのが自然であり,enumはnumberと1対1対応が取られるのが普通.
  • 実際,handsは0番目が先手,1番目が後手の持駒を保持する配列である.
  • Shogi.jsでも先手を0,後手を1としている.(jkfの先手trueとShogi.jsの後手1が互いにキャストされうるので両方を触るプログラムにおいてバグの原因になる)
  • 将来3人以上のプレイヤーが存在するルールへの対応も可能になる.

今後の対応

  • 現在browserifyブランチでテストの記述 #17 が進んでおり,曖昧だった実装・仕様が固まりつつある.ここで手番をnumberに変更する.テストを十分に記述できこのブランチがmasterにマージされた時点でバージョン1.0.0としてリリースする.
  • 古いJKFファイルに向け,手番の場所に真偽値が入っている場合はconsole.warn等で警告を出力しつつ,これまでの仕様として解釈する.またNormalizerはこれをnumberに修正する.

browserify導入

現在catでjsを連結してブラウザ用コードを生成しているのを,requireを用いたcommonjs風(e.g. nodejs)のモジュール読み込み方式にする.ブラウザ用コードはbrowserifyで出力する.

目的

  • node.jsで簡単に使用できるようにする
  • テスト導入 → #13

必要事項

  • Shogi.jsをnpm(package.json)による読み込みにする → #15
    • require('Shogi.js')とするため
  • パーサもモジュールとして読み込めるようにする → #14

package.json

将棋のWebアプリを書こうと思い調べていたところ、このプロジェクトを見つけました。
JSONで将棋の棋譜を取り扱うという素晴らしいプロジェクトで試してみたいと思ったんですが、npm install json-kifu-formatなどnpmなどのパッケージマネージャーでインストールできる訳ではないようです。

対応する予定はありませんか。

specialの文字列

  • specialの仕様
    • CSAでは"TORYO" "CHUDAN"などで,特別な動きを表す.これをJKFではそのまま使用する.
    • KIF, KI2では"投了" "中断"などで表す.
  • やること
    • KIF等とCSAとの対応を取る

と思ったら謹製technic.txtに書いてあった.

 指し手には、通常のもの以外に、「中断」「投了」「持将棋」「千日手」「詰み」
「切れ負け」「反則勝ち」「反則負け」がある。
「反則勝ち」は、直前の指し手が反則であることを示す。
「反則負け」は、その指し手の手番側が何らかの反則で負けたことを示す。

やるだけか.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.