当前位置:首页 / 文章测试 / M,N.

M,N.

开始打字练习

import random

import time

class Item:

"""装备类,包含武器和防具"""

def __init__(self, name, item_type, attack_bonus=0, defense_bonus=0, description=""):

self.name = name

self.item_type = item_type # "weapon" 或 "armor"

self.attack_bonus = attack_bonus

self.defense_bonus = defense_bonus

self.description = description

def __str__(self):

if self.item_type == "weapon":

return f"{self.name} (武器): +{self.attack_bonus} 攻击 | {self.description}"

else:

return f"{self.name} (防具): +{self.defense_bonus} 防御 | {self.description}"

class Skill:

"""技能类"""

def __init__(self, name, damage, mp_cost, accuracy=100, description=""):

self.name = name

self.damage = damage

self.mp_cost = mp_cost

self.accuracy = accuracy # 命中率百分比

self.description = description

def __str__(self):

return f"{self.name}: 伤害 {self.damage}, 消耗 MP {self.mp_cost}, 命中率 {self.accuracy}% | {self.description}"

class Character:

"""角色基类,玩家和怪物都继承自此"""

def __init__(self, name, hp, mp, attack, defense, speed):

self.name = name

self.max_hp = hp

self.hp = hp

self.max_mp = mp

self.mp = mp

self.base_attack = attack

self.base_defense = defense

self.speed = speed

self.skills = []

self.weapon = None

self.armor = None

@property

def total_attack(self):

"""计算总攻击力(基础攻击+武器加成)"""

bonus = self.weapon.attack_bonus if self.weapon else 0

return self.base_attack + bonus

@property

def total_defense(self):

"""计算总防御力(基础防御+防具加成)"""

bonus = self.armor.defense_bonus if self.armor else 0

return self.base_defense + bonus

def is_alive(self):

"""检查角色是否存活"""

return self.hp > 0

def take_damage(self, damage):

"""受到伤害"""

# 伤害不会低于1

actual_damage = max(1, damage - self.total_defense)

self.hp = max(0, self.hp - actual_damage)

return actual_damage

def use_skill(self, skill, target):

"""使用技能攻击目标"""

if self.mp < skill.mp_cost:

print(f"{self.name}的MP不足,无法使用{skill.name}!")

return False

self.mp -= skill.mp_cost

print(f"{self.name}使用了{skill.name}!")

# 检查技能是否命中

if random.randint(1, 100) <= skill.accuracy:

damage = skill.damage

actual_damage = target.take_damage(damage)

print(f"{target.name}受到了{actual_damage}点伤害!")

return True

else:

print(f"{skill.name}没有命中!")

return False

def basic_attack(self, target):

"""基础攻击"""

damage = self.total_attack

actual_damage = target.take_damage(damage)

print(f"{self.name}对{target.name}进行了普通攻击!")

print(f"{target.name}受到了{actual_damage}点伤害!")

return actual_damage

def __str__(self):

return (f"{self.name} - HP: {self.hp}/{self.max_hp} | MP: {self.mp}/{self.max_mp} | "

f"攻击: {self.total_attack} | 防御: {self.total_defense} | 速度: {self.speed}")

class Player(Character):

"""玩家类"""

def __init__(self, name):

# 初始属性

super().__init__(name, hp=100, mp=50, attack=15, defense=5, speed=8)

self.inventory = []

self.level = 1

self.exp = 0

self.exp_to_next_level = 50

# 初始技能

self.skills.append(Skill("火球术", 20, 10, 90, "释放一个火球攻击敌人"))

self.skills.append(Skill("重击", 25, 5, 80, "强力的一击,但命中率较低"))

def add_exp(self, amount):

"""增加经验值,可能升级"""

self.exp += amount

print(f"获得了{amount}点经验值!")

while self.exp >= self.exp_to_next_level:

self.level_up()

def level_up(self):

"""升级,提升属性"""

self.level += 1

self.exp -= self.exp_to_next_level

self.exp_to_next_level = int(self.exp_to_next_level * 1.5)

# 属性提升

self.max_hp += 30

self.hp = self.max_hp

self.max_mp += 15

self.mp = self.max_mp

self.base_attack += 5

self.base_defense += 3

self.speed += 1

print(f"恭喜!{self.name}升级到了{self.level}级!")

print(f"属性提升:HP+30, MP+15, 攻击+5, 防御+3, 速度+1")

