编辑代码

import random
import time

class Knight:
    def __init__(self, name):
        self.name = name
        self.health = 100
        self.max_health = 100
        self.attack_power = 20
        self.defense = 10
        self.gold = 0
        self.experience = 0
        self.level = 1
        self.agility = 10  # 敏捷,影响闪避和出手速度
        self.critical_chance = 5  # 暴击几率
        self.critical_damage = 150  # 暴击伤害倍数
        self.accuracy = 90  # 命中几率
        self.skills = []
        self.inventory = []  # 背包,用于存储物品

    def level_up(self):
        if self.experience >= 100 * self.level:
            self.level += 1
            self.health += 20
            self.max_health += 20
            self.attack_power += 5
            self.defense += 3
            self.agility += 2
            self.critical_chance += 1
            self.critical_damage += 10
            self.accuracy += 2
            self.experience = 0
            print(f"{self.name} 升级到了 {self.level} 级!")

    def attack(self, enemy):
        hit_chance = random.randint(1, 100)
        if hit_chance <= self.accuracy:
            damage = self.attack_power - enemy.defense
            critical_hit = random.randint(1, 100) <= self.critical_chance
            if critical_hit:
                damage *= self.critical_damage / 100
                print(f"{self.name} 打出了暴击,对 {enemy.name} 造成了 {damage} 点高额伤害。")
            else:
                if damage > 0:
                    enemy.health -= damage
                    print(f"{self.name}{enemy.name} 造成了 {damage} 点伤害。")
                else:
                    print(f"{self.name} 的攻击被 {enemy.name} 抵挡。")
        else:
            print(f"{self.name} 的攻击未命中 {enemy.name}。")

    def defend(self):
        self.defense += 5
        print(f"{self.name} 进行防御,防御值增加 5。")

    def recover_health(self, amount):
        self.health += amount
        if self.health > self.max_health:
            self.health = self.max_health
        print(f"{self.name} 恢复了 {amount} 点生命值。")

    def learn_skill(self, skill):
        self.skills.append(skill)
        print(f"{self.name} 学会了新技能:{skill.name}")

    def status(self):
        print(f"{self.name} 的等级:{self.level}")
        print(f"生命值:{self.health}/{self.max_health}")
        print(f"攻击:{self.attack_power}")
        print(f"防御:{self.defense}")
        print(f"敏捷:{self.agility}")
        print(f"暴击几率:{self.critical_chance}%")
        print(f"暴击伤害:{self.critical_damage}%")
        print(f"命中几率:{self.accuracy}%")
        print(f"金币:{self.gold}")
        print(f"经验:{self.experience}")
        print("已学会的技能:")
        for skill in self.skills:
            print(f"- {skill.name}")
        print("背包中的物品:")
        for item in self.inventory:
            print(f"- {item}")

class Skill:
    def __init__(self, name, description, damage_bonus, cooldown):
        self.name = name
        self.description = description
        self.damage_bonus = damage_bonus
        self.cooldown = cooldown
        self.last_used = 0

class Enemy:
    def __init__(self, name, health, attack_power, defense, agility, critical_chance, critical_damage, accuracy, skills):
        self.name = name
        self.health = health
        self.max_health = health
        self.attack_power = attack_power
        self.defense = defense
        self.agility = agility
        self.critical_chance = critical_chance
        self.critical_damage = critical_damage
        self.accuracy = accuracy
        self.skills = skills

    def attack(self, knight):
        hit_chance = random.randint(1, 100)
        if hit_chance <= self.accuracy:
            damage = self.attack_power - knight.defense
            critical_hit = random.randint(1, 100) <= self.critical_chance
            if critical_hit:
                damage *= self.critical_damage / 100
                print(f"{self.name} 打出了暴击,对 {knight.name} 造成了 {damage} 点高额伤害。")
            else:
                if damage > 0:
                    knight.health -= damage
                    print(f"{self.name}{knight.name} 造成了 {damage} 点伤害。")
                else:
                    print(f"{self.name} 的攻击被 {knight.name} 抵挡。")
        else:
            print(f"{self.name} 的攻击未命中 {knight.name}。")

    def use_skill(self, knight):
        if self.skills:
            skill = random.choice(self.skills)
            if time.time() - skill.last_used >= skill.cooldown:
                skill.last_used = time.time()
                damage = skill.damage_bonus
                knight.health -= damage
                print(f"{self.name} 使用了技能 {skill.name},对 {knight.name} 造成了 {damage} 点伤害。")

    def status(self):
        print(f"{self.name} 的生命值:{self.health}/{self.max_health}")
        print(f"攻击:{self.attack_power}")
        print(f"防御:{self.defense}")
        print(f"敏捷:{self.agility}")
        print(f"暴击几率:{self.critical_chance}%")
        print(f"暴击伤害:{self.critical_damage}%")
        print(f"命中几率:{self.accuracy}%")

class Task:
    def __init__(self, name, description, reward_gold, reward_experience, required_level, reward_item):
        self.name = name
        self.description = description
        self.reward_gold = reward_gold
        self.reward_experience = reward_experience
        self.required_level = required_level
        self.reward_item = reward_item  # 完成任务可能获得的物品

# 技能示例
fire_ball_skill = Skill("火球术", "发射一个火球造成额外伤害", 30, 5)
lightning_strike_skill = Skill("闪电击", "召唤闪电攻击敌人", 25, 4)

