Spaces:
Runtime error
Runtime error
| import random | |
| class ResourceDepletionPlugin: | |
| def __init__(self, depletion_threshold, death_rate = 0.3): | |
| self.depletion_threshold = depletion_threshold | |
| self.death_rate = death_rate | |
| def trigger_disaster(self, characters, character_die_callback): | |
| print("资源耗尽! 发生灾难...") | |
| # 按照宗族大小排序 | |
| clan_size = {} | |
| for c in characters: | |
| clan_size[c.clan] = clan_size.get(c.clan, 0) + 1 | |
| clans = sorted(clan_size.items(), key=lambda x: x[1], reverse=True) | |
| # 前 50% 大小的宗族,死亡 30%, 后 50% 大小的宗族,死亡 60% | |
| for i, (clan, size) in enumerate(clans): | |
| if i < len(clans) // 2: | |
| num_killed = int(size * self.death_rate) | |
| else: | |
| num_killed = int(size * (self.death_rate * 2)) | |
| # 随机选择死亡成员 | |
| clan_members = [c for c in characters if c.clan == clan] | |
| killed = random.sample(clan_members, num_killed) | |
| for c in killed: | |
| c.history.append(f"{c.real_age}岁,因资源耗尽死亡") | |
| character_die_callback(c) | |
| def execute(self, resources, characters, character_die_callback): | |
| # 检查资源是否耗尽,如果耗尽则有概率触发灾难 | |
| if resources < self.depletion_threshold: | |
| probability = random.random() | |
| if probability < 0.3: | |
| self.trigger_disaster(characters, character_die_callback) |