将棋のアプリを開発するために作られたライブラリです。 KIF や KI2、CSA、JKF、SFEN/USI といった幅広いフォーマットでの入出力に対応しており、分岐や消費時間、コメントなど、それらのフォーマットで用いられるほとんどの表現に対応しています。
npm install tsshogi
import fs from "node:fs";
import { importKIF } from "tsshogi";
/*
* .kifu ファイルを読み込む。
*/
// NOTE: .kif ファイルの場合は Shift-JIS から UTF-8 に変換する必要がある。
const data = fs.readFileSync("sample.kifu", "utf-8");
const record = importKIF(data);
if (record instanceof Error) {
throw record;
}
/*
* 指し手を表示用の形式で出力する。
*
* 出力:
* 1 ☗2六歩
* 2 ☖8四歩
* 3 ☗2五歩
* 4 ☖8五歩
* 5 ☗7八金
* 6 中断
*/
while (record.goForward()) {
// NOTE: record.current は現在の指し手、record.position は現在の局面を表す。
console.log(record.current.ply, record.current.displayText);
}
/*
* 指し手を追加する。
*/
const move = record.position.createMoveByUSI("4a3b");
if (!move) {
throw new Error("Invalid SFEN");
}
// NOTE: 合法手チェックをしない場合は ignoreValidation オプションを指定する。
if (!record.append(move)) {
throw new Error("Illegal move");
}
棋譜を表すクラスです。分岐付きのKIF形式と同等の情報に加えて、現在の局面を管理します。
局面を表すクラスです。
盤面を表すクラスです。
駒台を表すクラスです。
指し手を表すクラスです。手番や動かした駒の種類、取られた駒の情報も含みます。
盤上のマス目を表すクラスです。
手番を表す列挙体です。
接頭辞 Immutable
が付いた interface 型は各クラスの読み取り専用インターフェースです。
値を変更するコードを書きにくくなるだけで、変更されないことを保証するものではありません。
文字列から棋譜のフォーマットを判別します。
一般的に用いられる初形配置の SFEN です。
局面に配置された駒を種類ごとに数えます。
平手と比べて不足している駒の枚数を数えます。
持将棋の合意に適用される点数を計算します。
入玉宣言法の判定に適用される点数を計算します。
入玉宣言法の合否を判定します。
先手または下手の対局者名をフルネーム優先で取得します。
後手または上手の対局者名をフルネーム優先で取得します。
先手または下手の対局者名を省略表記優先で取得します。
後手または上手の対局者名を省略表記優先で取得します。
文字コードの変換機能はありません。Shift_JIS でエンコードされた .kif ファイルや .ki2 ファイルがあることに注意してください。
CSA 形式棋譜フォーマットでは 1 つのファイルに複数の棋譜を埋め込むことが可能ですが、 tsshogi では最初の 1 件しか読み込みません。 全ての棋譜を読み込む場合は、セパレーターが書かれている行で分割してから個別に読み込ませてください。