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

32453

开始打字练习

import random

import time

from enum import Enum

class ItemType(Enum):

WEAPON = 1

ARMOR = 2

POTION = 3

TREASURE = 4

class Item:

def __init__(self, name, item_type, value, description):

self.name = name

self.item_type = item_type

self.value = value # 对于武器是攻击力,对于防具是防御力,对于药水是恢复量,对于财宝是价值

self.description = description

def __str__(self):

return f"{self.name} - {self.description}"

class Character:

def __init__(self, name, health, attack, defense):

self.name = name

self.health = health

self.max_health = health

self.attack = attack

self.defense = defense

self.inventory = []

self.equipped_weapon = None

self.equipped_armor = None

def is_alive(self):

return self.health > 0

def take_damage(self, damage):

actual_damage = max(1, damage - self.get_total_defense() // 3)

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

return actual_damage

def attack_enemy(self, enemy):

total_attack = self.get_total_attack()

damage = random.randint(total_attack - 2, total_attack + 2)

return enemy.take_damage(damage)

def heal(self, amount):

self.health = min(self.max_health, self.health + amount)

return amount

def add_item(self, item):

self.inventory.append(item)

# 如果是武器或防具,自动装备更好的

if item.item_type == ItemType.WEAPON:

if not self.equipped_weapon or item.value > self.equipped_weapon.value:

self.equipped_weapon = item

return f"你装备了新的武器: {item.name} (攻击力+{item.value})"

elif item.item_type == ItemType.ARMOR:

if not self.equipped_armor or item.value > self.equipped_armor.value:

self.equipped_armor = item

return f"你装备了新的防具: {item.name} (防御力+{item.value})"

return f"你获得了: {item.name}"

def use_potion(self):

# 找到第一个药水

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

if item.item_type == ItemType.POTION:

potion = self.inventory.pop(i)

healed = self.heal(potion.value)

return (True, f"你使用了{potion.name},恢复了{healed}点生命值!")

return (False, "你没有药水了!")

def get_total_attack(self):

weapon_attack = self.equipped_weapon.value if self.equipped_weapon else 0

return self.attack + weapon_attack

def get_total_defense(self):

armor_defense = self.equipped_armor.value if self.equipped_armor else 0

return self.defense + armor_defense

def show_inventory(self):

if not self.inventory:

return "你的背包是空的。"

result = "背包物品:\n"

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

result += f"{i}. {item}\n"

return result

def __str__(self):

return (f"{self.name} - 生命值: {self.health}/{self.max_health}, "

f"攻击力: {self.get_total_attack()}, 防御力: {self.get_total_defense()}")

class Player(Character):

def __init__(self, name):

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

self.gold = 0

self.level = 1

self.xp = 0

self.xp_to_next_level = 100

def add_gold(self, amount):

self.gold += amount

return amount

def add_xp(self, amount):

self.xp += amount

leveled_up = False

while self.xp >= self.xp_to_next_level:

self.xp -= self.xp_to_next_level

self.level += 1

self.max_health += 20

self.health = self.max_health

self.attack += 3

self.defense += 2

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

leveled_up = True

return leveled_up

def __str__(self):

return (f"{super().__str__()}, 等级: {self.level}, "

f"经验值: {self.xp}/{self.xp_to_next_level}, 金币: {self.gold}")

class Enemy(Character):

def __init__(self, name, health, attack, defense, xp_reward, gold_reward):

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

self.xp_reward = xp_reward

self.gold_reward = gold_reward

def drop_loot(self):

# 30%几率掉落物品

if random.random() < 0.3:

loot_table = [

Item("生锈的剑", ItemType.WEAPON, 3, "一把生锈的剑,增加3点攻击力"),

Item("皮甲", ItemType.ARMOR, 2, "一件简单的皮甲,增加2点防御力"),

Item("小瓶治疗药水", ItemType.POTION, 20, "恢复20点生命值"),

Item("金币袋", ItemType.TREASURE, 15, "装有15金币的钱袋")

]

return random.choice(loot_table)

return None

class Location:

def __init__(self, name, description, enemies, items, connected_locations=None):

self.name = name

self.description = description

self.enemies = enemies # 可能遇到的敌人列表

self.items = items # 可能找到的物品列表

self.connected_locations = connected_locations if connected_locations else []

self.visited = False

def get_random_enemy(self):

if self.enemies and random.random() < 0.6: # 60%几率遇到敌人

return random.choice(self.enemies)

return None

def search_for_items(self):

if self.items and random.random() < 0.4: # 40%几率找到物品

return self.items.pop(random.randint(0, len(self.items)-1))

return None

def __str__(self):

return self.name

class Game:

def __init__(self):

self.player = None

self.locations = self.create_locations()

self.current_location = self.locations[0] # 从村庄开始

self.game_over = False

self.victory = False

def create_locations(self):

# 创建敌人

goblin = Enemy("哥布林", 30, 8, 2, 20, 5)

wolf = Enemy("野狼", 40, 10, 3, 30, 8)

bandit = Enemy("强盗", 60, 12, 5, 50, 15)

ogre = Enemy("食人魔", 100, 15, 8, 80, 25)

dragon = Enemy("绿龙", 200, 25, 15, 200, 50)

# 创建物品

sword = Item("铁剑", ItemType.WEAPON, 5, "一把坚固的铁剑,增加5点攻击力")

shield = Item("木盾", ItemType.ARMOR, 3, "一个木制盾牌,增加3点防御力")

potion = Item("治疗药水", ItemType.POTION, 30, "恢复30点生命值")

treasure = Item("黄金雕像", ItemType.TREASURE, 50, "价值50金币的黄金雕像")

magic_sword = Item("魔法剑", ItemType.WEAPON, 10, "一把附魔剑,增加10点攻击力")

magic_armor = Item("魔法盔甲", ItemType.ARMOR, 8, "一件魔法盔甲,增加8点防御力")

great_potion = Item("强效治疗药水", ItemType.POTION, 50, "恢复50点生命值")

# 创建地点

village = Location(

"宁静村庄",

"一个和平的小村庄,是你的冒险起点。村民们很友好,但最近受到怪物困扰。",

[], # 村庄没有敌人

[potion, Item("铜剑", ItemType.WEAPON, 2, "一把简单的铜剑,增加2点攻击力")]

)

forest = Location(

"黑暗森林",

"一片茂密的森林,阳光很难穿透树冠。你能听到奇怪的叫声。",

[goblin, wolf],

[sword, shield, potion]

)

cave = Location(

"幽深洞穴",

"一个黑暗潮湿的洞穴,墙壁上有发光的苔藓。深处传来隆隆声。",

[goblin, ogre],

[treasure, magic_sword, great_potion]

)

castle = Location(

"废弃城堡",

"一座古老的城堡废墟,曾经是王国的要塞,现在被强盗占据。",

[bandit, ogre],

[magic_armor, great_potion, treasure]

)

dragon_lair = Location(

"龙巢",

"绿龙的巢穴,地面上铺满了金币和骨头。空气中弥漫着硫磺味。",

[dragon],

[Item("龙鳞甲", ItemType.ARMOR, 15, "由龙鳞制成的盔甲,增加15点防御力"),

Item("龙之剑", ItemType.WEAPON, 20, "蕴含龙之力的剑,增加20点攻击力")]

)

# 设置连接的地点

village.connected_locations = [forest]

forest.connected_locations = [village, cave, castle]

cave.connected_locations = [forest, dragon_lair]

castle.connected_locations = [forest, dragon_lair]

dragon_lair.connected_locations = [cave, castle]

return [village, forest, cave, castle, dragon_lair]

def print_slow(self, text, delay=0.03):

for char in text:

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

time.sleep(delay)

print()

def create_player(self):

self.print_slow("\n欢迎来到冒险探索游戏!")

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

self.player = Player(name)

self.print_slow(f"你好,{self.player.name}!准备好开始你的冒险了吗?")

self.print_slow("你的目标是探索这片土地,击败绿龙,拯救王国!")

def travel(self, location):

self.current_location = location

self.current_location.visited = True

self.print_slow(f"\n你来到了{self.current_location.name}")

self.print_slow(self.current_location.description)

# 检查是否是龙巢并且是第一次来

if self.current_location.name == "龙巢" and len(self.current_location.enemies) > 0:

self.print_slow("\n绿龙发现了你!准备战斗!")

enemy = self.current_location.enemies[0]

self.battle(enemy)

# 战斗后移除龙,避免重复战斗

self.current_location.enemies = []

return

# 随机遇敌

enemy = self.current_location.get_random_enemy()

if enemy:

self.print_slow(f"\n你遇到了一只{enemy.name}!")

self.battle(enemy)

if self.game_over:

return

def battle(self, enemy):

self.print_slow(f"\n--- 与{enemy.name}的战斗开始! ---")

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

self.print_slow(f"\n{self.player}")

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

self.print_slow("\n请选择行动:")

self.print_slow("1. 攻击")

self.print_slow("2. 使用治疗药水")

self.print_slow("3. 尝试逃跑")

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

if choice == "1":

# 玩家攻击

damage = self.player.attack_enemy(enemy)

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

if not enemy.is_alive():

break

# 敌人反击

enemy_damage = enemy.attack_enemy(self.player)

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

elif choice == "2":

# 使用药水

success, message = self.player.use_potion()

self.print_slow(message)

if success:

# 敌人攻击

enemy_damage = enemy.attack_enemy(self.player)

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

elif choice == "3":

# 尝试逃跑

if random.random() < 0.4: # 40%成功率

self.print_slow("你成功逃脱了!")

return

else:

self.print_slow("逃跑失败!")

# 敌人趁机攻击

enemy_damage = enemy.attack_enemy(self.player)

self.print_slow(f"{enemy.name}趁机对你造成了{enemy_damage}点伤害!")

else:

self.print_slow("无效的选择,你犹豫了一下...")

# 敌人趁机攻击

enemy_damage = enemy.attack_enemy(self.player)

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

if self.player.is_alive():

self.print_slow(f"\n你击败了{enemy.name}!")

# 获得奖励

self.print_slow(f"你获得了{enemy.xp_reward}点经验值和{enemy.gold_reward}枚金币!")

self.player.add_xp(enemy.xp_reward)

self.player.add_gold(enemy.gold_reward)

# 检查是否升级

leveled_up = self.player.add_xp(enemy.xp_reward)

if leveled_up:

self.print_slow(f"恭喜!你升级到了{self.player.level}级!")

self.print_slow(f"你的属性提升了:生命值 {self.player.health}/{self.player.max_health}, "

f"攻击力 {self.player.get_total_attack()}, 防御力 {self.player.get_total_defense()}")

# 掉落物品

loot = enemy.drop_loot()

if loot:

message = self.player.add_item(loot)

self.print_slow(message)

# 检查是否击败了最终BOSS

if enemy.name == "绿龙":

self.victory = True

self.game_over = True

else:

self.print_slow(f"\n你被{enemy.name}击败了...")

self.game_over = True

def search_area(self):

self.print_slow("\n你开始搜索这个区域...")

time.sleep(1)

item = self.current_location.search_for_items()

if item:

message = self.player.add_item(item)

self.print_slow(message)

if item.item_type == ItemType.TREASURE:

self.player.add_gold(item.value)

self.print_slow(f"你获得了{item.value}枚金币!")

else:

self.print_slow("你没有找到任何有价值的东西。")

# 搜索可能惊动敌人

if random.random() < 0.3: # 30%几率惊动敌人

enemy = self.current_location.get_random_enemy()

if enemy:

self.print_slow(f"\n你的搜索惊动了一只{enemy.name}!")

self.battle(enemy)

def show_map(self):

self.print_slow("\n--- 地图 ---")

self.print_slow(f"当前位置: {self.current_location.name}")

self.print_slow("已探索的地点:")

for loc in self.locations:

if loc.visited:

marker = "✓" if loc == self.current_location else "•"

self.print_slow(f"{marker} {loc.name}")

self.print_slow("\n可前往的地点:")

for i, loc in enumerate(self.current_location.connected_locations, 1):

self.print_slow(f"{i}. {loc.name}")

def play(self):

self.create_player()

while not self.game_over:

self.print_slow(f"\n--- {self.current_location.name} ---")

self.print_slow("你可以:")

self.print_slow("1. 查看周围环境")

self.print_slow("2. 前往其他地点")

self.print_slow("3. 搜索该区域")

self.print_slow("4. 查看状态")

self.print_slow("5. 查看背包")

self.print_slow("6. 退出游戏")

choice = input("请选择: ")

if choice == "1":

self.print_slow(self.current_location.description)

elif choice == "2":

self.show_map()

if self.current_location.connected_locations:

loc_choice = input("请输入要前往的地点编号: ")

try:

index = int(loc_choice) - 1

if 0 <= index < len(self.current_location.connected_locations):

self.travel(self.current_location.connected_locations[index])

else:

self.print_slow("无效的选择。")

except ValueError:

self.print_slow("请输入一个数字。")

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

本文打字速度TOP10

  • 暂无打字数据!