# 敌人技能示例
poison_sting_skill = Skill("毒刺", "使目标中毒持续掉血", 15, 3)
frenzy_attack_skill = Skill("狂攻", "大幅提高攻击,持续一段时间", 20, 6)

# 任务列表
tasks = [
    Task("打败山贼头目", "山贼头目在山中为非作歹,快去消灭他", 80, 100, 1, "神秘宝剑"),
    Task("解救武林世家", "一个武林世家被恶势力围困,等待你的救援", 120, 180, 2, "疗伤神丹"),
    Task("挑战江湖恶霸", "江湖恶霸欺压百姓,展现你的正义", 150, 250, 3, "绝世秘籍")
]

# 商店物品
shop_items = [
    ("锋利宝剑", 100, 20),
    ("坚固铠甲", 150, 25),
    ("特效疗伤药", 50, 0)
]

def main():
    print("欢迎来到中国侠客世界!")
    name = input("请输入你的侠客名字:")
    player = Knight(name)

    while player.health > 0:
        print("1. 查看状态")
        print("2. 接取任务")
        print("3. 进入商店")
        print("4. 战斗")

        choice = int(input("选择操作(输入数字):"))

        if choice == 1:
            player.status()
        elif choice == 2:
            print("可选任务:")
            for i, task in enumerate(tasks, 1):
                if player.level >= task.required_level:
                    print(f"{i}. {task.name}: {task.description}")
            task_choice = int(input("选择任务(输入数字):"))
            selected_task = tasks[task_choice - 1]
            if player.level >= selected_task.required_level:
                print(f"你接取了 {selected_task.name} 任务。")
                enemy = Enemy(selected_task.name, 150 + selected_task.reward_experience // 10, 30 + selected_task.reward_experience // 20, 10 + selected_task.reward_experience // 40, 8 + selected_task.reward_experience // 20, 3 + selected_task.reward_experience // 40, 120 + selected_task.reward_experience // 20, 80 + selected_task.reward_experience // 10, [poison_sting_skill, frenzy_attack_skill])
                while enemy.health > 0 and player.health > 0:
                    print("1. 普通攻击")
                    print("2. 防御")
                    print("3. 使用技能")
                    action_choice = int(input("选择行动(输入数字):"))
                    if action_choice == 1:
                        player.attack(enemy)
                    elif action_choice == 2:
                        player.defend()
                    elif action_choice == 3:
                        if player.skills:
                            print("可选技能:")
                            for i, skill in enumerate(player.skills, 1):
                                print(f"{i}. {skill.name}")
                            skill_choice = int(input("选择使用的技能(输入数字):"))
                            selected_skill = player.skills[skill_choice - 1]
                            if time.time() - selected_skill.last_used >= selected_skill.cooldown:
                                damage = player.attack_power + selected_skill.damage_bonus - enemy.defense
                                if damage > 0:
                                    enemy.health -= damage
                                    print(f"{player.name} 使用 {selected_skill.name}{enemy.name} 造成了 {damage} 点伤害。")
                                    selected_skill.last_used = time.time()
                                else:
                                    print(f"{player.name} 的技能被 {enemy.name} 抵挡。")
                            else:
                                print("技能还在冷却中,请稍后使用。")
                    if enemy.health > 0:
                        enemy_attack_chance = random.randint(1, 2)
                        if enemy_attack_chance == 1:
                            enemy.attack(player)
                        enemy.use_skill(player)
                if player.health > 0:
                    player.gold += selected_task.reward_gold
                    player.experience += selected_task.reward_experience
                    player.inventory.append(selected_task.reward_item)  # 将任务奖励物品添加到背包
                    print(f"你成功完成了 {selected_task.name} 任务,获得了 {selected_task.reward_gold} 金币、{selected_task.reward_experience} 经验和 {selected_task.reward_item}。")
                    player.level_up()
                else:
                    print("你在任务中失败了,大侠请重新来过。")
            else:
                print("你的等级不足,无法接取该任务。")
        elif choice == 3:
            print("商店物品:")
            for i, item in enumerate(shop_items, 1):
                print(f"{i}. {item[0]}: 价格 {item[1]} 金币,效果 {item[2]}")
            shop_choice = int(input("选择购买物品(输入数字):"))
            selected_item = shop_items[shop_choice - 1]
            if player.gold >= selected_item[1]:
                player.gold -= selected_item[1]
                if selected_item[2] > 0:
                    player.attack_power += selected_item[2]
                print(f"你购买了 {selected_item[0]}")
            else:
                print("你的金币不足,无法购买。")
        elif choice == 4:
            enemy = Enemy("随机敌人", random.randint(80, 120), random.randint(20, 30), random.randint(8, 15), random.randint(5, 15), random.randint(2, 8), random.randint(100, 180), random.randint(70, 90), [poison_sting_skill, frenzy_attack_skill])
            while enemy.health > 0 and player.health > 0:
                print("1. 普通攻击")
                print("2. 防御")
                print("3. 使用技能")
                action_choice = int(input("选择行动(输入数字):"))
                if action_choice == 1:
                    player.attack(enemy)
                elif action_choice == 2:
                    player.defend()
                elif action_choice == 3:
                    if player.skills:
                        print("可选技能:")
                        for i, skill in enumerate(player.skills, 1):
                            print(f"{i}. {skill.name}")
                        skill_choice = int(input("选择使用的技能(输入数字):"))
                        selected_skill = player.skills[skill_choice - 1]
                        if time.time() - selected_skill.last_used >= selected_skill.cooldown:
                            damage = player.attack_power + selected_skill.damage_bonus