電脳麻将牌譜解析ツール
電脳麻将形式の牌譜を解析する基底クラスを提供します。本クラスのサブクラスを作成し、解析のためのプログラムを書くことができます。
天鳳の牌譜も tenhou-log で電脳麻将形式に変換し、解析することが可能です。
$ npm i @kobalab/majiang-analog
majiang-analog の提供するクラスのサブクラスを作成し、メソッドをオーバーライドして解析処理を記述します。
class AnaLog extends require('@kobalab/majiang-analog') {
/* 和了時に呼び出されるメソッドをオーバーライドして解析処理を書く */
hule(hule) {
if (hule.hupai.find(h=> h.name == '大三元')) { // 大三元で和了した場合
console.log(this.idx(hule.l)); // ログにどの牌譜か出力する
}
}
}
AnaLog.analyze(); // 解析を実行する
examples にも解析プログラムの例がありますので、参考にしてください。
牌譜の各段階で以下のメソッドが呼び出されます。メソッドのパラメータはそれぞれに対応する 牌譜 の情報です。 this.board には 卓情報 が設定されます。
契機 | メソッド |
---|---|
解析開始 | init() |
対戦開始 | kaiju(paipu) |
配牌 | qipai(qipai) |
自摸 | zimo(zimo) |
打牌 | dapai(dapai) |
副露 | fulou(fulou) |
暗槓・加槓 | gang(gang) |
槓自摸 | gangzimo(gangzimo) |
開槓 | kaigang(kaigang) |
和了 | hule(hule) |
流局 | pingju(pingju) |
和了・流局後 | last(log) |
例えば、配牌時には qipai(qipai) が呼び出され、qipai.shoupai には各プレーヤーの配牌が設定されます。
static analyze(filename, argv) を呼び出すと解析を開始します。 filename は解析対象のファイル名、もしくは牌譜のあるディレクトリ名です。省略時にはカレントディレクトリが指定されたと解釈します。 argv には以下の動作を変更するオプションが指定できます。
指定した場合、これを超える数のログを解析しません。
解析進捗状況の表示を停止します。
指定された値を this.viewpoint に設定します。特定の席順(仮東など)の対局者のみ集計したい場合に利用できます。 this.viewpoint が指定されているとき、メソッド watch(l) は手番 l がそれと一致しなければ偽を返します。
指定された名前と一致する対局者の席順を this.viewpoint に設定します。
const { base, getlogs } = require("@kobalab/majiang-analog");
簡易解析用の基底クラス。 this.board に 卓情報 を設定しませんが、高速に動作します。
- filename - string
- 返り値 - object
filename で指定されたファイルもしくはディレクトリから 牌譜 を1つずつ取り出すイテレータを返します。