当前位置:首页 / 文章测试 /

开始打字练习

import random

import time

from typing import List, Dict, Callable

class Skill:

def __init__(self, name: str, description: str, cost: int, effect: Callable):

self.name = name

self.description = description

self.mana_cost = cost

self.effect = effect # 效果函数,接收施法者和目标作为参数

class Character:

def __init__(self, name: str, health: int, mana: int, attack: int, defense: int):

self.name = name

self.health = health

self.max_health = health

self.mana = mana

self.max_mana = mana

self.attack = attack

self.defense = defense

self.skills: List[Skill] = []

def is_alive(self) -> bool:

return self.health > 0

def take_damage(self, amount: int) -> int:

actual = max(1, amount - self.defense // 2)

self.health = max(0, self.health - actual)

return actual

def restore_mana(self, amount: int) -> int:

restored = min(amount, self.max_mana - self.mana)

self.mana += restored

return restored

class Player(Character):

def __init__(self, name: str, faction: str):

# 根据阵营设定不同基础属性

if faction == "圣殿骑士":

super().__init__(name, 150, 60, 12, 10)

elif faction == "暗影兄弟会":

super().__init__(name, 100, 100, 15, 5)

else: # 法师议会

super().__init__(name, 80, 150, 8, 7)

self.faction = faction

self.level = 1

self.exp = 0

self.choices: Dict[str, str] = {} # 记录关键选择

self.inventory = {"治疗药水": 2}

# 初始技能

self._init_faction_skills()

def _init_faction_skills(self):

if self.faction == "圣殿骑士":

self.skills.append(Skill(

"神圣打击", "造成1.5倍伤害,恢复少量生命值", 10,

lambda caster, target: [

target.take_damage(int(caster.attack * 1.5)),

caster.take_damage(-5) # 负伤害即治疗

]

))

elif self.faction == "暗影兄弟会":

self.skills.append(Skill(

"潜行突袭", "高概率造成双倍伤害,失败则自身受伤", 15,

lambda caster, target: [

target.take_damage(caster.attack * 2) if random.random() > 0.3

else caster.take_damage(5)

]

))

else:

self.skills.append(Skill(

"火球术", "造成范围伤害", 20,

lambda caster, target: target.take_damage(caster.attack * 2)

))

def gain_exp(self, amount: int) -> bool:

self.exp += amount

if self.exp >= self.level * 100:

self.level_up()

return True

return False

def level_up(self):

self.level += 1

self.exp -= (self.level - 1) * 100

self.max_health += 30

self.health = self.max_health

self.max_mana += 20

self.mana = self.max_mana

self.attack += 3

self.defense += 2

# 升级解锁技能

if self.level == 3:

self._unlock_skill()

print(f"\n你升级到了{self.level}级!属性大幅提升!")

def _unlock_skill(self):

if self.faction == "圣殿骑士":

skill = Skill("守护光环", "大幅提升防御力3回合", 25,

lambda caster, _: setattr(caster, 'defense', caster.defense * 2))

elif self.faction == "暗影兄弟会":

skill = Skill("毒刃", "造成持续伤害", 20,

lambda _, target: [target.take_damage(5) for _ in range(3)])

else:

skill = Skill("魔法护盾", "吸收伤害", 30,

lambda caster, _: setattr(caster, 'defense', caster.defense + 10))

self.skills.append(skill)

print(f"你学会了新技能: {skill.name} - {skill.description}")

class Enemy(Character):

def __init__(self, name: str, level: int, is_boss: bool = False):

health = 50 + level * 20

attack = 8 + level * 3

defense = 3 + level * 1

mana = 30 + level * 10 if not is_boss else 100 + level * 20

super().__init__(name, health, mana, attack, defense)

self.is_boss = is_boss

self.exp_reward = 50 + level * 20

self.turns_in_defense = 0

if is_boss:

self.max_health *= 2

self.health = self.max_health

self.attack *= 1.5

self._add_boss_skills()

def _add_boss_skills(self):

self.skills.append(Skill(

"狂怒一击", "造成巨大伤害但消耗大量魔力", 30,

lambda caster, target: target.take_damage(int(caster.attack * 2))

))

def print_dramatic(text: str, delay: float = 0.08) -> None:

"""带有戏剧效果的文本打印"""

print("\n" + "=" * 40)

for char in text:

print(char, end='', flush=True)

time.sleep(delay)

print("\n" + "=" * 40 + "\n")

time.sleep(1)

def print_slow(text: str, delay: float = 0.05) -> None:

for char in text:

print(char, end='', flush=True)

time.sleep(delay)

print()

def battle(player: Player, enemy: Enemy) -> bool:

print_slow(f"\n遭遇了{enemy.name}!{'这是一场BOSS战!' if enemy.is_boss else ''}")

turns = 0

while player.is_alive() and enemy.is_alive():

turns += 1

print_slow(f"\n----- 第{turns}回合 -----")

print_slow(f"你的状态: 生命 {player.health}/{player.max_health} 魔力 {player.mana}/{player.max_mana}")

print_slow(f"{enemy.name}状态: 生命 {enemy.health}/{enemy.max_health}")

# 玩家行动

print_slow("\n选择行动:")

print_slow("1. 普通攻击")

print_slow("2. 使用技能")

print_slow("3. 使用物品")

print_slow("4. 交谈 (仅对部分敌人有效)")

choice = input("你的选择: ")

if choice == "1":

damage = random.randint(player.attack - 2, player.attack + 2)

actual = enemy.take_damage(damage)

print_slow(f"你对{enemy.name}造成了{actual}点伤害!")

elif choice == "2":

if not player.skills:

print_slow("你还没有学会任何技能!")

continue

print_slow("可用技能:")

for i, skill in enumerate(player.skills, 1):

print_slow(f"{i}. {skill.name} - {skill.description} (消耗{skill.mana_cost}魔力)")

skill_choice = input("选择技能: ")

try:

skill = player.skills[int(skill_choice) - 1]

if player.mana >= skill.mana_cost:

player.mana -= skill.mana_cost

print_slow(f"你使用了{skill.name}!")

skill.effect(player, enemy)

else:

print_slow("魔力不足,无法使用技能!")

except:

print_slow("无效选择!")

elif choice == "3":

if not player.inventory:

print_slow("背包空空如也!")

continue

print_slow("物品:")

for i, (item, count) in enumerate(player.inventory.items(), 1):

print_slow(f"{i}. {item} (x{count})")

item_choice = input("选择物品: ")

try:

item = list(player.inventory.keys())[int(item_choice) - 1]

if item == "治疗药水":

player.health = min(player.max_health, player.health + 50)

player.inventory[item] -= 1

if player.inventory[item] == 0:

del player.inventory[item]

print_slow("你使用了治疗药水,恢复了50点生命!")

except:

print_slow("无效选择!")

elif choice == "4":

# 特定敌人可以交谈

if "守卫" in enemy.name or "信使" in enemy.name:

print_slow(f"{enemy.name}: '你来这里做什么?'")

response = input("你的回应: ")

if any(word in response.lower() for word in ["和平", "任务", "联盟"]):

print_slow(f"{enemy.name}似乎被说服了,让开了道路!")

return True

else:

print_slow(f"{enemy.name}被激怒了!")

else:

print_slow("这个敌人无法沟通!")

else:

print_slow("犹豫不决让你失去了行动机会!")

# 敌人行动

if enemy.is_alive():

if enemy.is_boss and enemy.mana > 30 and random.random() < 0.3:

# BOSS使用技能

skill = enemy.skills[0]

enemy.mana -= skill.mana_cost

print_slow(f"{enemy.name}使用了{skill.name}!")

skill.effect(enemy, player)

else:

damage = random.randint(int(enemy.attack * 0.8), int(enemy.attack * 1.2))

actual = player.take_damage(damage)

print_slow(f"{enemy.name}对你造成了{actual}点伤害!")

if not player.is_alive():

print_slow("你倒下了...")

return False

# 每回合恢复少量魔力

player.restore_mana(3)

enemy.restore_mana(2)

# 战斗胜利

print_slow(f"你成功击败了{enemy.name}!")

player.gain_exp(enemy.exp_reward)

return True

def story_chapter(chapter: int, player: Player) -> bool:

"""剧情章节,返回是否继续游戏"""

if chapter == 1:

print_dramatic("第一章:起源")

print_slow("你站在十字路口,三个阵营的使者在等待你的选择...")

print_slow("1. 圣殿骑士 - 崇尚正义与秩序,擅长防御与治疗")

print_slow("2. 暗影兄弟会 - 信奉力量与隐秘,擅长突袭与诡计")

print_slow("3. 法师议会 - 追求知识与魔法,擅长元素攻击与控制")

# 阵营选择已在初始化完成,这里直接推进剧情

print_slow(f"\n你选择了加入{player.faction},开始了你的冒险...")

return battle(player, Enemy("森林守卫", 1))

elif chapter == 2:

print_dramatic("第二章:背叛的迹象")

print_slow("你来到边境小镇,村民们神色慌张...")

print_slow("村长:'黑暗正在蔓延,我们的信使失踪了!'")

choice = input("你要:1. 立即寻找信使 2. 先调查小镇周边: ")

player.choices["chapter2"] = choice

enemy = Enemy("堕落的猎人", 2) if choice == "1" else Enemy("变异的狼", 2)

return battle(player, enemy)

elif chapter == 3:

print_dramatic("第三章:古老的秘密")

print_slow("你发现了一座古老的神殿,里面有一个神秘的祭坛...")

print_slow("祭坛上有三个物品:1. 发光的宝石 2. 生锈的剑 3. 密封的卷轴")

choice = input("你选择拿起:")

player.choices["chapter3"] = choice

if choice == "1":

player.mana += 50

print_slow("宝石融入你的身体,魔力大幅提升!")

elif choice == "2":

player.attack += 5

print_slow("剑变得锋利,你的攻击力提升了!")

else:

player.defense += 5

print_slow("卷轴传授了你防御的秘诀!")

return battle(player, Enemy("神殿守护者", 3, is_boss=True))

elif chapter == 4:

print_dramatic("第四章:最终决战")

print_slow("你终于找到了黑暗之源,一个巨大的阴影出现在你面前...")

return battle(player, Enemy("暗影领主", 5, is_boss=True))

def determine_ending(player: Player) -> str:

"""根据玩家选择决定结局"""

if "chapter2" not in player.choices:

return "你在中途放弃了冒险,成为了一个传说中的谜..."

if player.faction == "圣殿骑士":

return "你净化了黑暗,建立了新的秩序,成为了人们敬仰的英雄。" if player.choices["chapter2"] == "1" \

else "你选择了谨慎行事,虽然拯救了世界,但人们对你的评价褒贬不一。"

elif player.faction == "暗影兄弟会":

return "你吸收了暗影领主的力量,成为了新的黑暗统治者。" if player.choices["chapter3"] == "2" \

else "你选择了不同的道路,成为了一个亦正亦邪的孤独游侠。"

else:

return "你用魔法封印了黑暗,建立了新的魔法学院,培养了无数魔法师。" if player.choices["chapter3"] == "3" \

else "你选择了研究黑暗魔法,最终成为了一个神秘的隐士。"

def main():

print_dramatic("史诗冒险:暗影与光明")

name = input("请输入你的名字: ")

print_slow("\n请选择你的阵营:")

print_slow("1. 圣殿骑士")

print_slow("2. 暗影兄弟会")

print_slow("3. 法师议会")

faction_choices = {

"1": "圣殿骑士",

"2": "暗影兄弟会",

"3": "法师议会"

}

faction = faction_choices.get(input("选择: "), "圣殿骑士")

player = Player(name, faction)

input("\n按回车键开始你的冒险...")

# 游戏主流程

for chapter in range(1, 5):

if not story_chapter(chapter, player):

print_dramatic("冒险提前结束")

print_slow(f"{player.name}的故事在这里画上了句号...")

return

if chapter < 4:

print_slow("\n准备好继续前进了吗?")

input("按回车键进入下一章...")

# 结局

print_dramatic("结局")

print_slow(determine_ending(player))

print_slow(f"你的最终等级: {player.level}")

print_slow("感谢体验这场冒险!")

if __name__ == "__main__":

main()

声明:以上文章均为用户自行发布,仅供打字交流使用,不代表本站观点,本站不承担任何法律责任,特此声明!如果有侵犯到您的权利,请及时联系我们删除。