-
Notifications
You must be signed in to change notification settings - Fork 0
/
readme.txt
260 lines (208 loc) · 8.07 KB
/
readme.txt
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
----------------------------------------------------------------------
■「MahjongUtil」:麻雀に関する機能を提供するSAORI
■Written by Don
https://nikolat.github.io/
----------------------------------------------------------------------
■これは何をするものか
麻雀に関する機能を提供するSAORIです。
シャンテン数の計算、和了点計算、待ち牌の判定などができます。
入力・出力の値となる牌の表記はUMP(Universal Mahjong Protocol)に準拠します。
https://osdn.net/projects/openmj/wiki/UMP
■動作環境
・Windows10
■使用方法
□shanten:シャンテン数の計算
シャンテン数を計算します。
入力された手牌に対し最小となるシャンテン数をResultに、
算出した元となる雀頭、面子、塔子・対子、孤立牌の組み合わせをValue0以降に返します。
(七対子の場合は"chitoitsu"、国士無双の場合は"kokushimusou"をValue0以降に返します)
入力する牌の数に制限はありません。1枚でも13枚でも14枚でも15枚でも可能です。
シャンテン数0はテンパイ、-1は和了を意味します。
・呼び出し:
Argument0 shanten
Argument1 手牌
・結果
Result シャンテン数
Value0以降 算出した元となる雀頭、面子、塔子・対子、孤立牌の組み合わせ(","区切り)
先頭は雀頭(無い場合は空)、対子との重複分は除外
・例1
Argument0: shanten
Argument1: 1m2m3m5p6p7p8p9p9p2s3s4s4s
↓
Result: 1
Value0: 9p9p,1m2m3m,5p7p,6p8p,2s3s4s,4s
Value1: 9p9p,1m2m3m,5p6p,7p8p,2s3s4s,4s
Value2: 9p9p,1m2m3m,6p7p8p,5p,2s4s,3s4s
Value3: 9p9p,1m2m3m,6p7p8p,5p,2s3s,4s4s
Value4: 9p9p,1m2m3m,6p7p8p,5p,2s3s4s,4s
Value5: 9p9p,1m2m3m,5p6p7p,8p,2s4s,3s4s
Value6: 9p9p,1m2m3m,5p6p7p,8p,2s3s,4s4s
Value7: 9p9p,1m2m3m,5p6p7p,8p,2s3s4s,4s
Value8: 4s4s,1m2m3m,7p8p9p,5p6p,9p,2s3s
Value9: 4s4s,1m2m3m,5p6p7p,8p9p,9p,2s3s
Value10: ,1m2m3m,7p8p9p,5p6p,9p,2s3s4s,4s
Value11: ,1m2m3m,5p6p7p,8p9p,9p,2s3s4s,4s
・例2
Argument0: shanten
Argument1: 2p2p3p3p4p4p5p5p6p6p7p7p8p8p
↓
Result: -1
Value0: 2p2p,3p4p5p,3p4p5p,6p7p8p,6p7p8p
Value1: 5p5p,2p3p4p,2p3p4p,6p7p8p,6p7p8p
Value2: 8p8p,2p3p4p,2p3p4p,5p6p7p,5p6p7p
Value3: chitoitsu
□shanten_normal:シャンテン数の計算(七対子と国士無双を除外)
七対子と国士無双を除外したシャンテン数を計算します。
仕様はshantenと一緒です。
・呼び出し:
Argument0 shanten_normal
Argument1 手牌
・結果
Result シャンテン数
Value0以降 算出した元となる雀頭、面子、塔子・対子、孤立牌の組み合わせ(","区切り)
先頭は雀頭(無い場合は空)、対子との重複分は除外
・例
Argument0: shanten_normal
Argument1: 1m9m1p9p1s9s1z2z3z4z5z6z7z7z
↓
Result: 7
Value0: 7z7z,1m,9m,1p,9p,1s,9s,1z,2z,3z,4z,5z,6z
□shanten_yaku:シャンテン数の計算(役がある場合)
役があるシャンテン数を計算します。
いくつかの役に対するシャンテン数を計算し、その中で最小となるシャンテン数をResultに、
算出した元となる特定の役に対するシャンテン数をValue0以降に返します。
現時点で算出対象としている役は以下の通りです。
・七対子
・国士無双
・門前清自摸和
・役牌
・断ヤオ九
・対々和
・混一色
役牌の場合は役牌の手持ちが0枚でも理論上3枚引いてくれば役ができますが、
手持ちに役牌の刻子または対子がある場合のみ計算対象としています。
副露判断に使用されることを想定している事情によるものです。
・呼び出し:
Argument0 shanten
Argument1 手牌
Argument2 場風牌
Argument3 自風牌
※Argument2以降は省略可
・結果
Result シャンテン数
Value0以降 役、シャンテン数の組み合わせ(","区切り)
・例1
Argument0: shanten_yaku
Argument1: 1m2m3m5p6p7p8p9p9p2s3s4s4s
↓
Result: 1
Value0: 七対子,4
Value1: 国士無双,10
Value2: 対々和,6
Value3: 断ヤオ九,3
Value4: 混一色,7
Value5: 門前清自摸和,1
・例2
Argument0: shanten_yaku
Argument1: 1m3m3m5m6m8m2s3s1z2z2z<3m4m5m>
Argument2: 1z
Argument3: 2z
↓
Result: 2
Value0: 役牌,2
Value1: 断ヤオ九,3
Value2: 混一色,2
□score:和了点計算
和了点を計算します。
算出した元となる符、翻、および役の情報をValue0以降に返します。
(役満の場合は何倍役満であるか、および役満の情報をValue0以降に返します)
(嶺上開花においてツモ符2符を認めるルールとしています)
・呼び出し:
Argument0 score
Argument1 手牌(13枚)
Argument2 和了牌
Argument3 場風牌
Argument4 自風牌
Argument5 ドラ牌(複数指定可)(ドラ表示牌ではない)
Argument6 ツモか否か
Argument7 1: 立直, 2: ダブル立直
Argument8 一発か否か
Argument9 槍槓か否か
Argument10 嶺上開花か否か
Argument11 海底牌(河底牌)か否か
Argument12 鳴きの無い1巡目のツモか否か
※Argument3以降は省略可
・結果
Result 点数
Value0 符
Value1 翻
Value2以降 役、翻の組み合わせ(","区切り)
※役満の場合は以下の通り
Result 点数
Value0 役満の倍数
Value1以降 役満、倍数の組み合わせ(","区切り)
・例1
Argument0: score
Argument1: 1m2m3m1p2p3p1s1s2s3s3s4s4s
Argument2: 2s
↓
Result: 5200
Value0: 40
Value1: 3
Value2: 一盃口,1
Value3: 三色同順,2
・例2
Argument0: score
Argument1: 3z3z3z4z4z5z5z5z6z6z6z7z7z
Argument2: 7z
Argument3: 2z
Argument4: 1z
Argument5: 9m9p
Argument6: 1
Argument7: 0
Argument8: 0
Argument9: 0
Argument10: 0
Argument11: 0
Argument12: 1
↓
Result: 192000
Value0: 4
Value1: 四暗刻,1
Value2: 大三元,1
Value3: 天和,1
Value4: 字一色,1
□machi:待ち牌の判定
待ち牌を判定します。
・呼び出し:
Argument0 machi
Argument1 手牌(13枚)
・結果
Result 待ち牌
・例1
Argument0: machi
Argument1: 1m1m1m2m3m4m5m6m7m8m9m9m9m
↓
Result: 1m2m3m4m5m6m7m8m9m
・例2
Argument0: machi
Argument1: 1m1m4m5m6m7m8m<1m2m3m>(9m9m9m9m)
↓
Result: 3m6m9m
※上記の例では9mが4枚使われているため9mで和了ることはできません。
待ちから除外する処理は呼び出し元の責任で行ってください。
■謝辞
SAORIサンプルクラス「CSAORI」を使用させていただきました。
csaori
https://github.com/ukatech/csaori
麻雀アプリ「電脳麻将」の開発ブログを参考にさせていただきました。
電脳麻将
https://github.com/kobalab/Majiang
ありがとうございます。
■配布条件等
license.txtを見てください。
■更新履歴
・2021-07-29 v1.0.0
Initial Release
・2021-08-05 v1.0.1
純正でない九蓮宝燈と13面待ちでない国士無双がW役満となっていた不具合の修正