🀄

雀魂の牌譜解析スクリプトを(とりあえず)作った

に公開

発端

自分が所属しているコミュニティでオンライン麻雀サイト(雀魂)を使った麻雀大会を実施することになった。
大会要領としては

  • 開催期間中、プレイヤーは四麻半荘を何度打ってもよい
  • 直近5戦の精算点の合計値が高い人から準決勝戦に駒を進める
  • 頭ハネルールを採用するため局ごとの和了者は一人のみ(これが集計を楽にしてくれている)

といったもの。

また、準決勝に進出できる8人目は準決勝に出場しない者から、以下のいずれかが最も高かったものとする。(ランダムで決める)

  • 半荘あたりの最高得点
  • 局あたりのリーチ率
  • 局あたりの面前自摸率
  • 大会を通して4着回避率
  • 大会を通して2位率
  • 大会を通して4位率

大会管理画面が持つ機能はおおよそ親切とは言えず、上記データを拾い集めるのは骨が折れる。

雀魂の牌譜はjsonらしい

ならば機械に集計させればよい、とのことで、どうにかして手にれた全対局の牌譜を解析させるスクリプトをChatGPTと壁打ちしながら書いた。

https://github.com/motoki-work/Jantama_Stats_Parser

集計の鬼門だった点

流し満貫

流局発生時に流し満貫フラグを持つプレイヤーがいれば流し満貫発生とみなすことにした。この条件判定はテストしたかったが、当該牌譜が見当たらない。流し満貫そのものが非常に発生しずらいから仕方ない。そのため未テストです。すみません。

0翻の裏ドラ

これはおそらく表示された裏ドラが和了時の手牌に含まれていなかった場合だと考えられる。

食い下がりの判定

和了時の手牌に副露が含まれている場合は食い下がりとする。また、食い下がり役で和了した場合、牌譜が持っている翻数は食い下がり後の翻数であることに注意する。

あとはExcelなりGoogle Spreadseetでがんばる

sumifs関数を駆使すれば以下の集計ができる。

  • 人別のあがり役の傾向
  • 人別の順位率
  • 誰が誰に振り込んだかの傾向

これらのデータがどれくらい役に立つかは正直あんまりよく分からないが…

Discussion