;================================================================
; mahjong/mahjong_hand 麻将游戏 手牌算法相关
; check_others_discard.erb 自家摸牌 判断是否可以操作
;================================================================


;;;判断是否能主动流局
;;;（九种九牌 Kyuushu kyuuhai）
;;;- int seat 座位
;;;@return 1能 0不能
@mj_can_ryuukyoku(seat)
#FUNCTION
    #DIM seat
    #DIM DYNAMIC can_ryuukyoku
    SIF mj_count_hand(seat) % 3 != 2
        RETURNF 0
    RETURNF MJ_DISCARD_PILE:seat:0 == "" && mj_count_yaochuu(mj_get_hand_code(seat)) >= 9


;;;判断是否能自摸
;;;- int seat 座位
;;;@return 1能 0不能
@mj_can_tsumo(seat)
#FUNCTION
    #DIM seat
    #DIM DYNAMIC can_tsumo
    SIF mj_count_hand(seat) % 3 != 2
        RETURNF 0
    can_tsumo = mj_agari(mj_get_hand_code(seat))
    RETURNF can_tsumo


;;;判断是否立直
;;;- int seat 座位
;;;@return 1能 0不能
@mj_can_riichi(seat)
#FUNCTION
    #DIM seat
    #DIM DYNAMIC can_riichi
    SIF mj_count_hand(seat) % 3 != 2
        RETURNF 0
    ;TODO 判断 can_riichi
    ;    1. 打掉任意一张可以听牌
    ;    2. 计算向听数
    ;    3. 检查副露情况，立直是兼容暗杠的（只有暗杠仍然算门前清），既可以先立直再暗杠，也可以先暗杠再立直
    ; 立直之后就不能鸣别家的牌了
    RETURNF can_riichi


;;;判断是否能杠（暗杠/加杠）
;;;- int seat 座位
;;;@return 1暗杠 2加杠 0不能杠
@mj_can_kan(seat)
#FUNCTION
    #DIM seat
    #DIM DYNAMIC can_kan
    SIF mj_count_hand(seat) % 3 != 2
        RETURNF 0
    ;TODO 判断 can_kan
    ;    1. 暗杠 - 手里有四张一样的牌
    ;    2. 加杠 - 副露区有刻子 手里拿到第四张
    ; 考虑有没有必要兼容「手里攒 3 个暗杠」的神经病打法
    RETURNF can_kan
