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

文本游戏开发:如何通过用户输入调用类的属性值?

我来帮你完善这个技能调用的功能!你的思路是对的,用字典做输入到技能对象的映射是个好方法,不过需要补全几个关键细节,让功能更健壮且易用。

先梳理现有问题

  1. 你的cmnd2字典只包含了SHP,没把SWP加进去,没法处理另一个技能的输入
  2. 直接访问cmnd2[inp]如果用户输入不存在的技能名,会直接抛出KeyError导致程序崩溃
  3. 没有明确返回或获取技能的属性(比如你需要的AP数值)

完善后的代码实现

首先保持你的Abilities.py不变(确保所有技能都正确定义):

# Abilities.py
import Nstats
class Ability():
    def __init__(self, AP, Desc):
        self.AP = int(AP)
        self.Desc = Desc

SHP = Ability(10, "Super Hard Punch!")
SWP = Ability(32, "Literally kills you!!")

然后修改战斗逻辑脚本里的convert函数,补全映射、错误处理和属性获取:

import Abilities

def convert(inp):
    # 建立所有技能名称到对应Ability对象的映射表
    skill_mapping = {
        'SHP': Abilities.SHP,
        'SWP': Abilities.SWP
        # 后续新增技能,直接在这里添加键值对即可,扩展性拉满
    }

    # 先检查用户输入的技能是否存在
    if inp not in skill_mapping:
        # 可以返回错误提示,或者根据游戏逻辑返回默认值/执行其他操作
        return f"Invalid skill: '{inp}' doesn't exist!"
    
    # 获取选中的技能对象
    target_skill = skill_mapping[inp]
    
    # 如果你需要直接返回AP数值,就返回这个
    return target_skill.AP
    # 要是之后需要用到技能描述(Desc),也可以返回整个对象:return target_skill

测试使用示例

你可以这样调用这个函数,模拟用户输入:

# 模拟用户输入技能名
user_skill = input("Enter the skill you want to use: ")
skill_ap = convert(user_skill)
print(f"Skill AP value: {skill_ap}")

额外优化建议(可选)

为了让代码更模块化,你可以把技能映射表直接放在Abilities.py里,这样所有技能相关的定义都集中在一个地方:

# 在Abilities.py末尾添加
SKILL_REGISTRY = {
    'SHP': SHP,
    'SWP': SWP
}

然后战斗脚本里直接用Abilities.SKILL_REGISTRY,不用自己维护映射表,后续改技能更方便。

这样修改后,用户输入正确的技能名就能拿到对应的AP数值,输入错误也不会崩溃,完全满足你的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:34:18