def add_item(self, item):

"""添加物品到背包"""

self.inventory.append(item)

print(f"获得了{item.name}!")

def equip_item(self, index):

"""装备物品"""

if 0 <= index < len(self.inventory):

item = self.inventory[index]

if item.item_type == "weapon":

if self.weapon:

print(f"卸下了{self.weapon.name}")

self.weapon = item

print(f"装备了{self.weapon.name}")

elif item.item_type == "armor":

if self.armor:

print(f"卸下了{self.armor.name}")

self.armor = item

print(f"装备了{self.armor.name}")

return True

return False

def show_inventory(self):

"""显示背包"""

if not self.inventory:

print("背包是空的")

return False

print("\n===== 背包 =====")

for i, item in enumerate(self.inventory):

print(f"{i+1}. {item}")

print("================")

return True

class Monster(Character):

"""怪物类"""

def __init__(self, name, level):

# 根据等级生成属性

hp = 30 + level * 15

mp = 10 + level * 5

attack = 8 + level * 3

defense = 2 + level * 2

speed = 5 + level * 1

super().__init__(name, hp, mp, attack, defense, speed)

# 怪物可能拥有的技能

if level >= 2:

self.skills.append(Skill("爪击", 10 + level * 2, 3, 95, "用锋利的爪子攻击"))

if level >= 3:

self.skills.append(Skill("咆哮", 5 + level * 3, 5, 85, "发出震耳欲聋的咆哮"))

def get_reward(self):

"""返回击败怪物的奖励"""

exp = 10 + self.level * 15

gold = 5 + self.level * 5

# 随机掉落物品

item_chance = random.randint(1, 10)

item = None

if item_chance >= 8: # 20%的几率掉落物品

item_types = [

Item("铁剑", "weapon", 5 + self.level, 0, "一把坚固的铁剑"),

Item("皮甲", "armor", 0, 3 + self.level, "由坚韧皮革制成的护甲"),

Item("钢斧", "weapon", 7 + self.level, 0, "锋利的钢斧,伤害更高"),

Item("链甲", "armor", 0, 5 + self.level, "由金属链制成的护甲")

]

item = random.choice(item_types)

return exp, gold, item

def create_random_monster(level):

"""创建随机怪物"""

monster_names = [

"哥布林", "狼人", "骷髅兵", "史莱姆", "蜘蛛",

"食人魔", "吸血鬼", "僵尸", "巫师", "巨龙"

]

# 怪物等级在玩家等级附近波动

monster_level = max(1, level + random.randint(-1, 1))

name = random.choice(monster_names)

# 如果是精英怪,属性更强

is_elite = random.randint(1, 10) == 1 # 10%几率是精英怪

if is_elite:

monster = Monster(f"精英{name}", monster_level + 1)

monster.max_hp = int(monster.max_hp * 1.5)

monster.hp = monster.max_hp

monster.base_attack = int(monster.base_attack * 1.3)

return monster

return Monster(name, monster_level)

def battle(player, monster):

"""战斗系统"""

print(f"\n遭遇了{monster.name}!")

print(f"{monster.name} - 等级 {monster.level}")

# 决定先手

if player.speed >= monster.speed:

first, second = player, monster

else:

first, second = monster, player

# 战斗循环

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

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

print(f"{player.name}状态: HP {player.hp}/{player.max_hp} | MP {player.mp}/{player.max_mp}")

print(f"{monster.name}状态: HP {monster.hp}/{monster.max_hp}")

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

# 先手行动

if first == player:

# 玩家回合

print("你的回合!")

print("1. 普通攻击")

print("2. 使用技能")

choice = input("选择行动: ")

if choice == "1":

player.basic_attack(monster)

elif choice == "2":

if not player.skills:

print("你没有任何技能!")

player.basic_attack(monster)

else:

print("选择技能:")

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

print(f"{i+1}. {skill}")

skill_choice = input("输入技能编号: ")

try:

skill_index = int(skill_choice) - 1

if 0 <= skill_index < len(player.skills):

player.use_skill(player.skills[skill_index], monster)

else:

print("无效的选择,将进行普通攻击")

player.basic_attack(monster)

except ValueError:

print("无效的输入,将进行普通攻击")

player.basic_attack(monster)

else:

print("无效的选择,将进行普通攻击")

player.basic_attack(monster)

else:

