Skip to content

Majiang.Shoupai

Satoshi Kobayashi edited this page Dec 4, 2021 · 11 revisions

手牌を表現するクラス

クラスメソッド

static valid_pai()

p として正しければそのまま返す。正しくなければ null を返す。 _ は正しいと見なさない。

static valid_mianzi()

m面子 として正しければ正規化して返す。正しくなければ null を返す。

Majiang.Shoupai.valid_mianzi('m231-') == 'm1-23'

constructor()

  • qipai = [] - の配列

qipai (配牌)からインスタンスを生成する。qipai の要素数は13でなくてもよい。

static fromString()

paistr からインスタンスを生成する。手牌が14枚を超える牌姿の場合、超える分が純手牌(副露面子以外の打牌可能な手牌のこと)から取り除かれる。

インスタンス変数

_bingpai

以下の構成で純手牌の各牌の枚数を示す。添字0は赤牌の枚数。

{
    _: 0,                       // 伏せられた牌
    m: [0,0,0,0,0,0,0,0,0,0],   // 萬子
    p: [0,0,0,0,0,0,0,0,0,0],   // 筒子
    s: [0,0,0,0,0,0,0,0,0,0],   // 索子
    z: [0,0,0,0,0,0,0,0],       // 字牌
}

_fulou

副露牌を示す 面子 の配列。副露した順に配列する。暗槓子も含むので _fulou.length == 0 がメンゼンを示す訳ではないことに注意。

_zimo

手牌が打牌可能な場合、最後にツモしてきた あるいは最後に副露した 面子。 打牌可能でない場合は null。

_lizhi

リーチ後に true になる。

インスタンスメソッド

toString()

牌姿 に変換する。

clone()

複製する。

fromString()

  • paistr - 牌姿
  • 返り値 - this

paistr で手牌を置き換える。

zimo()

  • p -
  • check = true - boolean
  • 返り値 - this

p をツモる。check が真の場合、多牌となるツモは例外を発生する。

dapai()

  • p -
  • check = true - boolean
  • 返り値 - this

p を打牌する。手牌にない牌あるいは _ の打牌は例外を発生する。 check が真の場合、少牌となる打牌も例外を発生する。 リーチ後の手出しはチェックしない。

fulou()

  • m - 面子
  • check = true - boolean
  • 返り値 - this

m で副露する。手牌にない構成での副露は例外を発生する。 check が真の場合、多牌となる副露も例外を発生する。 リーチ後の副露はチェックしない。

gang()

  • m - 面子
  • check = true - boolean
  • 返り値 - this

m で暗槓もしくは加槓する。手牌にない構成での槓は例外を発生する。 check が真の場合、少牌となる槓も例外を発生する。 リーチ後の槓の正当性はチェックしない。

get menqian()

  • 返り値 - boolean

メンゼンの場合、true を返す。

get lizhi()

  • 返り値 - boolean

リーチ後は true を返す。

get_dapai()

  • check = true - boolean
  • 返り値 - の配列

打牌可能な牌の一覧を返す。赤牌およびツモ切りは別の牌として区別する。リーチ後はツモ切りのみ返す。 check が真の場合、喰い替えとなる打牌は含まない。 打牌すると少牌となる場合は null を返す。

get_chi_mianzi()

  • p -
  • check = true - boolean
  • 返り値 - 面子 の配列

p でチー可能な面子の一覧を返す。赤牌のありなしは別の面子として区別する。リーチ後は空配列を返す。 check が真の場合、喰い替えが必ず起きる面子は含まない。 チーすると多牌になる場合は null を返す。

get_peng_mianzi()

p でポン可能な面子の一覧を返す。赤牌のありなしは別の面子として区別する。リーチ後は空配列を返す。 ポンすると多牌になる場合は null を返す。

get_gang_mianzi()

p が指定された場合、それで大明槓可能な面子の一覧を返す。リーチ後は空配列を返す。 p が指定されない場合は加槓あるいは暗槓可能な面子の一覧を返す。リーチ後は送り槓は含まない。 カンすると少牌あるいは多牌になる場合は null を返す。