Spaces:
Runtime error
Runtime error
import gradio as gr | |
from CharacterStatistics import CharacterStatistics | |
from WorldSimulation import WorldSimulation | |
# 创建一个世界模拟对象 | |
simulation = None | |
num_rounds = 0 | |
def initialize_world(c1, c2, c3, c4, r1, r2, r3, r4, r5, initial_population=3000, world_spiritual_energy=1000000): | |
global simulation | |
special_constitution_ratio = [c1, c2, c3, c4] | |
spiritual_roots_ratio = [r1, r2, r3, r4, r5] | |
initial_population = int(initial_population) | |
simulation = WorldSimulation(special_constitution_ratio, spiritual_roots_ratio, initial_population, world_spiritual_energy) | |
return f"世界初始化成功:\n\n初始人口:{initial_population}\n\n世界灵气能量:{world_spiritual_energy}" | |
def add_custom_character(name, gender, special_constitution, spiritual_roots): | |
special_constitution = [1 if i in special_constitution else 0 for i in range(4)] | |
spiritual_roots = [1 if i in spiritual_roots else 0 for i in range(5)] | |
simulation.add_custom_character(name, gender, special_constitution, spiritual_roots) | |
return str(simulation.characters[-1]) | |
def start_simulation(): | |
simulation.start_simulation() | |
return f"世界人口数量达到{len(simulation.characters)},可以运行模拟了。" | |
def run_simulation(rounds): | |
global num_rounds | |
num_rounds = rounds | |
if simulation is None: | |
return "请先初始化世界" | |
return simulation.run_simulation(num_rounds) | |
def get_character_info(character_index): | |
if character_index < len(simulation.characters): | |
return str(simulation.characters[character_index]) | |
else: | |
return f"没有第{character_index}个角色,目前共有{len(simulation.characters)}个存活角色" | |
def get_dead_character_info(character_index): | |
if character_index < len(simulation.dead_characters): | |
return str(simulation.dead_characters[character_index]) | |
else: | |
return f"没有第{character_index}个死亡角色,目前共有{len(simulation.dead_characters)}个死亡角色" | |
def get_world_stats(): | |
stats = CharacterStatistics(simulation.characters) | |
return stats.summarize_markdown() | |
with gr.Blocks() as demo: | |
# 初始化世界 | |
gr.Markdown("## 初始化世界") | |
with gr.Row(): | |
initial_population_input = gr.Number(label="初始人口", value=3000, precision=0) | |
world_spiritual_energy_input = gr.Number(label="世界灵气能量", value=1000000) | |
# 特殊体质 | |
gr.Markdown("特殊体质比例") | |
with gr.Row(): | |
special_constitution_ratio_input = [ | |
gr.Number(label="战斗体质", minimum=0, maximum=1, value=0.001), | |
gr.Number(label="合欢体质", minimum=0, maximum=1, value=0.001), | |
gr.Number(label="灵龟体质", minimum=0, maximum=1, value=0.001), | |
gr.Number(label="蜉蝣体质", minimum=0, maximum=1, value=0.001)] | |
# 灵根 | |
gr.Markdown("灵根比例") | |
with gr.Row(): | |
spiritual_roots_ratio_input = [ | |
gr.Number(label="金", minimum=0, maximum=1, value=0.04), | |
gr.Number(label="木", minimum=0, maximum=1, value=0.04), | |
gr.Number(label="水", minimum=0, maximum=1, value=0.04), | |
gr.Number(label="火", minimum=0, maximum=1, value=0.04), | |
gr.Number(label="土", minimum=0, maximum=1, value=0.04)] | |
initialize_button = gr.Button("初始化世界") | |
output_text = gr.Markdown(label="初始化结果") | |
initialize_button.click(fn=initialize_world, inputs=[*special_constitution_ratio_input, *spiritual_roots_ratio_input, initial_population_input, world_spiritual_energy_input], outputs=output_text) | |
# 添加角色 | |
with gr.Accordion("添加角色"): | |
gr.Markdown("每次添加一个,添加完可以继续添加。") | |
name_input = gr.Textbox(label="姓名") | |
gender_input = gr.Radio(["男", "女"], label="性别") | |
special_constitution_input = gr.CheckboxGroup(["战斗体质", "合欢体质", "灵龟体质", "蜉蝣体质"], label="特殊体质", type="index") | |
spiritual_roots_input = gr.CheckboxGroup(["金", "木", "水", "火", "土"], label="灵根", type="index") | |
add_character_button = gr.Button("添加角色") | |
new_character_info_output = gr.Textbox(label="新角色信息") | |
add_character_button.click(fn=add_custom_character, inputs=[name_input, | |
gender_input, | |
special_constitution_input, spiritual_roots_input], outputs=new_character_info_output) | |
# 开始模拟 | |
start_simulation_button = gr.Button("生成初始人口") | |
output_text = gr.Markdown("") | |
start_simulation_button.click(fn=start_simulation, inputs=[], outputs=output_text) | |
# 运行模拟 | |
gr.Markdown("## 运行模拟\n\n输入轮数,运行模拟,可以多次运行。") | |
with gr.Row(): | |
rounds_input = gr.Number(label="轮数", precision=0, value=1) | |
run_simulation_button = gr.Button("运行模拟") | |
simulation_result_output = gr.Textbox(label="模拟结果") | |
run_simulation_button.click(fn=run_simulation, inputs=[rounds_input], outputs=[simulation_result_output]) | |
# 查看统计信息 | |
gr.Markdown("## 查看统计信息") | |
get_stats_button = gr.Button("查看统计信息") | |
with gr.Box(): | |
world_stats_output = gr.Markdown("") | |
get_stats_button.click(fn=get_world_stats, inputs=[], outputs=[world_stats_output]) | |
# 查看角色信息 | |
with gr.Row(): | |
character_info_output = gr.Number(label="角色信息", info="输入角色编号", precision=0) | |
get_character_info_button = gr.Button("查看角色信息") | |
character_info_output_display = gr.Textbox(label="角色信息") | |
get_character_info_button.click(fn=get_character_info, inputs=[character_info_output], outputs=[character_info_output_display]) | |
with gr.Row(): | |
dead_character_info_output = gr.Number(label="死亡角色信息", info="输入死亡角色编号", precision=0) | |
get_dead_character_info_button = gr.Button("查看死亡角色信息") | |
dead_character_info_output_display = gr.Textbox(label="死亡角色信息") | |
get_dead_character_info_button.click(fn=get_dead_character_info, inputs=[dead_character_info_output], outputs=[dead_character_info_output_display]) | |
demo.launch(debug=True) | |