# 怪物回合

print(f"{monster.name}的回合!")

time.sleep(1)

# 怪物有30%几率使用技能

if monster.skills and random.randint(1, 10) <= 3 and monster.mp >= monster.skills[0].mp_cost:

skill = random.choice(monster.skills)

monster.use_skill(skill, player)

else:

monster.basic_attack(player)

# 检查是否有角色已死亡

if not player.is_alive() or not monster.is_alive():

break

# 后手行动

if second == player:

# 玩家回合

print("你的回合!")

print("1. 普通攻击")

print("2. 使用技能")

choice = input("选择行动: ")

if choice == "1":

player.basic_attack(monster)

elif choice == "2":

if not player.skills:

print("你没有任何技能!")

player.basic_attack(monster)

else:

print("选择技能:")

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

print(f"{i+1}. {skill}")

skill_choice = input("输入技能编号: ")

try:

skill_index = int(skill_choice) - 1

if 0 <= skill_index < len(player.skills):

player.use_skill(player.skills[skill_index], monster)

else:

print("无效的选择,将进行普通攻击")

player.basic_attack(monster)

except ValueError:

print("无效的输入,将进行普通攻击")

player.basic_attack(monster)

else:

print("无效的选择,将进行普通攻击")

player.basic_attack(monster)

else:

# 怪物回合

print(f"{monster.name}的回合!")

time.sleep(1)

# 怪物有30%几率使用技能

if monster.skills and random.randint(1, 10) <= 3 and monster.mp >= monster.skills[0].mp_cost:

skill = random.choice(monster.skills)

monster.use_skill(skill, player)

else:

monster.basic_attack(player)

time.sleep(1)

# 战斗结束

if player.is_alive():

print(f"\n恭喜!你击败了{monster.name}!")

exp, gold, item = monster.get_reward()

player.add_exp(exp)

if item:

player.add_item(item)

# 战斗后恢复部分MP

player.mp = min(player.max_mp, player.mp + 10)

print(f"战斗结束,恢复了10点MP!")

return True

else:

print(f"\n很遗憾,你被{monster.name}击败了!")

return False

def main():

"""游戏主函数"""

print("欢迎来到冒险对战游戏!")

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

player = Player(player_name)

# 给玩家初始装备

player.add_item(Item("木剑", "weapon", 3, 0, "一把简单的木剑"))

player.add_item(Item("布衣", "armor", 0, 2, "普通的布制衣服"))

player.equip_item(0) # 装备木剑

player.equip_item(1) # 装备布衣

print(f"\n欢迎,{player.name}!你的冒险开始了!")

while True:

print("\n===== 主菜单 =====")

print("1. 查看状态")

print("2. 查看技能")

print("3. 查看背包")

print("4. 装备物品")

print("5. 开始冒险(遭遇怪物)")

print("6. 退出游戏")

choice = input("请选择: ")

if choice == "1":

print("\n===== 角色状态 =====")

print(f"姓名: {player.name}")

print(f"等级: {player.level}")

print(f"经验: {player.exp}/{player.exp_to_next_level}")

print(f"HP: {player.hp}/{player.max_hp}")

print(f"MP: {player.mp}/{player.max_mp}")

print(f"攻击: {player.total_attack} (基础: {player.base_attack}{f', 武器: {player.weapon.attack_bonus}' if player.weapon else ''})")

print(f"防御: {player.total_defense} (基础: {player.base_defense}{f', 防具: {player.armor.defense_bonus}' if player.armor else ''})")

print(f"速度: {player.speed}")

print("====================")

elif choice == "2":

print("\n===== 技能列表 =====")

for skill in player.skills:

print(skill)

print("====================")

elif choice == "3":

player.show_inventory()

elif choice == "4":

if player.show_inventory():

try:

index = int(input("输入要装备的物品编号: ")) - 1

if not player.equip_item(index):

print("无效的物品编号")

except ValueError:

print("无效的输入")

elif choice == "5":

# 创建与玩家等级匹配的怪物

monster = create_random_monster(player.level)

result = battle(player, monster)

# 如果玩家战败,游戏结束

if not result:

print("\n游戏结束")

break

elif choice == "6":

print("感谢游玩!再见!")

break

else:

print("无效的选择,请重试")

input("\n按回车键继续...")

if __name__ == "__main__":

main()

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

本文打字速度TOP10

  • 暂无打字数据!