Spaces:
Runtime error
Runtime error
import random | |
class BattlePlugin: | |
def __init__(self, probability, min_battle_age=10, max_battle_round=100): | |
self.probability = probability | |
self.min_battle_age = min_battle_age # 最小参战年龄 | |
self.max_battle_round = max_battle_round # 最大战斗回合数 | |
def simulate_battle(self, character, opponent): | |
battle_round = 0 | |
character.before_battle() | |
opponent.before_battle() | |
while character.check_is_alive() and opponent.check_is_alive() and battle_round < self.max_battle_round: | |
battle_round += 1 | |
# 根据攻击速度确定行动顺序 | |
if character.combat_power["attack_speed"] >= opponent.combat_power["attack_speed"]: | |
character.attack(opponent) | |
if opponent.check_is_alive(): | |
opponent.attack(character) | |
else: | |
opponent.attack(character) | |
if character.check_is_alive(): | |
character.attack(opponent) | |
# 胜利或平手判断 | |
if character.check_is_alive() and opponent.check_is_alive(): | |
# print(f"{character.name}和{opponent.name}打成平手!") | |
return None | |
elif character.check_is_alive(): | |
print(f"{character.name}战胜了{opponent.name}!") | |
return (character, opponent) | |
elif opponent.check_is_alive(): | |
print(f"{opponent.name}战胜了{character.name}!") | |
return (opponent, character) | |
def perform_battles(self, characters, character_die): | |
# 按照年龄筛选出参战人员,且成仙者不参与战斗 | |
eligible_characters = [character for character in characters if character.apparent_age > self.min_battle_age and character.check_is_alive() and not character.is_immortal] | |
for _ in range(int(len(eligible_characters) * self.probability)): | |
character = random.choice(eligible_characters) | |
opponent = random.choice(eligible_characters) | |
if character != opponent and character.clan != opponent.clan: | |
result = self.simulate_battle(character, opponent) | |
if result is not None: | |
(winner, loser) = result | |
winner.cultivate(100) | |
winner.history.append(f"{winner.real_age}岁({winner.view_rank()}),战胜了{loser.name}({loser.view_rank()})") | |
loser.history.append(f"{loser.real_age}岁({loser.view_rank()}),被{winner.name}({winner.view_rank()})打败了") | |
if not loser.is_alive: | |
print(f"{loser.name}因失血过多死亡了!") | |
character_die(loser) | |
return | |
def set_battle_rate(self, probability): | |
self.probability = probability | |
# 统一插件接口 | |
def execute(self, *args, **kwargs): | |
self.perform_battles(*args, **kwargs) |