You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的D&D文字游戏中用信息表管理敌人变量?

用类重构D&D文字游戏敌人系统

核心思路

用Enemy类封装所有敌人属性(名称、武器、AC、HP等),同时把敌人的ASCII艺术、描述也整合进类中,通过实例化不同敌人模板替代重复的全局变量定义,让代码更整洁、易维护。

实现代码

1. 定义Enemy类

import random
from random import randint

class Enemy:
    def __init__(self, name, weapon, ac, hp, attack_mod, damage_mod, exp, ascii_art=None, description=None):
        # 初始化敌人核心属性
        self.name = name
        self.weapon = weapon
        self.ac = ac
        self.hp = hp
        self.attack_mod = attack_mod
        self.damage_mod = damage_mod
        self.exp = exp
        # 可选的展示内容
        self.ascii_art = ascii_art
        self.description = description

    def spawn(self):
        # 统一处理敌人出现的输出逻辑
        if self.ascii_art:
            print(self.ascii_art)
        if self.description:
            print(self.description)
        print("")

2. 重构encounter函数

def encounter():
    # 定义概率与敌人模板的映射
    enemy_templates = {
        range(90, 96): Enemy(
            name="Orc",
            weapon="Greataxe",
            ac=13,
            hp=15,
            attack_mod=5,
            damage_mod=3,
            exp=100,
            description="An Orc howls in bloodlust as it brings its Greataxe to bare!!"
        ),
        range(97, 101): Enemy(
            name="Worg",
            weapon="Bite",
            ac=13,
            hp=26,
            attack_mod=5,
            damage_mod=3,
            exp=100,
            ascii_art=r"""
                          ,
               ,,/( ,,,,,,,,,,___,,
              )b     ,,,           "`,_,
             /(     /                   `,
            L/7_/\,,|            /        \
             ,`      `,  \     ,|          \
              ,      /  /``````||      |\,  \__,)))
                    /  / |      \\     \  \,,,,,,/
                   |  /  |       \\   )/
                   \ (|  )     ,,//   /
                    `_)_/     ((___/"'
            """,
            description="A Worg is released into the arena!!"
        ),
        range(1, 90): Enemy(
            name="Goblin",
            weapon="Scimitar",
            ac=15,
            hp=7,
            attack_mod=4,
            damage_mod=2,
            exp=50,
            ascii_art=r"""
              /(.-""-.\      
          |\  \/      \/  /|  
          | \ / =.  .= \ / |  
          \( \   o\/o   / )/  
           \_, '-/  \-' ,_/   
             /   \__/   \     
             \ \__/\__/ /     
           ___\ \|--|/ /___   
         /`    \      /    `\  
        /       '----'       \
        """,
            description="A frenzied Goblin charges you with a Scimitar!!"
        )
    }

    chance_encounter = randint(1, 100)
    # 匹配概率对应的敌人并返回实例
    for enemy_range, enemy in enemy_templates.items():
        if chance_encounter in enemy_range:
            enemy.spawn()
            return enemy

# 使用示例:获取当前遭遇的敌人,直接访问其属性
current_enemy = encounter()
if current_enemy:
    print(f"【当前敌人】{current_enemy.name} | 生命值:{current_enemy.hp} | 护甲等级:{current_enemy.ac}")

优化亮点

  • 消除全局变量污染:所有敌人属性都封装在Enemy实例中,访问时直接通过实例调用(如current_enemy.hp),避免全局变量混乱。
  • 模块化扩展:新增敌人只需在enemy_templates中添加新的Enemy实例,无需修改核心逻辑。
  • 逻辑封装:把敌人出现的输出逻辑放在spawn方法中,后续修改展示样式只需调整类方法,不用改动生成逻辑。
  • 可扩展性强:后续可以给Enemy类添加更多方法,比如take_damage()处理受伤害逻辑、attack()处理攻击逻辑,让战斗系统更完整。

内容的提问来源于stack exchange,提问作者kingsc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:45:11