File size: 5,631 Bytes
1839603
 
 
039e3b4
 
1839603
 
 
 
039e3b4
1839603
039e3b4
 
 
 
 
 
1839603
287f499
039e3b4
 
1839603
287f499
1839603
 
039e3b4
 
1839603
039e3b4
1839603
 
287f499
 
 
1839603
287f499
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1839603
 
287f499
 
 
 
 
 
1839603
287f499
 
 
 
 
 
 
 
 
 
 
1839603
 
 
287f499
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1839603
287f499
 
 
 
 
 
1839603
 
 
287f499
 
 
 
 
 
 
1839603
 
 
287f499
 
 
 
 
 
 
 
1839603
 
 
 
 
 
 
287f499
 
1839603
 
287f499
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
import gradio as gr

yaku_list = [
    "門前清自摸和", "立直", "一発", "ドラ", "平和","断么九",
    "白","發","中","東","南","西","北",
    "海底撈月", "河底撈魚", "嶺上開花", "槍槓", 
    "ダブル立直", "七対子", "混全帯幺九", "一気通貫",
    "三色同順", "三色同刻", "三槓子", "対々和",
    "三暗刻", "小三元", "混老頭", "二盃口",
    "純全帯幺九", "混一色", "清一色", 
]
#     "国士無双","大三元", "四暗刻", "小四喜",
#     "大四喜", "字一色", "緑一色", "清老頭",
#     "九蓮宝燈", "四槓子", "天和", "地和"
# ]



yaku_hand_dict = {
    "門前清自摸和":1, "立直":1, "一発":1, "ドラ":1, "平和":1,"断么九":1,
    "白":1,"發":1,"中":1,"東":1,"南":1,"西":1,"北":1,
    "海底撈月":1, "河底撈魚":1, "嶺上開花":1, "槍槓":1, 
    "ダブル立直":2, "七対子":2, "混全帯幺九":2, "一気通貫":2,
    "三色同順":2, "三色同刻":2, "三槓子":2, "対々和":2,
    "三暗刻":2, "小三元":2, "混老頭":2, "二盃口":3,
    "純全帯幺九":3, "混一色":3, "清一色":6, 
    "国士無双":13, "大三元":13, "四暗刻":13, "小四喜":13,
    "大四喜":13, "字一色":13, "緑一色":13, "清老頭":13,
    "九蓮宝燈":13, "四槓子":13, "天和":13, "地和":13
}

#ロン
parent_ron_points = {1:2000, 2:3900, 3:7700, 4:12000,5:12000,6:18000,7:18000,8:24000,9:24000,10:24000,11:36000,12:36000,13:48000}
children_ron_points = {1:1300, 2:2600, 3:5200, 4:8000,5:8000,6:12000,7:12000,8:16000,9:16000,10:16000,11:24000,12:24000,13:32000}

parent_pinhu_ron_points = {1:1500, 2:2900, 3:5800}
children_pinhu_ron_points = {1:1000, 2:2000, 3:3900}

parent_seven_pairs_ron_points = {2:2400, 3:4800, 4:9600}
children_seven_pairs_ron_points = {2:1600, 3:3200, 4:6400}

#ツモ
parent_tumo_points = {1:500, 2:1000, 3:2000, 4:4000,5:4000,6:6000,7:6000,8:8000,9:8000,10:8000,11:12000,12:12000,13:16000}
children_tumo_points = {1:"300-500", 2:"500-1000", 3:"1000-2000", 4:"2000-4000",5:"2000-4000",6:"3000-6000",7:"3000-6000",8:"4000-8000",9:"4000-8000",10:"4000-8000",11:"6000-12000",12:"6000-12000",13:"8000-16000"}

parent_pinhu_tumo_points = {2:700, 3:1300, 4:2600}
children_pinhu_tumo_points = {2:"400-700", 3:"700-1300", 4:"1300-2600"}

parent_seven_pairs_tumo_points = {3:1600, 4:3200}
children_seven_pairs_tumo_points = {3:"800-1600", 4:"1600-3200"}


#役から翻数と親子の点数を計算する関数
def calculate_score(selected_yaku):
    hand = 0
    flag_pinhu = False
    flag_seven_pairs = False
    flag_tumo = False

    parent_tumo_score, children_tumo_score, parent_ron_score, children_ron_score = 0, 0, 0, 0

    for yaku in selected_yaku:
        if yaku == "平和":
            flag_pinhu = True
        elif yaku == "七対子":
            flag_seven_pairs = True
        elif yaku == "門前清自摸和":
            flag_tumo = True
        hand += yaku_hand_dict[yaku] # 各役の翻数を加算

    if flag_pinhu and flag_seven_pairs:
        return -1, parent_tumo_score, children_tumo_score, parent_ron_score, children_ron_score 

    if hand > 13:
        hand = 13

    if flag_tumo:
        parent_tumo_score, children_tumo_score = parent_tumo_points[hand], children_tumo_points[hand]
        if hand <=4:
            if flag_pinhu:
                parent_tumo_score, children_tumo_score = parent_pinhu_tumo_points[hand], children_pinhu_tumo_points[hand]
            elif flag_seven_pairs:
                parent_tumo_score, children_tumo_score =  parent_seven_pairs_tumo_points[hand], children_seven_pairs_tumo_points[hand]
    
    else:
        parent_ron_score, children_ron_score = parent_ron_points[hand], children_ron_points[hand]
        if hand <=4:
            if flag_pinhu:
                parent_ron_score, children_ron_score = parent_pinhu_ron_points[hand], children_pinhu_ron_points[hand]
            elif flag_seven_pairs:
                parent_ron_score, children_ron_score =  parent_seven_pairs_ron_points[hand], children_seven_pairs_ron_points[hand]
        
    return hand, parent_tumo_score, children_tumo_score, parent_ron_score, children_ron_score 

#役と翻数をテキストで表示するための文字列を作る関数
def join_yaku_hand(selected_yaku):
    yaku_hand_text = ""
    for yaku in selected_yaku:
        yaku_hand_text += f"{yaku}({yaku_hand_dict[yaku]})"
    return yaku_hand_text


def mahjong_score_interface(selected_yaku):
    hand, parent_tumo_score, children_tumo_score, parent_ron_score, children_ron_score = calculate_score(selected_yaku)
    yaku_hand_text = join_yaku_hand(selected_yaku)
    if hand == -1:
        return f"選択された役({yaku_hand_text})は同時に成立できません。"
    elif parent_tumo_score == 0:
        return f"""
        選択された役: {yaku_hand_text}
        翻数: {hand}
        親(ロン): {parent_ron_score}
        子(ロン): {children_ron_score}
        (役満以上は全て13翻とした。)
        """
    return f"""
        選択された役: {yaku_hand_text}
        翻数: {hand}
        親(ツモ): {parent_tumo_score}オール
        子(ツモ): {children_tumo_score}
        (役満以上は全て13翻とした。)
        """

yaku_checkboxes = [gr.Checkbox(label=yaku) for yaku in yaku_list]

interface = gr.Interface(
    fn=mahjong_score_interface,
    inputs=[gr.components.CheckboxGroup(choices=yaku_list, label="役を選択")],
    outputs=gr.components.Textbox(label="翻数と親子の点数"),
    title="簡易版面前麻雀点数計算アプリ"
)

interface.launch()