@pai-forge/riichi-mahjong 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +738 -21
- package/dist/index.js +2233 -53
- package/dist/index.js.map +1 -0
- package/package.json +9 -4
- package/dist/core/dora.d.ts +0 -14
- package/dist/core/dora.js +0 -71
- package/dist/core/hai.d.ts +0 -30
- package/dist/core/hai.js +0 -78
- package/dist/core/machi.d.ts +0 -11
- package/dist/core/machi.js +0 -58
- package/dist/core/mentsu.d.ts +0 -26
- package/dist/core/mentsu.js +0 -87
- package/dist/core/tehai.d.ts +0 -42
- package/dist/core/tehai.js +0 -156
- package/dist/errors.d.ts +0 -83
- package/dist/errors.js +0 -117
- package/dist/features/machi/index.d.ts +0 -9
- package/dist/features/machi/index.js +0 -48
- package/dist/features/machi/types.d.ts +0 -1
- package/dist/features/machi/types.js +0 -1
- package/dist/features/parser/index.d.ts +0 -19
- package/dist/features/parser/index.js +0 -28
- package/dist/features/parser/mspz.d.ts +0 -85
- package/dist/features/parser/mspz.js +0 -365
- package/dist/features/points/constants.d.ts +0 -27
- package/dist/features/points/constants.js +0 -30
- package/dist/features/points/index.d.ts +0 -21
- package/dist/features/points/index.js +0 -174
- package/dist/features/points/lib/fu/constants.d.ts +0 -37
- package/dist/features/points/lib/fu/constants.js +0 -45
- package/dist/features/points/lib/fu/index.d.ts +0 -11
- package/dist/features/points/lib/fu/index.js +0 -23
- package/dist/features/points/lib/fu/lib/chiitoitsu.d.ts +0 -5
- package/dist/features/points/lib/fu/lib/chiitoitsu.js +0 -17
- package/dist/features/points/lib/fu/lib/kokushi.d.ts +0 -6
- package/dist/features/points/lib/fu/lib/kokushi.js +0 -18
- package/dist/features/points/lib/fu/lib/mentsu.d.ts +0 -11
- package/dist/features/points/lib/fu/lib/mentsu.js +0 -122
- package/dist/features/points/lib/fu/types.d.ts +0 -55
- package/dist/features/points/lib/fu/types.js +0 -1
- package/dist/features/points/types.d.ts +0 -27
- package/dist/features/points/types.js +0 -1
- package/dist/features/score/constants.d.ts +0 -27
- package/dist/features/score/constants.js +0 -30
- package/dist/features/score/index.d.ts +0 -45
- package/dist/features/score/index.js +0 -207
- package/dist/features/score/lib/fu/constants.d.ts +0 -37
- package/dist/features/score/lib/fu/constants.js +0 -45
- package/dist/features/score/lib/fu/index.d.ts +0 -11
- package/dist/features/score/lib/fu/index.js +0 -23
- package/dist/features/score/lib/fu/lib/chiitoitsu.d.ts +0 -5
- package/dist/features/score/lib/fu/lib/chiitoitsu.js +0 -17
- package/dist/features/score/lib/fu/lib/kokushi.d.ts +0 -6
- package/dist/features/score/lib/fu/lib/kokushi.js +0 -18
- package/dist/features/score/lib/fu/lib/mentsu.d.ts +0 -11
- package/dist/features/score/lib/fu/lib/mentsu.js +0 -136
- package/dist/features/score/lib/fu/types.d.ts +0 -56
- package/dist/features/score/lib/fu/types.js +0 -1
- package/dist/features/score/types.d.ts +0 -78
- package/dist/features/score/types.js +0 -22
- package/dist/features/shanten/index.d.ts +0 -16
- package/dist/features/shanten/index.js +0 -25
- package/dist/features/shanten/logic/chiitoitsu.d.ts +0 -8
- package/dist/features/shanten/logic/chiitoitsu.js +0 -36
- package/dist/features/shanten/logic/kokushi.d.ts +0 -16
- package/dist/features/shanten/logic/kokushi.js +0 -48
- package/dist/features/shanten/logic/mentsu-te.d.ts +0 -8
- package/dist/features/shanten/logic/mentsu-te.js +0 -129
- package/dist/features/yaku/factory.d.ts +0 -13
- package/dist/features/yaku/factory.js +0 -19
- package/dist/features/yaku/index.d.ts +0 -21
- package/dist/features/yaku/index.js +0 -59
- package/dist/features/yaku/lib/definitions/chiitoitsu.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/chiitoitsu.js +0 -12
- package/dist/features/yaku/lib/definitions/chinitsu.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/chinitsu.js +0 -40
- package/dist/features/yaku/lib/definitions/chinroutou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/chinroutou.js +0 -21
- package/dist/features/yaku/lib/definitions/chuuren-poutou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/chuuren-poutou.js +0 -69
- package/dist/features/yaku/lib/definitions/daisangen.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/daisangen.js +0 -26
- package/dist/features/yaku/lib/definitions/daisuushii.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/daisuushii.js +0 -32
- package/dist/features/yaku/lib/definitions/honchan.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/honchan.js +0 -29
- package/dist/features/yaku/lib/definitions/honitsu.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/honitsu.js +0 -40
- package/dist/features/yaku/lib/definitions/honroutou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/honroutou.js +0 -33
- package/dist/features/yaku/lib/definitions/iipeikou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/iipeikou.js +0 -46
- package/dist/features/yaku/lib/definitions/ikkitsuukan.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/ikkitsuukan.js +0 -56
- package/dist/features/yaku/lib/definitions/index.d.ts +0 -30
- package/dist/features/yaku/lib/definitions/index.js +0 -90
- package/dist/features/yaku/lib/definitions/junchan.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/junchan.js +0 -25
- package/dist/features/yaku/lib/definitions/kokushi.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/kokushi.js +0 -12
- package/dist/features/yaku/lib/definitions/menzen-tsumo.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/menzen-tsumo.js +0 -8
- package/dist/features/yaku/lib/definitions/pinfu.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/pinfu.js +0 -40
- package/dist/features/yaku/lib/definitions/ryanpeikou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/ryanpeikou.js +0 -33
- package/dist/features/yaku/lib/definitions/ryuuiisou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/ryuuiisou.js +0 -43
- package/dist/features/yaku/lib/definitions/sanankou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/sanankou.js +0 -49
- package/dist/features/yaku/lib/definitions/sankantsu.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/sankantsu.js +0 -18
- package/dist/features/yaku/lib/definitions/sanshoku-doujun.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/sanshoku-doujun.js +0 -58
- package/dist/features/yaku/lib/definitions/sanshoku-doukou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/sanshoku-doukou.js +0 -53
- package/dist/features/yaku/lib/definitions/shousangen.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/shousangen.js +0 -28
- package/dist/features/yaku/lib/definitions/shousuushii.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/shousuushii.js +0 -34
- package/dist/features/yaku/lib/definitions/suuankou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/suuankou.js +0 -63
- package/dist/features/yaku/lib/definitions/suukantsu.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/suukantsu.js +0 -18
- package/dist/features/yaku/lib/definitions/tanyao.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/tanyao.js +0 -23
- package/dist/features/yaku/lib/definitions/toitoi.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/toitoi.js +0 -16
- package/dist/features/yaku/lib/definitions/tsuuiisou.d.ts +0 -2
- package/dist/features/yaku/lib/definitions/tsuuiisou.js +0 -35
- package/dist/features/yaku/lib/definitions/yakuhai.d.ts +0 -4
- package/dist/features/yaku/lib/definitions/yakuhai.js +0 -21
- package/dist/features/yaku/lib/index.d.ts +0 -1
- package/dist/features/yaku/lib/index.js +0 -1
- package/dist/features/yaku/lib/structures/chiitoitsu.d.ts +0 -6
- package/dist/features/yaku/lib/structures/chiitoitsu.js +0 -38
- package/dist/features/yaku/lib/structures/index.d.ts +0 -10
- package/dist/features/yaku/lib/structures/index.js +0 -17
- package/dist/features/yaku/lib/structures/kokushi.d.ts +0 -6
- package/dist/features/yaku/lib/structures/kokushi.js +0 -43
- package/dist/features/yaku/lib/structures/mentsu-te.d.ts +0 -24
- package/dist/features/yaku/lib/structures/mentsu-te.js +0 -127
- package/dist/features/yaku/types.d.ts +0 -121
- package/dist/features/yaku/types.js +0 -1
- package/dist/features/yaku/utils.d.ts +0 -19
- package/dist/features/yaku/utils.js +0 -34
- package/dist/types.d.ts +0 -290
- package/dist/types.js +0 -97
- package/dist/utils/assertions.d.ts +0 -22
- package/dist/utils/assertions.js +0 -33
- package/dist/utils/test-helpers.d.ts +0 -55
- package/dist/utils/test-helpers.js +0 -124
package/dist/index.d.ts
CHANGED
|
@@ -1,21 +1,738 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 基本的な面子構造 (ジェネリック)
|
|
3
|
+
*
|
|
4
|
+
* 牌の型をジェネリクス `T` で抽象化することで、以下の両方のユースケースに対応します:
|
|
5
|
+
* 1. `HaiKindId`: MPSZ形式の手牌をもとにシャンテン計算を行うなど、牌の種類のみに関心がある場合(抽象的な計算)。
|
|
6
|
+
* 2. `HaiId`: 実際のゲームの牌譜など、牌の物理的なIDを処理対象とする場合(具象的な計算)。
|
|
7
|
+
*/
|
|
8
|
+
declare interface BaseMentsu<T extends HaiKindId | HaiId> {
|
|
9
|
+
readonly type: MentsuType;
|
|
10
|
+
/**
|
|
11
|
+
* 構成する牌のリスト。
|
|
12
|
+
*
|
|
13
|
+
* 各面子型(Shuntsu等)において固定長タプル(例: `[T, T, T]`)として再定義することで、
|
|
14
|
+
* 面子の種類ごとの正しい牌枚数(順子なら3枚、槓子なら4枚など)を型レベルで強制します。
|
|
15
|
+
*/
|
|
16
|
+
hais: readonly T[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 手牌とコンテキストから点数を計算する(公開API)
|
|
21
|
+
*
|
|
22
|
+
* 手牌の構造解析を行い、最も高点となる解釈を採用して点数を返します。
|
|
23
|
+
*
|
|
24
|
+
* 注: 同一手牌で「翻数が高いが符が低い解釈」と「翻数が低いが符が高い解釈」が
|
|
25
|
+
* 両立するケースは実質的に存在しないため、翻数最大の解釈を採用しています。
|
|
26
|
+
*
|
|
27
|
+
* @param tehai 手牌 (14枚)
|
|
28
|
+
* @param config 点数計算の設定 (場風、自風、ドラなど)
|
|
29
|
+
* @returns 点数計算結果
|
|
30
|
+
*/
|
|
31
|
+
export declare function calculateScoreForTehai(tehai: Tehai14, config: Readonly<ScoreCalculationConfig>): ScoreResult;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* シャンテン数を計算します。
|
|
35
|
+
* 面子手、七対子、国士無双のシャンテン数のうち最小値を返します。
|
|
36
|
+
*
|
|
37
|
+
* NOTE: 入力は必ず牌種ID (`HaiKindId`) である必要があります。
|
|
38
|
+
* 物理牌ID (`HaiId`) を持っている場合は、事前に `haiIdToKindId` で変換してください。
|
|
39
|
+
*
|
|
40
|
+
* @param tehai 手牌
|
|
41
|
+
* @returns シャンテン数
|
|
42
|
+
*/
|
|
43
|
+
export declare function calculateShanten(tehai: Tehai13, useChiitoitsu?: boolean, useKokushi?: boolean): number;
|
|
44
|
+
|
|
45
|
+
declare interface ChiitoitsuHouraStructure {
|
|
46
|
+
readonly type: "Chiitoitsu";
|
|
47
|
+
readonly pairs: readonly [
|
|
48
|
+
Toitsu,
|
|
49
|
+
Toitsu,
|
|
50
|
+
Toitsu,
|
|
51
|
+
Toitsu,
|
|
52
|
+
Toitsu,
|
|
53
|
+
Toitsu,
|
|
54
|
+
Toitsu
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* チョンボ(錯和)の基底エラークラス
|
|
60
|
+
*
|
|
61
|
+
* 不正な和了宣言に関するエラーの基底クラス。
|
|
62
|
+
* 具体的なチョンボ種別(役なし、フリテン等)はサブクラスで定義する。
|
|
63
|
+
*/
|
|
64
|
+
export declare class ChomboError extends MahjongError {
|
|
65
|
+
/**
|
|
66
|
+
*
|
|
67
|
+
*/
|
|
68
|
+
constructor(message?: string);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* 手牌構造と和了牌から待ちの形を判定する
|
|
73
|
+
* @param hand 分解された手牌構造
|
|
74
|
+
* @param agariHai 和了牌
|
|
75
|
+
* @returns 待ちの形(判定できない、または Shanpon などの場合は undefined)
|
|
76
|
+
*/
|
|
77
|
+
export declare function classifyMachi(hand: HouraStructure, agariHai: HaiKindId): MachiType | undefined;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 完成面子 (CompletedMentsu)
|
|
81
|
+
* - 順子 (Shuntsu)
|
|
82
|
+
* - 刻子 (Koutsu)
|
|
83
|
+
* - 槓子 (Kantsu)
|
|
84
|
+
*/
|
|
85
|
+
export declare type CompletedMentsu<T extends HaiKindId | HaiId = HaiKindId> = Shuntsu<T> | Koutsu<T> | Kantsu<T>;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 手牌に含まれるドラの数を数える
|
|
89
|
+
* @param tehai 手牌
|
|
90
|
+
* @param indicators ドラ表示牌のリスト
|
|
91
|
+
* @returns ドラの総数
|
|
92
|
+
*/
|
|
93
|
+
export declare function countDora(tehai: Tehai, indicators: readonly HaiKindId[]): number;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* 手牌の構造役を検出する
|
|
97
|
+
*
|
|
98
|
+
* @param tehai 判定対象の手牌
|
|
99
|
+
* @param agariHai 和了牌
|
|
100
|
+
* @returns 成立した役と翻数のリスト(最も高得点となる解釈の結果)
|
|
101
|
+
*/
|
|
102
|
+
export declare function detectYaku(tehai: Tehai14, agariHai: HaiKindId, bakaze?: HaiKindId, jikaze?: HaiKindId, doraMarkers?: readonly HaiKindId[], uraDoraMarkers?: readonly HaiKindId[], isTsumo?: boolean): YakuResult;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* 牌IDが重複している場合のエラー
|
|
106
|
+
* (物理的な牌IDは一意である必要があります)
|
|
107
|
+
*/
|
|
108
|
+
export declare class DuplicatedHaiIdError extends MahjongError {
|
|
109
|
+
/**
|
|
110
|
+
*
|
|
111
|
+
*/
|
|
112
|
+
constructor(message?: string);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* 拡張MSPZ形式の文字列
|
|
117
|
+
* 通常のMSPZに加え、`[...]` (副露) や `(...)` (暗槓) を含むことができます。
|
|
118
|
+
*/
|
|
119
|
+
declare type ExtendedMspzString = string & {
|
|
120
|
+
readonly __brand: "ExtendedMspzString";
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* 符 (Fu)
|
|
125
|
+
*
|
|
126
|
+
* 和了時の手牌構成から算出される符の値。
|
|
127
|
+
*
|
|
128
|
+
* - 20: 副底(基本符)
|
|
129
|
+
* - 25: 七対子専用
|
|
130
|
+
* - 30〜110: 10符刻みの値
|
|
131
|
+
*/
|
|
132
|
+
export declare type Fu = 20 | 25 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | 110;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* 副露 (Furo)
|
|
136
|
+
*
|
|
137
|
+
* 面子に対する「鳴き」のメタ情報。
|
|
138
|
+
* ここでは副露を「自分の手牌が不足している面子を、他家が捨てた牌を取って完成させる行為」と定義し、
|
|
139
|
+
* 暗槓(自力で4枚揃える行為)はここには含めない。
|
|
140
|
+
*
|
|
141
|
+
* 構成する牌自体はここには含めず、この型を持つ親(Mentsuなど)が保持することを想定する。
|
|
142
|
+
*/
|
|
143
|
+
export declare type Furo = {
|
|
144
|
+
readonly type: typeof FuroType.Chi;
|
|
145
|
+
readonly from: Tacha;
|
|
146
|
+
} | {
|
|
147
|
+
readonly type: typeof FuroType.Pon;
|
|
148
|
+
readonly from: Tacha;
|
|
149
|
+
} | {
|
|
150
|
+
readonly type: typeof FuroType.Daiminkan;
|
|
151
|
+
readonly from: Tacha;
|
|
152
|
+
} | {
|
|
153
|
+
readonly type: typeof FuroType.Kakan;
|
|
154
|
+
readonly from: Tacha;
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* 副露種別 (FuroType)
|
|
159
|
+
*/
|
|
160
|
+
export declare const FuroType: {
|
|
161
|
+
readonly Chi: "Chi";
|
|
162
|
+
readonly Pon: "Pon";
|
|
163
|
+
readonly Daiminkan: "Daiminkan";
|
|
164
|
+
readonly Kakan: "Kakan";
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export declare type FuroType = (typeof FuroType)[keyof typeof FuroType];
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* ドラ表示牌から次の牌(ドラ)を求める
|
|
171
|
+
* @param indicator ドラ表示牌のID (HaiKindId)
|
|
172
|
+
* @returns ドラ牌のID (HaiKindId)
|
|
173
|
+
*/
|
|
174
|
+
export declare function getDoraNext(indicator: HaiKindId): HaiKindId;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* 支払い情報から和了者が受け取る総点数を計算する
|
|
178
|
+
*/
|
|
179
|
+
export declare function getPaymentTotal(payment: Readonly<Payment>): number;
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* 手牌の受け入れ(有効牌)を計算する。
|
|
183
|
+
* 今回は面子手のみを対象とし、七対子や国士無双は考慮しない。
|
|
184
|
+
*
|
|
185
|
+
* @param tehai 手牌 (13枚)
|
|
186
|
+
* @returns シャンテン数を進める牌のリスト
|
|
187
|
+
*/
|
|
188
|
+
export declare function getUkeire(tehai: Tehai13): HaiKindId[];
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* 牌種IDの定数セット
|
|
192
|
+
*
|
|
193
|
+
* - 0-8: 萬子 (ManZu)
|
|
194
|
+
* - 9-17: 筒子 (PinZu)
|
|
195
|
+
* - 18-26: 索子 (SouZu)
|
|
196
|
+
* - 27-33: 字牌 (JiHai)
|
|
197
|
+
*/
|
|
198
|
+
declare const HAI_KIND_IDS: readonly [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33];
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* 物理的な牌の一意な識別子 (HaiId)
|
|
202
|
+
*
|
|
203
|
+
* 麻雀セットに含まれる136枚の牌それぞれに一意のIDが割り当てられます (0-135)。
|
|
204
|
+
*
|
|
205
|
+
* - 0-35: 萬子
|
|
206
|
+
* - 36-71: 筒子
|
|
207
|
+
* - 72-107: 索子
|
|
208
|
+
* - 108-135: 字牌
|
|
209
|
+
*
|
|
210
|
+
* Branded Type を使用して通常の number と区別します。
|
|
211
|
+
*/
|
|
212
|
+
export declare type HaiId = number & {
|
|
213
|
+
readonly __brand: "HaiId";
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* 物理牌IDから牌種IDを取得する
|
|
218
|
+
* 0-35: 萬子 (36枚 = 9種 * 4枚) -> 0-8
|
|
219
|
+
* 36-71: 筒子 (36枚) -> 9-17
|
|
220
|
+
* 72-107: 索子 (36枚) -> 18-26
|
|
221
|
+
* 108-135: 字牌 (28枚 = 7種 * 4枚) -> 27-33
|
|
222
|
+
*/
|
|
223
|
+
export declare function haiIdToKindId(id: HaiId): HaiKindId;
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* 牌種 (HaiKind)
|
|
227
|
+
*
|
|
228
|
+
* 牌種IDに対応する定数定義。
|
|
229
|
+
*/
|
|
230
|
+
export declare const HaiKind: {
|
|
231
|
+
readonly ManZu1: 0;
|
|
232
|
+
readonly ManZu2: 1;
|
|
233
|
+
readonly ManZu3: 2;
|
|
234
|
+
readonly ManZu4: 3;
|
|
235
|
+
readonly ManZu5: 4;
|
|
236
|
+
readonly ManZu6: 5;
|
|
237
|
+
readonly ManZu7: 6;
|
|
238
|
+
readonly ManZu8: 7;
|
|
239
|
+
readonly ManZu9: 8;
|
|
240
|
+
readonly PinZu1: 9;
|
|
241
|
+
readonly PinZu2: 10;
|
|
242
|
+
readonly PinZu3: 11;
|
|
243
|
+
readonly PinZu4: 12;
|
|
244
|
+
readonly PinZu5: 13;
|
|
245
|
+
readonly PinZu6: 14;
|
|
246
|
+
readonly PinZu7: 15;
|
|
247
|
+
readonly PinZu8: 16;
|
|
248
|
+
readonly PinZu9: 17;
|
|
249
|
+
readonly SouZu1: 18;
|
|
250
|
+
readonly SouZu2: 19;
|
|
251
|
+
readonly SouZu3: 20;
|
|
252
|
+
readonly SouZu4: 21;
|
|
253
|
+
readonly SouZu5: 22;
|
|
254
|
+
readonly SouZu6: 23;
|
|
255
|
+
readonly SouZu7: 24;
|
|
256
|
+
readonly SouZu8: 25;
|
|
257
|
+
readonly SouZu9: 26;
|
|
258
|
+
readonly Ton: 27;
|
|
259
|
+
readonly Nan: 28;
|
|
260
|
+
readonly Sha: 29;
|
|
261
|
+
readonly Pei: 30;
|
|
262
|
+
readonly Haku: 31;
|
|
263
|
+
readonly Hatsu: 32;
|
|
264
|
+
readonly Chun: 33;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
export declare type HaiKind = (typeof HaiKind)[keyof typeof HaiKind];
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* 牌種ID (HaiKindId)
|
|
271
|
+
*
|
|
272
|
+
* 麻雀の34種類の牌を一意に識別するID。
|
|
273
|
+
*/
|
|
274
|
+
export declare type HaiKindId = (typeof HAI_KIND_IDS)[number];
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* 牌種IDから数値(1-9)を取得する
|
|
278
|
+
* 字牌の場合は undefined を返す
|
|
279
|
+
*/
|
|
280
|
+
export declare function haiKindToNumber(kind: HaiKindId): number | undefined;
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* 牌種タイプ (HaiType)
|
|
284
|
+
*/
|
|
285
|
+
export declare const HaiType: {
|
|
286
|
+
readonly Manzu: "Manzu";
|
|
287
|
+
readonly Pinzu: "Pinzu";
|
|
288
|
+
readonly Souzu: "Souzu";
|
|
289
|
+
readonly Jihai: "Jihai";
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
export declare type HaiType = (typeof HaiType)[keyof typeof HaiType];
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* 役の翻数 (Hansu)
|
|
296
|
+
*
|
|
297
|
+
* 1, 2, 3, 5(流し満貫/清一色喰い下がり), 6(清一色), 13(役満), 26(ダブル役満)
|
|
298
|
+
*/
|
|
299
|
+
export declare type Hansu = 1 | 2 | 3 | 5 | 6 | 13 | 26;
|
|
300
|
+
|
|
301
|
+
declare type HouraStructure = MentsuHouraStructure | ChiitoitsuHouraStructure | KokushiHouraStructure;
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* 未完成面子 (IncompletedMentsu)
|
|
305
|
+
* - 対子 (Toitsu)
|
|
306
|
+
* - 塔子 (Tatsu)
|
|
307
|
+
*/
|
|
308
|
+
export declare type IncompletedMentsu<T extends HaiKindId | HaiId = HaiKindId> = Toitsu<T> | Tatsu<T>;
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* 牌の枚数が不正な場合のエラー
|
|
312
|
+
* (同種の牌は最大4枚までです)
|
|
313
|
+
*/
|
|
314
|
+
export declare class InvalidHaiQuantityError extends MahjongError {
|
|
315
|
+
/**
|
|
316
|
+
*
|
|
317
|
+
*/
|
|
318
|
+
constructor(message?: string);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* 文字列が拡張MSPZ形式(`[` または `(` を含み、かつ正しい書式)かどうかを判定します。
|
|
323
|
+
* @param input 判定対象の文字列
|
|
324
|
+
* @returns 拡張MSPZ形式であれば true
|
|
325
|
+
*/
|
|
326
|
+
export declare function isExtendedMspz(input: string): input is ExtendedMspzString;
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* 指定された牌が風牌かどうかを判定する。
|
|
330
|
+
*
|
|
331
|
+
* @param id 判定対象の牌種ID
|
|
332
|
+
* @returns 風牌(東・南・西・北)であれば true
|
|
333
|
+
*/
|
|
334
|
+
export declare function isKazehai(id: HaiKindId): id is Kazehai;
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* 手牌が門前(メンゼン)かどうかを判定する。
|
|
338
|
+
*
|
|
339
|
+
* 門前の定義:
|
|
340
|
+
* - 明刻、明順、明槓などの「晒し」が含まれていないこと。
|
|
341
|
+
* - 暗槓は門前として扱う。
|
|
342
|
+
*
|
|
343
|
+
* @param tehai 判定対象の手牌
|
|
344
|
+
* @returns 門前であれば true、そうでなければ false
|
|
345
|
+
*/
|
|
346
|
+
export declare function isMenzen(tehai: Tehai14): boolean;
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* 文字列が標準的なMSPZ形式(拡張記法を含まず、かつ正しい書式)かどうかを判定します。
|
|
350
|
+
* @param input 判定対象の文字列
|
|
351
|
+
* @returns 標準MSPZ形式であれば true
|
|
352
|
+
*/
|
|
353
|
+
export declare function isMspz(input: string): input is MspzString;
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* 数牌かどうかを判定する
|
|
357
|
+
*/
|
|
358
|
+
export declare function isSuupai(kind: HaiKindId): boolean;
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Type Guard for Tehai13
|
|
362
|
+
*/
|
|
363
|
+
export declare function isTehai13<T extends HaiKindId | HaiId>(tehai: Tehai<T>): tehai is Tehai13<T>;
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Type Guard for Tehai14
|
|
367
|
+
*/
|
|
368
|
+
export declare function isTehai14<T extends HaiKindId | HaiId>(tehai: Tehai<T>): tehai is Tehai14<T>;
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* 槓子かどうかを検証する
|
|
372
|
+
|
|
373
|
+
*/
|
|
374
|
+
export declare function isValidKantsu(kindIds: readonly HaiKindId[]): boolean;
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* 刻子かどうかを検証する
|
|
378
|
+
|
|
379
|
+
*/
|
|
380
|
+
export declare function isValidKoutsu(kindIds: readonly HaiKindId[]): boolean;
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* 順子かどうかを検証する
|
|
384
|
+
|
|
385
|
+
*/
|
|
386
|
+
export declare function isValidShuntsu(kindIds: readonly HaiKindId[]): boolean;
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* 塔子かどうかを検証する
|
|
390
|
+
|
|
391
|
+
*/
|
|
392
|
+
export declare function isValidTatsu(kindIds: readonly HaiKindId[]): boolean;
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* 対子かどうかを検証する
|
|
396
|
+
|
|
397
|
+
*/
|
|
398
|
+
export declare function isValidToitsu(kindIds: readonly HaiKindId[]): boolean;
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* 么九牌(1,9,字牌)かどうかを判定する
|
|
402
|
+
*/
|
|
403
|
+
export declare function isYaochu(kind: HaiKindId): boolean;
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* 槓子 (Kantsu)
|
|
407
|
+
*/
|
|
408
|
+
export declare type Kantsu<T extends HaiKindId | HaiId = HaiKindId> = BaseMentsu<T> & {
|
|
409
|
+
readonly type: typeof MentsuType.Kantsu;
|
|
410
|
+
readonly hais: readonly [T, T, T, T];
|
|
411
|
+
readonly furo?: Furo;
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
/** 自風・場風を表す牌 (東・南・西・北) */
|
|
415
|
+
export declare type Kazehai = typeof HaiKind.Ton | typeof HaiKind.Nan | typeof HaiKind.Sha | typeof HaiKind.Pei;
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* 牌種IDから牌種タイプを取得する
|
|
419
|
+
*/
|
|
420
|
+
export declare function kindIdToHaiType(kind: HaiKindId): HaiType;
|
|
421
|
+
|
|
422
|
+
declare interface KokushiHouraStructure {
|
|
423
|
+
readonly type: "Kokushi";
|
|
424
|
+
/** 13種類の么九牌(重複なし) */
|
|
425
|
+
readonly yaochu: readonly HaiKindId[];
|
|
426
|
+
/** 雀頭となる牌の種類 */
|
|
427
|
+
readonly jantou: HaiKindId;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/** 子のツモ和了時の支払い */
|
|
431
|
+
export declare interface KoTsumo {
|
|
432
|
+
type: "koTsumo";
|
|
433
|
+
/** [子の支払い, 親の支払い] */
|
|
434
|
+
readonly amount: readonly [number, number];
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* 刻子 (Koutsu)
|
|
439
|
+
*/
|
|
440
|
+
export declare type Koutsu<T extends HaiKindId | HaiId = HaiKindId> = BaseMentsu<T> & {
|
|
441
|
+
readonly type: typeof MentsuType.Koutsu;
|
|
442
|
+
readonly hais: readonly [T, T, T];
|
|
443
|
+
readonly furo?: Furo;
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
/** 待ちの形 */
|
|
447
|
+
export declare type MachiType = "Tanki" | "Shanpon" | "Ryanmen" | "Kanchan" | "Penchan";
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* 引数が不正な場合のエラー
|
|
451
|
+
* 必要なパラメータが不足している、または不正な値の場合にスローされます。
|
|
452
|
+
*/
|
|
453
|
+
export declare class MahjongArgumentError extends MahjongError {
|
|
454
|
+
/**
|
|
455
|
+
*
|
|
456
|
+
*/
|
|
457
|
+
constructor(message: string);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* riichi-mahjong ライブラリの基本エラークラス
|
|
462
|
+
* 全てのカスタムエラーはこのクラスを継承します。
|
|
463
|
+
*/
|
|
464
|
+
export declare class MahjongError extends Error {
|
|
465
|
+
/**
|
|
466
|
+
*
|
|
467
|
+
*/
|
|
468
|
+
constructor(message: string);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* 面子 (Mentsu)
|
|
473
|
+
*
|
|
474
|
+
* 広義の面子(ブロック)。指定がない場合は HaiKindId のリストを持つ。
|
|
475
|
+
*/
|
|
476
|
+
export declare type Mentsu<T extends HaiKindId | HaiId = HaiKindId> = CompletedMentsu<T> | IncompletedMentsu<T>;
|
|
477
|
+
|
|
478
|
+
declare interface MentsuHouraStructure {
|
|
479
|
+
readonly type: "Mentsu";
|
|
480
|
+
readonly fourMentsu: readonly [
|
|
481
|
+
CompletedMentsu,
|
|
482
|
+
CompletedMentsu,
|
|
483
|
+
CompletedMentsu,
|
|
484
|
+
CompletedMentsu
|
|
485
|
+
];
|
|
486
|
+
readonly jantou: Toitsu;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* 面子種別 (MentsuType)
|
|
491
|
+
*/
|
|
492
|
+
export declare const MentsuType: {
|
|
493
|
+
readonly Shuntsu: "Shuntsu";
|
|
494
|
+
readonly Koutsu: "Koutsu";
|
|
495
|
+
readonly Kantsu: "Kantsu";
|
|
496
|
+
readonly Toitsu: "Toitsu";
|
|
497
|
+
readonly Tatsu: "Tatsu";
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
export declare type MentsuType = (typeof MentsuType)[keyof typeof MentsuType];
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* 標準的なMSPZ形式の文字列(拡張記法を含まない)
|
|
504
|
+
*/
|
|
505
|
+
declare type MspzString = string & {
|
|
506
|
+
readonly __brand: "MspzString";
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* 役なし和了のエラー
|
|
511
|
+
*
|
|
512
|
+
* 和了形は成立しているが、役が一つも成立していない場合にスローされます。
|
|
513
|
+
*/
|
|
514
|
+
export declare class NoYakuError extends ChomboError {
|
|
515
|
+
/**
|
|
516
|
+
*
|
|
517
|
+
*/
|
|
518
|
+
constructor(message?: string);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/** 親のツモ和了時の支払い */
|
|
522
|
+
export declare interface OyaTsumo {
|
|
523
|
+
type: "oyaTsumo";
|
|
524
|
+
/** 子全員が支払う点数(オール) */
|
|
525
|
+
amount: number;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* 拡張MSPZ文字列(例: "123m[123p]...")を解析して手牌オブジェクトを生成します。
|
|
530
|
+
* 副露牌(`[...]`)や暗槓(`(...)`)を含めることができます。
|
|
531
|
+
*
|
|
532
|
+
* @param input 拡張MSPZ形式の文字列
|
|
533
|
+
* @returns 手牌オブジェクト
|
|
534
|
+
*/
|
|
535
|
+
export declare function parseExtendedMspz(input: string): Tehai;
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* 標準的なMSPZ文字列(例: "123m456p...")を解析して手牌オブジェクトを生成します。
|
|
539
|
+
* 副露牌は含まれません。
|
|
540
|
+
*
|
|
541
|
+
* @param input MSPZ形式の文字列
|
|
542
|
+
* @returns 手牌オブジェクト
|
|
543
|
+
*/
|
|
544
|
+
export declare function parseMspz(input: string): Tehai;
|
|
545
|
+
|
|
546
|
+
/** 支払い情報 */
|
|
547
|
+
export declare type Payment = Ron | KoTsumo | OyaTsumo;
|
|
548
|
+
|
|
549
|
+
/** ロン和了時の支払い */
|
|
550
|
+
export declare interface Ron {
|
|
551
|
+
type: "ron";
|
|
552
|
+
/** 振り込んだプレイヤーが支払う点数 */
|
|
553
|
+
amount: number;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
export declare interface ScoreCalculationConfig {
|
|
557
|
+
/** 和了牌 */
|
|
558
|
+
agariHai: HaiKindId;
|
|
559
|
+
/** ツモ和了かどうか (必須) */
|
|
560
|
+
isTsumo: boolean;
|
|
561
|
+
/** 自風 (必須) */
|
|
562
|
+
jikaze: Kazehai;
|
|
563
|
+
/** 場風 (必須) */
|
|
564
|
+
bakaze: Kazehai;
|
|
565
|
+
/** ドラ表示牌 (必須、なければ空配列) */
|
|
566
|
+
doraMarkers: readonly HaiKindId[];
|
|
567
|
+
/** 裏ドラ表示牌 (任意) */
|
|
568
|
+
uraDoraMarkers?: readonly HaiKindId[];
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* 点数レベル (ScoreLevel)
|
|
573
|
+
*
|
|
574
|
+
* 翻数と基本点から決まる点数の区分。
|
|
575
|
+
* 満貫以上では符に関係なく固定の基本点が適用される。
|
|
576
|
+
*/
|
|
577
|
+
declare const ScoreLevel: {
|
|
578
|
+
/** 満貫未満(通常計算) */
|
|
579
|
+
readonly Normal: "Normal";
|
|
580
|
+
/** 満貫(5翻、または基本点2000以上) */
|
|
581
|
+
readonly Mangan: "Mangan";
|
|
582
|
+
/** 跳満(6-7翻) */
|
|
583
|
+
readonly Haneman: "Haneman";
|
|
584
|
+
/** 倍満(8-10翻) */
|
|
585
|
+
readonly Baiman: "Baiman";
|
|
586
|
+
/** 三倍満(11-12翻) */
|
|
587
|
+
readonly Sanbaiman: "Sanbaiman";
|
|
588
|
+
/** 役満(13翻以上) */
|
|
589
|
+
readonly Yakuman: "Yakuman";
|
|
590
|
+
/** ダブル役満(26翻以上、または役満複合) */
|
|
591
|
+
readonly DoubleYakuman: "DoubleYakuman";
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
declare type ScoreLevel = (typeof ScoreLevel)[keyof typeof ScoreLevel];
|
|
595
|
+
|
|
596
|
+
export declare interface ScoreResult {
|
|
597
|
+
han: number;
|
|
598
|
+
fu: Fu;
|
|
599
|
+
scoreLevel: ScoreLevel;
|
|
600
|
+
payment: Payment;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/**
|
|
604
|
+
* ツモれなかった場合のエラー (少牌)
|
|
605
|
+
* 手牌が規定枚数(13枚)より少ない場合にスローされます。
|
|
606
|
+
*/
|
|
607
|
+
export declare class ShoushaiError extends MahjongError {
|
|
608
|
+
/**
|
|
609
|
+
*
|
|
610
|
+
*/
|
|
611
|
+
constructor(message?: string);
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
/**
|
|
615
|
+
* 順子 (Shuntsu)
|
|
616
|
+
*/
|
|
617
|
+
export declare type Shuntsu<T extends HaiKindId | HaiId = HaiKindId> = BaseMentsu<T> & {
|
|
618
|
+
readonly type: typeof MentsuType.Shuntsu;
|
|
619
|
+
readonly hais: readonly [T, T, T];
|
|
620
|
+
readonly furo?: Furo;
|
|
621
|
+
};
|
|
622
|
+
|
|
623
|
+
/**
|
|
624
|
+
* 他家 (Tacha)
|
|
625
|
+
*
|
|
626
|
+
* 自分から見た他家の位置関係(相対席)。
|
|
627
|
+
* 副露(鳴き)の発生元などを表現するために使用する。
|
|
628
|
+
*
|
|
629
|
+
* - 1: 下家 (Shimocha) - 右側
|
|
630
|
+
* - 2: 対面 (Toimen) - 正面
|
|
631
|
+
* - 3: 上家 (Kamicha) - 左側
|
|
632
|
+
*/
|
|
633
|
+
export declare const Tacha: {
|
|
634
|
+
readonly Shimocha: 1;
|
|
635
|
+
readonly Toimen: 2;
|
|
636
|
+
readonly Kamicha: 3;
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
export declare type Tacha = (typeof Tacha)[keyof typeof Tacha];
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* 切り忘れの場合のエラー (多牌)
|
|
643
|
+
* 手牌が規定枚数(13枚)より多い場合にスローされます。
|
|
644
|
+
*/
|
|
645
|
+
export declare class TahaiError extends MahjongError {
|
|
646
|
+
/**
|
|
647
|
+
*
|
|
648
|
+
*/
|
|
649
|
+
constructor(message?: string);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* 塔子 (Tatsu)
|
|
654
|
+
*/
|
|
655
|
+
declare type Tatsu<T extends HaiKindId | HaiId = HaiKindId> = BaseMentsu<T> & {
|
|
656
|
+
readonly type: typeof MentsuType.Tatsu;
|
|
657
|
+
readonly hais: readonly [T, T];
|
|
658
|
+
readonly furo?: never;
|
|
659
|
+
};
|
|
660
|
+
|
|
661
|
+
/**
|
|
662
|
+
* 手牌 (Tehai)
|
|
663
|
+
*
|
|
664
|
+
* 純手牌と副露を合わせたもの。
|
|
665
|
+
* @template T 牌の型 (HaiKindId | HaiId)
|
|
666
|
+
*/
|
|
667
|
+
export declare interface Tehai<T extends HaiKindId | HaiId = HaiKindId> {
|
|
668
|
+
readonly closed: readonly T[];
|
|
669
|
+
readonly exposed: readonly CompletedMentsu<T>[];
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
/**
|
|
673
|
+
* ツモる前の手牌 (13枚)
|
|
674
|
+
*/
|
|
675
|
+
export declare type Tehai13<T extends HaiKindId | HaiId = HaiKindId> = Tehai<T>;
|
|
676
|
+
|
|
677
|
+
/**
|
|
678
|
+
* ツモった後の手牌 (14枚)
|
|
679
|
+
*/
|
|
680
|
+
export declare type Tehai14<T extends HaiKindId | HaiId = HaiKindId> = Tehai<T>;
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* 手牌役 (TehaiYaku)
|
|
684
|
+
*
|
|
685
|
+
* 手牌役(手牌の構成のみで成立する役)の識別子。
|
|
686
|
+
* 偶然役(嶺上開花など)や状況役(場風、自風、立直など)は含まない。
|
|
687
|
+
*/
|
|
688
|
+
declare type TehaiYaku = "Tanyao" | "Pinfu" | "Iipeikou" | Yakuhai | "SanshokuDoujun" | "Ikkitsuukan" | "Honchan" | "Chiitoitsu" | "Toitoi" | "Sanankou" | "Sankantsu" | "SanshokuDoukou" | "Honroutou" | "Shousangen" | "Honitsu" | "Junchan" | "Ryanpeikou" | "Chinitsu" | "KokushiMusou" | "Suuankou" | "Daisangen" | "Shousuushii" | "Daisuushii" | "Tsuuiisou" | "Chinroutou" | "Ryuuiisou" | "ChuurenPoutou" | "Suukantsu" | "MenzenTsumo";
|
|
689
|
+
|
|
690
|
+
/**
|
|
691
|
+
* 対子 (Toitsu)
|
|
692
|
+
*/
|
|
693
|
+
declare type Toitsu<T extends HaiKindId | HaiId = HaiKindId> = BaseMentsu<T> & {
|
|
694
|
+
readonly type: typeof MentsuType.Toitsu;
|
|
695
|
+
readonly hais: readonly [T, T];
|
|
696
|
+
readonly furo?: never;
|
|
697
|
+
};
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* 手牌がTehai13またはTehai14(有効枚数が13または14枚)であるか検証します。
|
|
701
|
+
* シャンテン計算や待ち判定など、13枚/14枚の区別なく手牌として扱いたい場合に使用します。
|
|
702
|
+
*
|
|
703
|
+
* @throws {ShoushaiError} 枚数が不足している場合 (< 13)
|
|
704
|
+
* @throws {TahaiError} 枚数が超過している場合 (> 14)
|
|
705
|
+
* @throws {InvalidHaiQuantityError} 同一種の牌が5枚以上ある場合
|
|
706
|
+
* @throws {DuplicatedHaiIdError} 物理牌モードでIDが重複している場合
|
|
707
|
+
*/
|
|
708
|
+
export declare function validateTehai<T extends HaiKindId | HaiId>(tehai: Tehai<T>): void;
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* 役牌 (Yakuhai)
|
|
712
|
+
*
|
|
713
|
+
* 構造的に成立する三元牌。
|
|
714
|
+
* ※場風・自風は状況役(Bakaze, Jikaze)として別途定義するためここには含めない。
|
|
715
|
+
*/
|
|
716
|
+
declare type Yakuhai = "Haku" | "Hatsu" | "Chun";
|
|
717
|
+
|
|
718
|
+
/**
|
|
719
|
+
* 役ID (YakuName)
|
|
720
|
+
*
|
|
721
|
+
* 全ての役の識別子ユニオン。
|
|
722
|
+
*/
|
|
723
|
+
export declare type YakuName = TehaiYaku;
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* 役判定結果 (YakuResult)
|
|
727
|
+
*
|
|
728
|
+
* 成立した役と、その翻数のペアのリスト。
|
|
729
|
+
* 役が一つも成立しない場合は空配列となる。
|
|
730
|
+
*/
|
|
731
|
+
export declare type YakuResult = readonly [YakuName, Hansu][];
|
|
732
|
+
|
|
733
|
+
/**
|
|
734
|
+
* 么九牌(1,9,字牌)の牌種IDセット
|
|
735
|
+
*/
|
|
736
|
+
export declare const YAOCHU_KIND_IDS: readonly [0, 8, 9, 17, 18, 26, 27, 28, 29, 30, 31, 32, 33];
|
|
737
|
+
|
|
738
|
+
export { }
|