しょんぼり技術メモ

まいにちがしょんぼり

MahjongFS -Mahjong in FUSE-

イメージ


※アイコンはhttp://www.vector.co.jp/soft/win95/amuse/se102669.htmlからお借りしました。ありがとうございます。

※妄想です。誰か動くもの作ってくださいw

概要

FUSE(Filesystem in USEr space)、特にそのWindows実装であるDokanを利用し、麻雀をファイルシステムで実現する。
麻雀におけるあらゆる操作は、ファイル操作という形で実現される。

仕様

ファイルシステムとして、次のような階層・ファイル構造をもつ。

\
│  begin.bat                 ←ゲーム開始
│  to_next.bat               ←次局へ
│
├─info                    ←全体の情報を格納するディレクトリ
│      ba.txt                ←場の情報(何場、何局、何本場)
│      dora1_s2.ico          ←ドラ表示牌
│      dora2_p5.ico          ←カンドラ表示牌
│      score.txt             ←全員の点数
│      result.txt            ←局終了時の情報(和了の牌姿、役、点数など)
│
├─kamicha                 ←上家ディレクトリ
│      01_x3_sha.ico         ←捨牌1牌目
│      02_y1_haku.ico        ←捨牌2牌目
│      03_y1_haku.ico        ←捨牌3牌目
│      04_x4_pe.ico          ←捨牌4牌目
│      05_x1_ton_naki.ico    ←捨牌5牌目(他家に鳴かれた)
│
├─me                      ←自分の手牌ディレクトリ
│  │  m1.ico                ← 一萬
│  │  m2.ico                ← 二萬
│  │  m3_1.ico              ← 三萬
│  │  m3_2.ico              ← 三萬
│  │  m3_3.ico              ← 三萬
│  │  p1.ico                ← 一筒
│  │  p2.ico                ← 二筒
│  │  p3.ico                ← 三筒
│  │  s1_chi_s1s2s3.ico     ← 一索(1-2-3でチーしたもの)
│  │  s2_chi_s1s2s3.ico     ← 二索
│  │  s3_chi_s1s2s3.ico     ← 三索
│  │  y1_haku_1.ico         ← 白
│  │  y1_haku_2.ico         ← 白
│  │  z_tsumo_y1_haku_3.ico ← 白
│  │  z_z_tsumo.bat         ← ツモ上がり実行
│  │  _last.txt             ← この巡の他家の動作内容
│  │
│  └─sute                ←自分の捨牌ディレクトリ
│          01_y3_chun.ico
│          02_x3_sha.ico
│
├─shimocha                ←下家ディレクトリ(構成は上家と同じ)
└─toimen                  ←対面ディレクトリ(構成は上家と同じ)
ゲームの開始

ゲームを開始するには、\begin.bat を実行する。
起家決めが自動的に行われ、東一局目が自動的に開始される。

牌表現

各牌は、牌画を格納した画像ファイルとして表現される。
その属性はファイル名で表現され、次のようなルールで記述される。

  • 牌の種類をプレフィクスで示す。
萬子="m", 筒子="p", 索子="s", 風牌="x", 三元牌="y"
  • 数牌はその数字を、字牌はその種類の牌における登場順と牌の名前を、プレフィクスに続ける。
一萬="m1", 東="x1_ton", 北="x4_pe", 白="y1_haku", 中="y3_chun"
  • 拡張子としてその画像形式を示す物を付与する。
一萬="m1.ico", 東="x1_ton.ico", 中="y3_chun.ico"
牌姿表現

自分の手牌は、\me ディレクトリに格納される。

同一ディレクトリ内に同一牌が存在する場合、ファイル名の衝突が発生する。そこで、["牌表現_n" | n=1,2,3...]のように、連番を付与する。

例:

 ... s1.ico s2.ico s3_1.ico s3_2.ico ... 

自分の巡でツモした牌は、["z_tsumo_牌表現"]というファイル名で表現される。

例:

 ... y2_hatsu.ico z_tsumo_y2_hatsu.ico 
捨牌

自分の巡で牌を捨てる場合には、\me にある牌姿を示すファイルを削除する。

河表現

各家の捨牌は、\直下の{me\sute, kamicha, toimen, shimocha}に格納される。
n番目に捨てられた牌は、["n_牌表現" | n=1,2,3... ただし2桁でゼロフィル]というファイル名で表現される。

ポン・カン・チー・ロン・リーチなど

鳴きやリーチなどは、\me\z_z_{pon, kan, chi, ron, reach}.bat を実行することで行われる。
特に、鳴きが可能な場合にそれを行わない場合には、\me\z_z_ignore.bat を実行する。
これらのファイルは必要に応じて作成される。

副露表現

副露した場合、手牌においては["牌表現_副露種類_構成"]のようにして表現する。
副露種類は{pon, chi, kan}で、構成はその副露を構成する牌表現をつなげたもの(ただし重複排除のための_n表現は不要)とする。

例:

 ... s3_chi_s3s4s5.ico s4_chi_s3s4s5.ico s5_chi_s3s4s5.ico ... 
局進行

自分の何らかの処理が必要になるまで(捨牌選択、ポン・カン・チー可能状態など)自動的に進行する。
その巡に起こったイベント(誰が何を捨てた、何を鳴いたなど)は、\me\_last.txt に記録される。
捨牌選択状態では、自動的にその巡における自分のツモ牌が作成される。
ポン・カン・チーなどが可能な状態では、必要に応じてその処理を実行するためのbatファイルが作成される。
いずれの場合も、捨牌選択あるいはポンなどの動作や無視などの動作が行われるまで、ゲームは進行しない。

和了

自分による和了の場合は、その結果が\info\result.txtに書き込まれる。
他家による和了の場合、それに加えて \me\___SEE_RESULT.txt が作成され、result.txtの内容が書き込まれる。
これにより、自巡なのか局が終了したのかを区別することができる。
また、流局時も同様とする。

明示的な次局への遷移

局が終了した場合、\to_next.bat が作成される。このファイルを実行することにより、明示的に次の局が始まる。

終局

終局時は、和了時と同様の処理が行われる。終局した旨がresult.txtに書き込まれる。

処理の結果

プレイヤーによる動作の結果は、バッチファイルの実行結果という形式で出力することが可能である。
通常は0バイトデータとして見せておき、ロン可能時に z_z_ron.bat が実行された場合に、ロン処理を行った上で次のような内容をz_z_ron.batに書き込むことで、結果をプレイヤーに返すことができる。

@echo off
echo "Ron: [Dora: x2 (p2)]"
echo "s1s2s3 s1s2s3 s7s8s9 [x1x1x1] x2x2"
echo "Chanta Sansyoku Hon-itsu I-pe-ko Ton Dora2"
echo " --> Baiman 18,000 from Toimen"
echo

実装

誰か作ってくれないかなぁ^p^