import gradio as gr import random player = {"name": "용사", "hp": 100, "max_hp": 100, "atk": 20, "def": 5} monster = {} def start_battle(): global monster monster = { "name": random.choice(["고블린", "늑대", "슬라임", "도적"]), "hp": random.randint(30, 70), "atk": random.randint(10, 20), "def": random.randint(2, 6) } return f"{monster['name']}이(가) 나타났다! 체력: {monster['hp']}" def attack(): if not monster: return "먼저 몬스터를 소환하세요!" dmg = max(1, player["atk"] - monster["def"]) monster["hp"] -= dmg log = f"{player['name']}이(가) {monster['name']}에게 {dmg}의 피해를 입혔다.\n" if monster["hp"] <= 0: log += f"{monster['name']}을(를) 처치했다!" monster.clear() return log enemy_dmg = max(1, monster["atk"] - player["def"]) player["hp"] -= enemy_dmg log += f"{monster['name']}이(가) {player['name']}에게 {enemy_dmg}의 피해를 입혔다.\n" if player["hp"] <= 0: return log + "당신은 쓰러졌습니다..." return log def heal(): if player["hp"] >= player["max_hp"]: return "이미 체력이 가득 찼습니다." player["hp"] = min(player["max_hp"], player["hp"] + 30) return f"포션을 사용하여 체력을 회복했습니다. 현재 체력: {player['hp']}" def get_status(): return f"{player['name']} 체력: {player['hp']}/{player['max_hp']}" with gr.Blocks() as demo: gr.Markdown("# ⚔️ 나만의 RPG 게임") status = gr.Textbox(label="플레이어 상태", value=get_status()) log = gr.Textbox(label="전투 로그") with gr.Row(): btn_battle = gr.Button("몬스터 소환") btn_attack = gr.Button("공격") btn_heal = gr.Button("포션 사용") btn_battle.click(fn=start_battle, outputs=log, show_progress=False) btn_attack.click(fn=attack, outputs=log, show_progress=False) btn_heal.click(fn=heal, outputs=log, show_progress=False) btn_battle.click(fn=get_status, outputs=status) btn_attack.click(fn=get_status, outputs=status) btn_heal.click(fn=get_status, outputs=status) demo.launch()