classDiagram
class MahjongBase {
+tid_to_sid(tile_id: int)$ int
+tid_to_code(tile_id: int)$ String
+humanize(tiles_info: Object)$
+serialize(tiles_sequence: String)$ PoolIntArray
+deserialize(tiles_bytes: PoolIntArray)$ String
+serialize_meld(melds_sequence: String)$ Array~MahjongMeld~
+deserialize_meld(melds: Array~MahjongMeld~)$ String
+new_tiles_wall(tiles_sequence: String = "")$ PoolIntArray
+deal_hand(tiles_sequence: PoolIntArray, player_seat: int, player_count: int = 4)$ Array~MahjongHand~
+get_ace_info(ace_type: ACE, kan_count: int = 0)$ Array~int~
}
class ACE {
ACE_DORA_OUTER
ACE_DORA_INNER
ACE_RINSHAN
ACE_SEAFLOOR
}
MahjongBase o-- ACE : Aggregation
class SEAT {
SEAT_EAST
SEAT_SOUTH
SEAT_WEST
SEAT_NORTH
}
MahjongBase o-- SEAT : Aggregation
class CALL {
CALL_RICHI
CALL_CHII
CALL_PON
CALL_KAN
CALL_RON
}
MahjongBase o-- CALL : Aggregation
class MahjongGame {
-player_count_limit: int
-full_tiles_wall: PoolIntArray
-remain_tiles_wall: PoolIntArray
-player_hands: Array~MahjongHand~
#kan_count: int
#discard_history: Array~PoolIntArray~
+room_rule: RULE
+player_list: Array~int~
+get_tiles_wall_md5() int
+get_ace_tiles(ace_type: ACE) Array~int~
+get_tiles_count() int
+deal_hand_to(player_seat: int) Array~MahjongHand~
+deal_a_tile_to(player_seat: int, player_count: int = 4) bool
+discard_a_tile_by(player_seat: int, tile_id: int) bool
+call_meld(player_seat: int, meld: MahjongMeld) bool
}
MahjongBase <|-- MahjongGame : Inheritance
class MahjongMeld {
#type: CALL
#have: Array~int~
#pick: Array~int~
#from: SEAT
}
MahjongBase o-- MahjongMeld : Aggregation
class MahjongHand {
-tiles: PoolIntArray
#melds: Array~MahjongMeld~
+get_tiles() Array~int~
+draw(tile_id: int) bool
+discard(tile_id: int) bool
+is_full() bool
+can_win(win_tile_id: int = -1) bool
+get_call_options(pick_tile_id: int) Array~MahjongMeld~
}
MahjongBase o-- MahjongHand : Aggregation
MahjongHand "1" --> "*" MahjongMeld : own
class RULE {
RULE_4P_ONLY_EAST
RULE_4P_ONLY_SOUTH
RULE_4P_EAST_SOUTH
RULE_3P_ONLY_EAST
RULE_3P_ONLY_SOUTH
}
MahjongGame o-- RULE : Aggregation