Skip to main content

KifuStore による盤の監視と操作

状態管理ライブラリmobxにより定義した盤面及びウィジェットの状態を、外部に向けて提供しています。これにより、局面が変わったときに何か処理を行ったり、反対に外側から局面を操作したりすることができます。

KifuStore オブジェクトを介して、盤面の監視及び操作ができます。

<p>
現在<span id="tesuu"></span>手目です!
<button onclick="myKifuStore.player.goto(Math.floor(Math.random()*100))">適当な局面にジャンプ</button>
</p>
<script type="text/kifu" data-src="./files/kif/jt201409130101.kif" id="board-1">
<script>
KifuForJS.getKifuStore(document.getElementById("board-1").then((kifuStore) => {
window.myKifuStore = kifuStore;
KifuForJS.mobx.autorun(()=>{
document.getElementById("tesuu").textContent = kifuStore.player.tesuu;
})
});
</script>

現在0手目です!

  
  開始局面

KifuStore オブジェクトを取得する

<script type="text/kifu"> といったタグを記述することで盤面を表示している場合は、getKifuStore関数を使ってKifuStoreオブジェクトのPromiseを取得できます。盤面が読み込め次第resolveされます。

例えば、次のように盤面を表示させたとします。

<script type="text/kifu" id="board-1">
▲7六歩 △3四歩
</script>

次のようにしてKifuStoreを取得できます。

<script>
KifuForJS.getKifuStore(document.getElementById("board-1")).then(kifuStore => {
// ここでkifuStoreを使う
});
</script>

KifuStore を作成する

new KifuStore(options)とすることで KifuStore オブジェクトを作成できます。

KifuStore を監視する

KifuStoreは、以下のobservableなフィールドを持ったオブジェクトです。

player: JKFPlayer

将棋の盤面と棋譜の状態を表す、JKFPlayerのインスタンスです。次のフィールドが observable になっています。

  • shogi: 現在表示すべき局面の状態
    • board: 盤面、9x9の二次元配列
    • hands: 持ち駒、駒種のCSA表記から数へのマッピングをそれぞれ先手と後手についてこの順に持つ配列
    • turn: 手番 (Color.Black すなわち 0、 または Color.White すなわち 1)
  • forkPointers: 現在の局面が分岐している場合、分岐手数目と何番目の分岐に当たるかのペアのリスト
  • kifu: 表示すべき棋譜のリスト。分岐の場合、現在の分岐に至るまでの初手からの棋譜と今後の棋譜がそれぞれ格納されています。
  • tesuu: 現在の手数

errors: string[] = []

表示すべきエラーの文字列が格納されます。

filePath: string = undefined

読み込まれた棋譜ファイルのパスを表します。 棋譜文字列を直接読み込んだ場合はundefinedです。

(legacy) reversed: boolean = false

盤面が反転表示されているかどうかを表します。v5以降のlegacy版ではない Kifu for JS は反転機能がないため、特に意味は持ちません。

KifuStore を操作する

KifuStore を操作する主なメソッドは次のとおりです。

  • 棋譜を読み込む
    • KifuStore#loadFile(filePath: string) 棋譜ファイルを読み込む
    • KifuStore#loadKifu(kifu: string) 棋譜文字列を渡して読み込む
  • 棋譜を再生する
    • KifuStore#player.forward() 1手進む
    • KifuStore#player.forward() 1手戻る
    • KifuStore#player.go(te: number) te 手進む/戻る
    • KifuStore#player.goto(tesuu: number, forkPointers?: [number, number][]) 指定した手数にジャンプする(必要であれば分岐ポインタも渡す)