Riichi.Hand (riichi v0.2.0)

Copy Markdown View Source

Summary

Types

discard_error()

@type discard_error() :: :tile_not_in_hand | :tsumogiri_mismatch

error()

@type error() :: :already_has_draw | :missing_pon_for_kakan | discard_error()

t()

@type t() :: %Riichi.Hand{
  draw: (Riichi.Tile.t() | nil) | nil,
  melds: [Riichi.Hand.Meld.t()],
  tiles: [Riichi.Tile.t()] | nil
}

Functions

ankan_candidates(hand)

@spec ankan_candidates(t()) :: [
  {Riichi.Tile.t(), Riichi.Tile.t(), Riichi.Tile.t(), Riichi.Tile.t()}
]

chii_candidates(hand, for_tile)

@spec chii_candidates(t(), Riichi.Tile.t()) :: [{Riichi.Tile.t(), Riichi.Tile.t()}]

daiminkan_candidates(hand, for_tile)

@spec daiminkan_candidates(t(), Riichi.Tile.t()) :: [
  {Riichi.Tile.t(), Riichi.Tile.t(), Riichi.Tile.t()}
]

discard(hand, tile, tsumogiri?)

@spec discard(t(), Riichi.Tile.t(), boolean()) ::
  {:ok, t()} | {:error, discard_error()}

draw(hand, tile)

@spec draw(t(), Riichi.Tile.t()) :: {:ok, t()} | {:error, :already_has_draw}

is_open?(hand)

@spec is_open?(t()) :: boolean()

kakan_candidates(hand)

@spec kakan_candidates(t()) :: [{Riichi.Tile.t(), Riichi.Hand.Meld.Pon.t()}]

make_ankan(hand, meld)

@spec make_ankan(t(), Riichi.Hand.Meld.Ankan.t()) :: {:ok, t()} | {:error, atom()}

make_chii(hand, meld)

@spec make_chii(t(), Riichi.Hand.Meld.Chii.t()) ::
  {:ok, t()} | {:error, :tile_not_in_hand}

make_daiminkan(hand, meld)

@spec make_daiminkan(t(), Riichi.Hand.Meld.Daiminkan.t()) ::
  {:ok, t()} | {:error, :tile_not_in_hand}

make_kakan(hand, meld)

@spec make_kakan(t(), Riichi.Hand.Meld.Kakan.t()) ::
  {:ok, t()} | {:error, :missing_pon_for_kakan}

make_pon(hand, meld)

@spec make_pon(t(), Riichi.Hand.Meld.Pon.t() | Riichi.Hand.Meld.Pon.t()) ::
  {:ok, t()} | {:error, :tile_not_in_hand}

new(tiles)

@spec new([Riichi.Tile.t()]) :: t()

pon_candidates(hand, for_tile)

@spec pon_candidates(t(), Riichi.Tile.t()) :: [{Riichi.Tile.t(), Riichi.Tile.t()}]

take_tiles(hand, tile, ignore_aka_flag?)

@spec take_tiles(t(), Riichi.Tile.t(), boolean()) :: [Riichi.Tile.t()]