From ced6a117e1aedca937b89e98307aa55e8da05b7e Mon Sep 17 00:00:00 2001 From: bridge Date: Thu, 25 Sep 2025 21:45:43 +0800 Subject: [PATCH] update --- src/classes/cultivation.py | 8 ++++---- src/classes/root.py | 23 ++++++----------------- src/front/rendering.py | 2 +- src/run/run.py | 20 ++++++++++---------- static/config.yml | 2 +- 5 files changed, 22 insertions(+), 33 deletions(-) diff --git a/src/classes/cultivation.py b/src/classes/cultivation.py index 3930c4a..798625c 100644 --- a/src/classes/cultivation.py +++ b/src/classes/cultivation.py @@ -222,10 +222,10 @@ class CultivationProgress: breakthrough_success_rate_by_realm = { - Realm.Qi_Refinement: 0.8, - Realm.Foundation_Establishment: 0.6, - Realm.Core_Formation: 0.4, - Realm.Nascent_Soul: 0.2, + Realm.Qi_Refinement: 0.8, # 练气,80% + Realm.Foundation_Establishment: 0.6, # 筑基,60% + Realm.Core_Formation: 0.4, # 金丹,40% + Realm.Nascent_Soul: 0.2, # 元婴,20% } breakthrough_fail_reduce_lifespan_by_realm = { diff --git a/src/classes/root.py b/src/classes/root.py index 46780d3..bacce2e 100644 --- a/src/classes/root.py +++ b/src/classes/root.py @@ -59,17 +59,15 @@ def _build_root_members_from_csv() -> Dict[str, tuple]: element_names = [s.strip() for s in elements_field.split(sep) if str(s).strip()] element_members: List[RootElement] = [] for en in element_names: - try: - # RootElement 的值即为中文名,因此可直接用中文构造 - element_members.append(RootElement(en)) - except Exception as e: - raise ValueError(f"root.csv 中未知的元素名称: {en}") from e + element_members.append(RootElement(en)) members[key] = (cn_name, tuple(element_members)) return members # 动态创建 Root 枚举(使用 mixin 作为 type,使 __new__ 生效) Root = Enum("Root", _build_root_members_from_csv(), type=_RootMixin) +# 某些环境下函数式创建的 Enum 可能未正确采用 mixin 的 __str__,这里显式绑定确保生效 +Root.__str__ = _RootMixin.__str__ # 元素到灵气类型的一一对应 @@ -94,21 +92,12 @@ def _load_extra_breakthrough_success_rate_from_csv() -> Dict["Root", float]: 从 root.csv 载入各灵根的额外突破成功率,默认0。 列名:extra_breakthrough_success_rate """ - df = game_configs.get("root") - if df is None: - return {} + df = game_configs["root"] bonuses: Dict["Root", float] = {} for _, row in df.iterrows(): key = str(row["key"]).strip() - try: - root_member = getattr(Root, key) - except AttributeError: - # CSV 中的 key 未在 Root 中注册(理论不可能),跳过 - continue - try: - bonus = float(row.get("extra_breakthrough_success_rate", 0) or 0) - except Exception: - bonus = 0.0 + root_member = getattr(Root, key) + bonus = float(row.get("extra_breakthrough_success_rate", 0) or 0) bonuses[root_member] = bonus return bonuses diff --git a/src/front/rendering.py b/src/front/rendering.py index 451198b..bb61f82 100644 --- a/src/front/rendering.py +++ b/src/front/rendering.py @@ -144,7 +144,7 @@ def draw_tooltip_for_avatar(pygame_mod, screen, colors, font, avatar: Avatar): f"境界: {str(avatar.cultivation_progress)}", f"HP: {avatar.hp}", f"MP: {avatar.mp}", - f"灵根: {avatar.root.value}", + f"灵根: {str(avatar.root)}", f"个性: {', '.join([persona.name for persona in avatar.personas])}", f"位置: ({avatar.pos_x}, {avatar.pos_y})", ] diff --git a/src/run/run.py b/src/run/run.py index 7203fe2..165770f 100644 --- a/src/run/run.py +++ b/src/run/run.py @@ -89,16 +89,16 @@ def make_avatars(world: World, count: int = 12, current_month_stamp: MonthStamp avatars[avatar.id] = avatar # —— 为演示添加少量示例关系 —— avatar_list = list(avatars.values()) - # if len(avatar_list) >= 2: - # avatar_list[0].set_relation(avatar_list[1], Relation.ENEMY) - # if len(avatar_list) >= 4: - # avatar_list[2].set_relation(avatar_list[3], Relation.FRIEND) - # if len(avatar_list) >= 6: - # # 师徒(随意指派方向,关系对称) - # avatar_list[4].set_relation(avatar_list[5], Relation.MASTER_APPRENTICE) - # if len(avatar_list) >= 8: - # # 情侣 - # avatar_list[6].set_relation(avatar_list[7], Relation.LOVERS) + if len(avatar_list) >= 2: + avatar_list[0].set_relation(avatar_list[1], Relation.ENEMY) + if len(avatar_list) >= 4: + avatar_list[2].set_relation(avatar_list[3], Relation.FRIEND) + if len(avatar_list) >= 6: + # 师徒(随意指派方向,关系对称) + avatar_list[4].set_relation(avatar_list[5], Relation.MASTER_APPRENTICE) + if len(avatar_list) >= 8: + # 情侣 + avatar_list[6].set_relation(avatar_list[7], Relation.LOVERS) return avatars diff --git a/static/config.yml b/static/config.yml index ce878ea..777bf11 100644 --- a/static/config.yml +++ b/static/config.yml @@ -12,7 +12,7 @@ ai: max_decide_num: 3 game: - init_npc_num: 3 + init_npc_num: 6 npc_birth_rate_per_month: 0.001 df: