import random
import time
class StatusEffect:
"""状态效果类,用于实现buff和debuff"""
def __init__(self, name, duration, effect_type, value, source=None):
self.name = name
self.duration = duration # 持续回合数
self.effect_type = effect_type # "damage", "heal", "attack_buff", "defense_buff"等
self.value = value # 效果值
self.source = source # 效果来源
def apply(self, target):
if self.effect_type == "damage":
damage = max(0, self.value - target.defense // 4)
target.hp -= damage
print(f"{target.name}受到{self.name}伤害,损失{damage}点生命值")
elif self.effect_type == "heal":
heal = self.value
target.hp = min(target.max_hp, target.hp + heal)
print(f"{target.name}获得{self.name}治疗,恢复{heal}点生命值")
elif self.effect_type == "attack_buff":
target.attack += self.value
print(f"{target.name}获得{self.name},攻击力提升{self.value}")
elif self.effect_type == "defense_buff":
target.defense += self.value
print(f"{target.name}获得{self.name},防御力提升{self.value}")
elif self.effect_type == "attack_debuff":
target.attack -= self.value
print(f"{target.name}受到{self.name}影响,攻击力降低{self.value}")
def tick(self):
"""每回合减少持续时间,返回是否已结束"""
self.duration -= 1
return self.duration <= 0
class Hero:
def __init__(self, name, hp, attack, defense, skills, passive=None):
self.name = name
self.max_hp = hp
self.hp = hp
self.attack = attack
self.defense = defense
self.skills = skills
self.passive = passive # 被动技能
self.level = 1
self.exp = 0
self.gold = 300 # 初始金币
self.skill_cooldowns = [0] * len(self.skills) # 技能冷却
self.status_effects = [] # 状态效果列表
self.equipment = [] # 装备列表
self.max_equipment = 6 # 最大装备数量
self.turn_count = 0 # 回合计数,用于被动技能
def level_up(self):
self.level += 1
self.max_hp += 100 + self.level * 20
self.hp = self.max_hp
self.attack += 20 + self.level * 5
self.defense += 10 + self.level * 3
print(f"\n{self.name} 升级到 {self.level} 级!属性大幅提升!")
print(f"生命值: {self.max_hp} 攻击: {self.attack} 防御: {self.defense}")
def gain_exp(self, amount):
self.exp += amount
print(f"{self.name} 获得 {amount} 经验值")
required_exp = self.level * 100 + (self.level - 1) * 50
if self.exp >= required_exp:
self.level_up()
self.exp -= required_exp
def gain_gold(self, amount):
self.gold += amount
print(f"{self.name} 获得 {amount} 金币")
def attack_enemy(self, enemy):
# 应用被动技能效果(例如暴击)
damage = max(0, self.attack - enemy.defense // 2)
# 检查是否触发暴击(后羿被动)
crit_chance = 0
if self.name == "后羿":
crit_chance = 10 + (self.level - 1) * 2 # 每级增加2%暴击率
if random.randint(1, 100) <= crit_chance:
damage = int(damage * 1.5)
print(f"暴击!", end=" ")
enemy.hp -= damage
print(f"{self.name} 对 {enemy.name} 造成 {damage} 点伤害")
# 应用妲己被动:减少目标防御
if self.name == "妲己" and enemy.hp > 0:
enemy.add_status_effect(StatusEffect(
"失心", 3, "defense_debuff", 15 + self.level * 5, self))
if enemy.hp <= 0:
exp_gain = enemy.level * 50 + random.randint(0, 20)
gold_gain = enemy.level * 30 + random.randint(0, 15)
print(f"{self.name} 击败了 {enemy.name},获得 {exp_gain} 经验和 {gold_gain} 金币")
self.gain_exp(exp_gain)
self.gain_gold(gold_gain)
return True
return False
def use_skill(self, skill_index, enemy):
# 检查冷却
if self.skill_cooldowns[skill_index] > 0:
print(f"技能 {self.skills[skill_index]['name']} 正在冷却中,剩余{self.skill_cooldowns[skill_index]}回合")
return False
skill = self.skills[skill_index]
print(f"{self.name} 使用技能 {skill['name']}")
# 计算技能伤害
damage = skill['base_damage'] + self.attack * skill['attack_ratio']
damage = max(0, damage - enemy.defense // 3) # 技能伤害受防御影响较小
enemy.hp -= damage
# 技能特效
if 'effect' in skill:
effect = skill['effect']
if effect['type'] == "stun":
enemy.add_status_effect(StatusEffect(
"眩晕", effect['duration'], "stun", effect['value'], self))
print(f"{enemy.name}被眩晕了,无法行动{effect['duration']}回合!")
elif effect['type'] == "poison":
enemy.add_status_effect(StatusEffect(
"中毒", effect['duration'], "damage", effect['value'], self))
print(f"{enemy.name}中毒了,将持续受到伤害!")
elif effect['type'] == "heal":
heal_amount = self.max_hp * effect['ratio']
self.hp = min(self.max_hp, self.hp + heal_amount)
print(f"{self.name} 恢复了 {int(heal_amount)} 点生命值")
elif effect['type'] == "attack_buff":
self.add_status_effect(StatusEffect(
"攻击力提升", effect['duration'], "attack_buff", effect['value'], self))
print(f"{skill['name']} 对 {enemy.name} 造成 {damage} 点伤害")
# 设置冷却时间
self.skill_cooldowns[skill_index] = skill.get('cooldown', 3)
if enemy.hp <= 0:
exp_gain = enemy.level * 50 + random.randint(0, 20)
gold_gain = enemy.level * 30 + random.randint(0, 15)
print(f"{self.name} 击败了 {enemy.name},获得 {exp_gain} 经验和 {gold_gain} 金币")
self.gain_exp(exp_gain)
self.gain_gold(gold_gain)
return True
return False
def buy_item(self, item):
if len(self.equipment) >= self.max_equipment:
print("装备栏已满!无法购买更多装备")
return False
if self.gold >= item['cost']:
self.gold -= item['cost']
self.attack += item.get('attack', 0)
self.defense += item.get('defense', 0)
self.max_hp += item.get('hp', 0)
self.hp += item.get('hp', 0)
# 装备特效
if 'effect' in item:
self.add_status_effect(StatusEffect(
item['name'] + "特效", 9999, item['effect']['type'],
item['effect']['value'], self))
print(f"{item['name']}的特效激活: {item['effect']['desc']}")
self.equipment.append(item["name"])
print(f"{self.name} 购买了 {item['name']}")
return True
else:
print("金币不足!无法购买")
return False
def show_status(self):
status_text = f"{self.name} Lv.{self.level} HP: {self.hp}/{self.max_hp} 攻击: {self.attack} 防御: {self.defense} 金币: {self.gold}"
# 显示状态效果
if self.status_effects:
status_text += " 状态: "
for effect in self.status_effects:
status_text += f"{effect.name}({effect.duration}) "
# 显示