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