sergicalsix's picture
Upload folder using huggingface_hub
039e3b4 verified
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()