セガNET麻雀MJのリプレイURLを解析


MJのリプレイURLについて

MJのリプレイはURLを基にHTML/CSS/jsを使用して再現しているだけでした。リプレイ例
サーバに動画などのデータは保存されていないようなので、サーバ上に大量のデータを保存することなく、多くのリプレイを見ることが可能となっています。

今回はそのリプレイURLに書いてある情報を解析していきたいと思います。
解析が出来たら、複数のURLから様々な統計情報を作成することができると思っています。

pythonで解析するプログラムを開発中github

注意

すべての解析はまだできていません。
3麻の場合の解析は行っていません。

パラメータ一覧

基本

url上の牌の置換

1: "萬子1"
2: "萬子2"
3: "萬子3"
4: "萬子4"
5: "萬子5"
6: "萬子6"
7: "萬子7"
8: "萬子8"
9: "萬子9"
0: "萬子5赤"
a: "索子1"
b: "索子2"
c: "索子3"
d: "索子4"
e: "索子5"
f: "索子6"
g: "索子7"
h: "索子8"
i: "索子9"
"-": "索子5赤"
j: "筒子1"
k: "筒子2"
l: "筒子3"
m: "筒子4"
n: "筒子5"
o: "筒子6"
p: "筒子7"
q: "筒子8"
r: "筒子9"
s: "筒子5赤"
t: "東"
u: "南"
v: "西"
w: "北"
x: "白"
y: "發"
z: "中"

プレイヤー番号

0: "下"
1: "右"
2: "上"
3: "左"

B (場の情報)

4桁の数字に4種の情報が含まれています
それぞれの情報の数値が入力されている

 1桁目 局数

0: "東一局"
1: "東二局"
2: "東三局"
3: "東四局"
4: "南一局"
5: "南二局"
6: "南三局"
7: "南四局"

 2桁目 本場数

0: "0本場"
1: "1本場"
2: "2本場"
3: "3本場"
...etc

 3桁目 供託数

0: "0本"
1: "1本"
2: "2本"
3: "3本"
...etc

 4桁目 親の開始位置

プレイヤー番号(0~3)を参照

1232の場合

K (未解析)

風に関する物?だと思われる

V (未解析)

バージョンに関する物?だと思われる

DI (未解析)

台のデザインやルールなどに関する物?だと思われる

T (点数)

プレイヤーの位置が下_右_上_左の順に_区切りで百分の一の点数
下記の場合、下が23000点、右が24000点、上が26000点、左が27000点

230_240_260_270

SA (未解析)

三麻の時に使用する何か
一桁目は3麻の時に空席の部分のプレイヤー番号

D (初期ドラ牌)

初期時のドラ牌を一文字に置き換えたもの

S (サイコロ)

二つサイコロの目

11: 1の目二つ
23: 2と3の目
45: 4と5の目
66: 6の目二つ

H (配牌)

プレイヤーの位置が下_右_上_左の順に_区切りし、
各プレイヤーの各牌を一文字に置き換えたもの

1112345678999_aaabvdefghiii_jjjklmnopqrrr_ttuuvvwwxxyyz

上記の場合

A (アクション、一連の流れ)

親の最初のツモ牌から最後までの行動が記入されている
大文字はそのまま入力
小文字は指示した内容に置き換え
牌はすべて一文字に置き換えたもの

"_": ツモ切り

一文字前の牌をツモ切り

"Rx": 立直

x: 立直時に捨てた牌

"Cyyx": チー

yy:チーに使った2つの牌
x:捨てた牌

"Px": ポン

x:ポンしたプレイヤー番号(0~3)

"KwDyLz": 加槓

w:カンした牌
y:めくったドラ牌
z:リンシャン牌

"AwDyLz": 暗槓

w:カンした牌
y:めくったドラ牌
z:リンシャン牌

"MxDyLz": 明槓

x:カンしたプレイヤー番号(0~3)
y:めくったドラ牌
z:リンシャン牌

"~xyUzUz": ツモ,ロン

x:ロンしたプレイヤー番号(0~3)
y:上がり時の手配の枚数 16進数(1~e), ロンした牌は含めない、鳴いた牌は含めない
z:裏ドラ牌 ロンなどで必要ない場合はセットで書かない 枚数分だけUとセットで増やす

".1Tyyyy": 流局

数字の意味は不明
yに自分から順番(下右上左)にテンパイ1ノーテン0

12a_kRjCklz~1d

※東がプレイヤー番号0とする

上記の場合
東:1(萬子1) 萬子1を引く
東:2(萬子2) 萬子2を捨てる
南:a(索子1) 索子1を引く
南:_(ツモ切り) 索子1をツモ切り
西:k(筒子2) 筒子2を引く
西:R(リーチ) リーチする
西:j(筒子1) 筒子1を捨てる
北:Ckl(チー,筒子2,筒子3) 筒子1(西の捨て牌)を筒子2,筒子3(手牌)でチーする
北:z(中) 中を捨てる
南:~1d(ロン,右,13枚) 南が手牌13枚でロン

Y (未解析)

上がり時の点数や役に関する物だと思われる

Z (使用されなかった山牌)

ゲーム終了時に使用されなかった山牌(ドラ、裏ドラ等も含める)
各牌は一文字に置き換えたもの
順番はドラ牌が後の方になるようにする

N (各プレイヤー名)

プレイヤーの位置が下_右_上_左の順に_区切りし、
各プレイヤーの名前を記入したもの

下プレイヤー_右プレイヤー_上プレイヤー_左プレイヤー