点数計算(役・符・点数)

GET/api/v1/score

和了形から役・翻・符(内訳つき)・点数を返す。ルールは雀天の標準(喰いタンあり・切り上げ満貫あり・数え役満なし・単独のダブル役満なし。複合役満は倍数で数える)で、応答の rules に書く。

ブラウザで試す

本番の API をそのまま呼びます。

萬子
1
1
1
筒子
1
1
1
索子
1
1
1
2
1
1
1
字牌
和了
GET /api/v1/score?tiles=234m567p23678s55s4s&win=4s&by=tsumo&riichi=true&seat=2z

パラメータ

知らないパラメータや、同じパラメータの 2 回目は誤りとして返します(書き間違いを黙って無視しないため)。

名前型説明例
tiles必須牌和了牌を含む手牌(副露を除く)。牌の書き方: 数字のあとに m(萬子)・p(筒子)・s(索子)・z(字牌。1 東 2 南 3 西 4 北 5 白 6 發 7 中)。0 は赤五(0m・0p・0s)。123m456p のようにまとめても、1m2m3m と 1 枚ずつでもよい234m567p23678s55s4s
win必須牌 1 枚和了牌(tiles に含まれている 1 枚)4s
by必須選択和了の仕方。tsumo(ツモ)か ron(ロン)tsumorontsumo
melds副露副露(鳴いた面子)。種類:牌 をカンマで区切る。種類は pon(ポン)・chi(チー)・kan(大明槓)・kakan(加槓)・ankan(暗槓)。例: pon:555z,chi:345spon:777z
riichitrue / false立直しているか省略時 falsetrue
double_riichitrue / falseダブル立直か(立直を含む)省略時 false
ippatsutrue / false一発か(立直が要る)省略時 false
haiteitrue / false最後の牌での和了か(ツモなら海底摸月、ロンなら河底撈魚)省略時 false
rinshantrue / false嶺上開花か(槓のあとのツモ)省略時 false
chankantrue / false槍槓か(加槓した牌でのロン)省略時 false
seat選択自風(1z 東〜4z 北)。1z が親1z2z3z4z省略時 1z2z
round選択場風(1z 東〜4z 北)1z2z3z4z省略時 1z
dora牌ドラ表示牌(ドラそのものではなく、表示されている牌)3p
ura牌裏ドラ表示牌(立直が要る)
honba整数0〜99本場。1 本につき 300 点(ツモは 1 人 100 点ずつ)を足す省略時 0
kyotaku整数0〜99供託の立直棒の本数。1 本 1,000 点を和了者が受け取る省略時 0

応答の例

上の例のリクエストの、実際の応答です。

リクエスト
GET https://janten.net/api/v1/score?tiles=234m567p23678s55s4s&win=4s&by=tsumo&riichi=true&seat=2z
  • ルールは雀天の標準(Mリーグに準拠)に固定です: 喰いタンあり・切り上げ満貫あり・数え役満なし(13 翻以上の通常役は三倍満)・四暗刻単騎などの単独のダブル役満なし。役満が複数そろったときは倍数で数えます(yakumanCount)。使ったルールを rules に書いて返します
  • 複数の取り方がある手は、点数が最も高い取り方を返します(高点法)
  • fuParts は符の内訳です。合計を 10 符単位に切り上げたものが fu(最低 30 符)。平和ツモは 20 符、七対子は 25 符の 1 項目。役満は符を数えないので fu・fuParts とも null です
  • points.base は本場・供託を除いた点、points.total は和了者が受け取る点です。本場は 1 本 300 点(ツモは 1 人 100 点ずつ)、供託は 1 本 1,000 点を足します
  • 支払いはロンなら ron、子のツモは tsumo.dealer・tsumo.nonDealer、親のツモは tsumo.each です
  • 天和・地和は扱いません(配牌からの状況を受け取らないため)
200 application/json
{
  "han": 4,
  "fu": 20,
  "yaku": [
    { "id": "riichi", "name": "立直", "han": 1 },
    { "id": "menzen_tsumo", "name": "門前清自摸和", "han": 1 },
    { "id": "pinfu", "name": "平和", "han": 1 },
    { "id": "tanyao", "name": "断么九", "han": 1 }
  ],
  "fuParts": [{ "id": "pinfu_tsumo", "name": "平和ツモ", "fu": 20 }],
  "limit": null,
  "points": {
    "base": 5200,
    "total": 5200,
    "tsumo": { "dealer": 2600, "nonDealer": 1300 },
    "label": "1300-2600"
  },
  "rules": {
    "kuitan": true,
    "kiriageMangan": true,
    "kazoeYakuman": false,
    "doubleYakuman": false,
    "compositeYakuman": true
  }
}

役の id

役は名前(ドラ2・自風(東) のように計算で変わる)とは別に、変わらない id で返します。一度公開した id は変えません。

id役翻
riichi立直1
double_riichiダブル立直2
ippatsu一発1
menzen_tsumo門前清自摸和1
tanyao断么九1
pinfu平和1
iipeikou一盃口1
ryanpeikou二盃口3
round_wind場風(東・南・西・北)1
seat_wind自風(東・南・西・北)1
haku白1
hatsu發1
chun中1
ittsu一気通貫2(鳴き 1)
sanshoku_doujun三色同順2(鳴き 1)
sanshoku_doukou三色同刻2
toitoi対々和2
sankantsu三槓子2
sanankou三暗刻2
shousangen小三元2
honitsu混一色3(鳴き 2)
chinitsu清一色6(鳴き 5)
honroutou混老頭2
chanta混全帯么九2(鳴き 1)
junchan純全帯么九3(鳴き 2)
chiitoitsu七対子2
haitei海底摸月1
houtei河底撈魚1
rinshan嶺上開花1
chankan槍槓1
doraドラ(枚数を名前に付ける)枚数
aka_dora赤ドラ枚数
ura_dora裏ドラ枚数
tenhou天和役満
chiihou地和役満
suukantsu四槓子役満
kokushi国士無双役満
kokushi_13国士無双十三面役満
suuankou四暗刻役満
suuankou_tanki四暗刻単騎役満
daisangen大三元役満
tsuuiisou字一色役満
chinroutou清老頭役満
ryuuiisou緑一色役満
daisuushii大四喜役満
shousuushii小四喜役満
chuuren九蓮宝燈役満
junsei_chuuren純正九蓮宝燈役満

誤りの応答

RFC 9457 の application/problem+json で返します。param と position(何文字目か)で場所を示します。

type状態いつ
https://janten.net/api#error-invalid-parameter400牌の書き方の誤り・和了牌が手牌に無い・手牌+副露 × 3 が 14 枚でない・副露の形の誤り・同じ牌 5 枚以上
https://janten.net/api#error-not-winning-hand422和了の形になっていない(応答の shanten に向聴数)
https://janten.net/api#error-no-yaku422和了の形だが役が無い(ドラだけ)
https://janten.net/api#error-inconsistent-situation422鳴いた手で立直・立直なしの一発や裏ドラ・ロンの嶺上開花・ツモの槍槓・河底と槍槓・一発と嶺上開花など
https://janten.net/api#error-rate-limited429IP ごとに 1 分 60 回を超えた