Spaces:
Sleeping
Sleeping
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()
|